2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、<p>  POI操作Excel----------(轉(zhuǎn)載)</p><p>  java當(dāng)初把核心處理設(shè)成Unicode,帶來的好處是另代碼適應(yīng)了多語言環(huán)境。然而由于老外的英語只有26個字母,有些情況下,一些程序員用8 位的byte處理,一不小心就去掉了CJK的高位?;蛘呤怯捎诹?xí)慣在程序中采用硬編碼,還有多種原因,使得許多java應(yīng)用在CJK的處理上很煩惱。期貨開戶流程還好 在POI HSSF中考慮到

2、這個問題,可以設(shè)置encoding為雙字節(jié)。POI可以到www.apache.org下載到。編譯好的jar主要有這樣4個:poi包,poi Browser包,poi hdf包,poi hssf例程包。實際運行時,需要有poi包就可以了。如果用Jakarta ant編譯和運行,下載apache Jakarta POI的release中的src包,它里面已經(jīng)為你生成好了build文件了。只要運行ant就可以了(ant 的安裝和使用在此不

3、說了)。如果是用Jbuilder 運行,請在新建的項目中加入poi包。以Jbuilder6為例,選擇Tools菜單項的config libraries...選項,新建一個lib。在彈出的菜單中選擇poi包,如這個jakarta-poi-</p><p>  [java] view plaincopyprint?</p><p>  <span style="fon

4、t-family:Microsoft YaHei;font-size:12px;color:#333333;">Java代碼    </p><p>  import org.apache.poi.hssf.usermodel.HSSFWorkbook;    </p><p&g

5、t;  import java.io.FileOutputStream;    </p><p>  import java.io.IOException;    </p><p>  public class NewWorkbook   &

6、#160;</p><p><b>  {    </b></p><p>  public static void main(String[] args)    </p><p>  throws IOExcept

7、ion    </p><p><b>  {    </b></p><p>  HSSFWorkbook wb = new HSSFWorkbook();//建立新HSSFWorkbook對象     &l

8、t;/p><p>  FileOutputStream fileOut = new FileOutputStream("workbook.xls");    </p><p>  wb.write(fileOut);//把Workbook對象輸出到文件workbook.xls中 

9、60;   </p><p>  fileOut.close();    </p><p><b>  }    </b></p><p><b>  }    </b></p&

10、gt;<p>  通過這個例子,商品期貨開戶我們建立的是一個空白的xls文件(不是空文件)。在此基礎(chǔ)上,我們可以進一步看其它的例子。    </p><p>  import org.apache.poi.hssf.usermodel.*;    </p><p>  import

11、60;java.io.FileOutputStream;    </p><p>  import java.io.IOException;    </p><p>  public class CreateCells    </p&g

12、t;<p><b>  {    </b></p><p>  public static void main(String[] args)    </p><p>  throws IOException 

13、0;  </p><p><b>  {    </b></p><p>  HSSFWorkbook wb = new HSSFWorkbook();//建立新HSSFWorkbook對象     </p><

14、;p>  HSSFSheet sheet = wb.createSheet("new sheet");//建立新的sheet對象     </p><p>  // Create a row and put some cells 

15、in it. Rows are 0 based.     </p><p>  HSSFRow row = sheet.createRow((short)0);//建立新行     </p><p>  // Create

16、 a cell and put a value in it.     </p><p>  HSSFCell cell = row.createCell((short)0);//建立新cell     </p>

17、<p>  cell.setCellValue(1);//設(shè)置cell的整數(shù)類型的值     </p><p>  // Or do it on one line.     </p><p>  row.createCell((short)1

18、).setCellValue(1.2);//設(shè)置cell浮點類型的值     </p><p>  row.createCell((short)2).setCellValue("test");//設(shè)置cell字符類型的值     </p><p>  row.createCell((shor

19、t)3).setCellValue(true);//設(shè)置cell布爾類型的值     </p><p>  HSSFCellStyle cellStyle = wb.createCellStyle();//建立新的cell樣式     </p><p>  cellStyle.se

20、tDataFormat(HSSFDataFormat.getFormat("m/d/yy h:mm"));//設(shè)置cell樣式為定制的日期格式     </p><p>  HSSFCell dCell =row.createCell((short)4);    </p>

21、<p>  dCell.setCellValue(new Date());//設(shè)置cell為日期類型的值     </p><p>  dCell.setCellStyle(cellStyle); //設(shè)置該cell日期的顯示格式     </p><p>  HSSFCell&

22、#160;csCell =row.createCell((short)5);    </p><p>  csCell.setEncoding(HSSFCell.ENCODING_UTF_16);//設(shè)置cell編碼解決中文高位字節(jié)截斷     </p><p>  csCell.setCellVal

23、ue("中文測試_Chinese Words Test");//設(shè)置中西文結(jié)合字符串     </p><p>  row.createCell((short)6).setCellType(HSSFCell.CELL_TYPE_ERROR);//建立錯誤cell     </p>

24、<p>  // Write the output to a file     </p><p>  FileOutputStream fileOut = new FileOutputStream("workbook.xls"); &#

25、160;  </p><p>  wb.write(fileOut);    </p><p>  fileOut.close();    </p><p><b>  }    </b></p>

26、;<p><b>  }    </b></p><p>  我稍微修改了原來的examples包中的CreateCells類寫了上面的功能測試類。通過這個例子,我們可以清楚的看到xls文件從大到小包 括了HSSFWorkbook HSSFSheet HSSFRow HSSFCell這樣幾個對象。我

27、們可以在cell中設(shè)置各種類型的值。尤其要注意的是如果你想正確的顯示非歐美的字符時,尤其象中日韓這樣的語言,必須 股指期貨開戶設(shè)置編碼為16位的即是HSSFCell.ENCODING_UTF_16,才能保證字符的高8位不被截斷而引起編碼失真形成亂碼。    </p><p>  其他測試可以通過參考examples包中的測試?yán)诱莆誴oi的詳細(xì)用法,包括字體的設(shè)置

28、,cell大小和低紋的設(shè)置等。需要注意的是POI是一 個仍然在完善中的公開代碼的項目,所以有些功能正在不斷的擴充。如HSSFSheet的getFooter() getHeader()和setFooter(HSSFFooter hsf) setHeader(HSSFHeader hsh)是在POI1.7中才有的,而POI1.5中就沒有。運行測試熟悉代碼或者使用它做項目時請注意POI的版本。

29、    </p><p>  另外需要注意的是HSSF也有它的對xls基于事件的解析。可以參考例程中的EventExample.java。它通過實現(xiàn) HSSFListener完成從普通流認(rèn)知Xls中包含的內(nèi)容,在apache Cocoon中的org.apache.cocoon.serialization.HSSFSerializer中用到了這個解析。因為

30、Cocoon2 是基于事件的,所以POI為了提供快速的解析也提供了相應(yīng)的事件。當(dāng)然我們自己也可以實現(xiàn)這個事件接口。    </p><p>  因為POI還不是一個足夠成熟的項目,所以有必要做進一步的開發(fā)和測試。但是它已經(jīng)為我們用純java操作ole2對象提供了可能,而且克服了ole對象調(diào)用的缺陷,提供了服務(wù)器端的Excel解決方案。  

31、60;  </p><p>  ======================================================    </p><p>  利用Java 創(chuàng)建和讀取Excel文檔    </p><p>  為了保證示例程序的運

32、行,必須安裝Java 2 sdk1.4.0 和Jakarta POI,Jakarta POI的Web站點是: http://jakarta.apache.org/poi/     </p><p>  示例1將演示如何利用Jakarta POI API 創(chuàng)建Excel 文檔。

33、    </p><p>  示例1程序如下:    </p><p>  import org.apache.poi.hssf.usermodel.HSSFWorkbook;    </p><p>  import org.

34、apache.poi.hssf.usermodel.HSSFSheet;    </p><p>  import org.apache.poi.hssf.usermodel.HSSFRow;    </p><p>  import org.apache.poi.hssf.usermode

35、l.HSSFCell;    </p><p>  import java.io.FileOutputStream;    </p><p>  public class CreateXL {    </p><

36、p>  /** Excel 文件要存放的位置,假定在D盤JTest目錄下*/    </p><p>  public static String outputFile="D:/JTest/ gongye.xls";    </p>&

37、lt;p>  public static void main(String argv[])    </p><p><b>  {    </b></p><p><b>  try    &l

38、t;/b></p><p><b>  {    </b></p><p>  // 創(chuàng)建新的Excel 工作簿     </p><p>  HSSFWorkbook workbook = new 

39、HSSFWorkbook();    </p><p>  // 在Excel工作簿中建一工作表,其名為缺省值     </p><p>  // 如要新建一名為"效益指標(biāo)"的工作表,其語句為:     </p>&l

40、t;p>  // HSSFSheet sheet = workbook.createSheet("效益指標(biāo)");     </p><p>  HSSFSheet sheet = workbook.createSheet();    <

41、;/p><p>  // 在索引0的位置創(chuàng)建行(最頂端的行)     </p><p>  HSSFRow row = sheet.createRow((short)0);    </p><p>  //在索引0的位置創(chuàng)建單元格(左上端) 

42、    </p><p>  HSSFCell cell = row.createCell((short) 0);    </p><p>  // 定義單元格為字符串類型     </p><p>  ce

43、ll.setCellType(HSSFCell.CELL_TYPE_STRING);    </p><p>  // 在單元格中輸入一些內(nèi)容     </p><p>  cell.setCellValue("增加值");    </

44、p><p>  // 新建一輸出文件流     </p><p>  FileOutputStream fOut = new FileOutputStream(outputFile);    </p><p>  // 把相應(yīng)的Ex

45、cel 工作簿存盤     </p><p>  workbook.write(fOut);    </p><p>  fOut.flush();    </p><p>  // 操作結(jié)束,關(guān)閉文件  

46、  </p><p>  fOut.close();    </p><p>  System.out.println("文件生成...");    </p><p>  }catch(Exception e) { &

47、#160;  </p><p>  System.out.println("已運行 xlCreate() : " + e );    </p><p><b>  }    </b><

48、/p><p><b>  }    </b></p><p><b>  }    </b></p><p>  讀取Excel文檔中的數(shù)據(jù)    </p><p>  示例2將演示如

49、何讀取Excel文檔中的數(shù)據(jù)。假定在D盤JTest目錄下有一個文件名為gongye.xls的Excel文件。    </p><p>  示例2程序如下:    </p><p>  import org.apache.poi.hssf.usermodel.HSSFWorkbook; 

50、60;  </p><p>  import org.apache.poi.hssf.usermodel.HSSFSheet;    </p><p>  import org.apache.poi.hssf.usermodel.HSSFRow;    </p>

51、;<p>  import org.apache.poi.hssf.usermodel.HSSFCell;    </p><p>  import java.io.FileInputStream;    </p><p>  public class Re

52、adXL {    </p><p>  /** Excel文件的存放位置。注意是正斜線*/    </p><p>  public static String fileToBeRead="D:/JTest/ gongye.xls"

53、;;    </p><p>  public static void main(String argv[]){     </p><p><b>  try{    </b></p>

54、<p>  // 創(chuàng)建對Excel工作簿文件的引用     </p><p>  HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(fileToBeRead));    </p>

55、<p>  // 創(chuàng)建對工作表的引用。     </p><p>  // 本例是按名引用(讓我們假定那張表有著缺省名"Sheet1")     </p><p>  HSSFSheet sheet = workbook.getSh

56、eet("Sheet1");    </p><p>  // 也可用getSheetAt(int index)按索引引用,     </p><p>  // 在Excel文檔中,第一張工作表的缺省索引是0,     &

57、lt;/p><p>  // 其語句為:HSSFSheet sheet = workbook.getSheetAt(0);     </p><p>  // 讀取左上端單元     </p><p>  HSSFRow row&#

58、160;= sheet.getRow(0);    </p><p>  HSSFCell cell = row.getCell((short)0);    </p><p>  // 輸出單元內(nèi)容,cell.getStringCellValue()就是取所在單

59、元的值     </p><p>  System.out.println("左上端單元是: " + cell.getStringCellValue());     </p><p>  }catch(Exception e) {&

60、#160;   </p><p>  System.out.println("已運行xlRead() : " + e );    </p><p><b>  }    </b></p

61、><p><b>  }    </b></p><p><b>  }    </b></p><p>  設(shè)置單元格格式    </p><p>  在這里,我們將只介紹一些和格式

62、設(shè)置有關(guān)的語句,我們假定workbook就是對一個工作簿的引用。在Java    </p><p>  中,第一步要做的就是創(chuàng)建和設(shè)置字體和單元格的格式,然后再應(yīng)用這些格式:    </p><p>  1、創(chuàng)建字體,設(shè)置其為紅色、粗體:    </p>&

63、lt;p>  HSSFFont font = workbook.createFont();    </p><p>  font.setColor(HSSFFont.COLOR_RED);    </p><p>  font.setBoldweight(HSSFFont.B

64、OLDWEIGHT_BOLD);    </p><p>  2、創(chuàng)建格式    </p><p>  HSSFCellStyle cellStyle= workbook.createCellStyle();    </p><p&

65、gt;  cellStyle.setFont(font);    </p><p>  3、應(yīng)用格式     </p><p>  HSSFCell cell = row.createCell((short) 0);    

66、;</p><p>  cell.setCellStyle(cellStyle);    </p><p>  cell.setCellType(HSSFCell.CELL_TYPE_STRING);    </p><p>  cell.setCellValue("標(biāo)題

67、60;");    </p><p>  總之,如本篇文章所演示的一樣,Java程序員不必?fù)?dān)心Excel工作表中的數(shù)據(jù)了,利用Jakarta POI API,    </p><p>  我們就可以輕易的在程序中存取Excel文檔。    &

68、lt;/p><p>  ==============================================    </p><p>  首先說說現(xiàn)在我所知道的Java編輯Excel文件的兩大開源工具:    </p><p>  jakarta POI和JavaExcel

69、API(簡稱JXL),這兩套工具我都試用了一這段時間,感覺各有優(yōu)劣吧。POI在某些細(xì)節(jié)有些小Bug并且不支持寫入圖片,其他方面都挺不錯的;    </p><p>  JXL就慘了,除了支持寫入圖片外,我暫時看不到它比POI好的地方,我碰到的主要的問題就是對公式支持不是很好,很多帶有公式的Excel文件用 JXL打開后,公式就丟失了(比如now(),today()

70、),在網(wǎng)上看到其他大蝦評論說JXL寫入公式也有問題,另外,JXL操作Excel文件的效 率比POI低一點。經(jīng)過比較后,我選擇了POI開發(fā)我的項目。    </p><p>  現(xiàn)在我要做的東西基本完成啦,我把這段時間使用POI的一些心得總結(jié)出來,希望能對和我遇到相同問題的朋友有所幫助,至于POI基本的使用方法,自己去看文檔吧。   &

71、#160;</p><p>  1、設(shè)置分頁符的bug    </p><p>  POI里的HSSFSheet類提供了setRowBreak方法可以設(shè)置Sheet的分頁符。    </p><p>  Bug:如果你要設(shè)置分頁符的Sheet是本來就有的,并且你沒有在里面插入過分頁符,那

72、么調(diào)用setRowBreak時POI會拋出空指針的異常。    </p><p>  解決方法:在Excel里給這個sheet插入一個分頁符,用POI打開后再把它刪掉,然后你就可以隨意插入分頁符了。    </p><p>  如果sheet是由POI生成的則沒有這個問題。我跟蹤了setRowBreak的源代碼

73、,發(fā)現(xiàn)是Sheet.Java下的 PageBreakRecord rowBreaks這個變量在搞鬼,如果Sheet里原來沒有分頁符,開發(fā)這個模塊的那位兄臺忘了為這個對象new實例,所以只能我們先手工給Excel 插入一個分頁符來觸發(fā)POI為rowBreaks創(chuàng)建實例。    </p><p>  2、如何拷貝行   

74、; </p><p>  我在gmane.org的POI用戶論壇翻遍了每個相關(guān)的帖子,找遍了api,也沒看到一個拷貝行的方法,沒辦法,只能自己寫:    </p><p>  //注:this.fWorkbook是一個HSSHWorkbook,請自行在外部new     </p><

75、;p>  public void copyRows    </p><p>  (String pSourceSheetName,     </p><p>  String pTargetSheetName,    

76、; </p><p>  int pStartRow, int pEndRow,    </p><p>  int pPosition)    </p><p><b>  {    &

77、lt;/b></p><p>  HSSFRow sourceRow = null;    </p><p>  HSSFRow targetRow = null;    </p><p>  HSSFCell 

78、sourceCell = null;    </p><p>  HSSFCell targetCell = null;    </p><p>  HSSFSheet sourceSheet = null;  

79、  </p><p>  HSSFSheet targetSheet = null;    </p><p>  Region region = null;    </p><p>  int cT

80、ype;    </p><p>  int i;    </p><p>  short j;    </p><p>  int targetRowFrom;    <

81、/p><p>  int targetRowTo;    </p><p>  if ((pStartRow == -1) || (pEndRow == -1))    </p><p><b>  {

82、    </b></p><p>  return;    </p><p><b>  }    </b></p><p>  sourceSheet = this.fWorkbook.get

83、Sheet(pSourceSheetName);    </p><p>  targetSheet = this.fWorkbook.getSheet(pTargetSheetName);    </p><p>  //拷貝合并的單元格     &

84、lt;/p><p>  for (i = 0; i < sourceSheet.getNumMergedRegions(); i++)    </p><p><b>  {    </b></p>&l

85、t;p>  region = sourceSheet.getMergedRegionAt(i);    </p><p>  if ((region.getRowFrom() >= pStartRow) && (region.getRowTo() <= 

86、;pEndRow))    </p><p><b>  {    </b></p><p>  targetRowFrom = region.getRowFrom() - pStartRow + pPosition; 

87、   </p><p>  targetRowTo = region.getRowTo() - pStartRow + pPosition;    </p><p>  region.setRowFrom(targetRowFrom);  &

88、#160; </p><p>  region.setRowTo(targetRowTo);    </p><p>  targetSheet.addMergedRegion(region);    </p><p><b>  }   

89、; </b></p><p><b>  }     </b></p><p>  //設(shè)置列寬     </p><p>  for (i = pStartRow; i <=&

90、#160;pEndRow; i++)    </p><p><b>  {    </b></p><p>  sourceRow = sourceSheet.getRow(i);    </p><

91、;p>  if (sourceRow != null)    </p><p><b>  {    </b></p><p>  for (j = sourceRow.getFirstCellNum(); j&#

92、160;< sourceRow.getLastCellNum(); j++)    </p><p><b>  {    </b></p><p>  targetSheet.setColumnWidth(j, sourceSheet.getColum

93、nWidth(j));    </p><p><b>  }    </b></p><p>  break;    </p><p><b>  }    </b&g

94、t;</p><p><b>  }    </b></p><p>  //拷貝行并填充數(shù)據(jù)     </p><p>  for (;i <= pEndRow; i++)    

95、;</p><p><b>  {    </b></p><p>  sourceRow = sourceSheet.getRow(i);    </p><p>  if (sourceRow == null)&

96、#160;   </p><p><b>  {    </b></p><p>  continue;    </p><p><b>  }    </b></p&

97、gt;<p>  targetRow = targetSheet.createRow(i - pStartRow + pPosition);    </p><p>  targetRow.setHeight(sourceRow.getHeight());    

98、;</p><p>  for (j = sourceRow.getFirstCellNum(); j < sourceRow.getLastCellNum(); j++)    </p><p><b>  {    <

99、;/b></p><p>  sourceCell = sourceRow.getCell(j);    </p><p>  if (sourceCell == null)    </p><p><b>  {

100、0;   </b></p><p>  continue;    </p><p><b>  }    </b></p><p>  targetCell = targetRow.createCell(

101、j);    </p><p>  targetCell.setEncoding(sourceCell.getEncoding());    </p><p>  targetCell.setCellStyle(sourceCell.getCellStyle());    

102、;</p><p>  cType = sourceCell.getCellType();    </p><p>  targetCell.setCellType(cType);    </p><p>  switch (cType) 

103、0;  </p><p><b>  {    </b></p><p>  case HSSFCell.CELL_TYPE_BOOLEAN:     </p><p>  targetCell.setCellValue(so

104、urceCell.getBooleanCellValue());    </p><p>  break;    </p><p>  case HSSFCell.CELL_TYPE_ERROR:    </p><p>  target

105、Cell.setCellErrorValue(sourceCell.getErrorCellValue());    </p><p>  break;                </p><

106、p>  case HSSFCell.CELL_TYPE_FORMULA:    </p><p>  //parseFormula這個函數(shù)的用途在后面說明     </p><p>  targetCell.setCellFormula(parseFormula(sourceCell.getCe

107、llFormula()));    </p><p>  break;    </p><p>  case HSSFCell.CELL_TYPE_NUMERIC:    </p><p>  targetCell.setCellValu

108、e(sourceCell.getNumericCellValue());    </p><p>  break;    </p><p>  case HSSFCell.CELL_TYPE_STRING:    </p><p>  t

109、argetCell.setCellValue(sourceCell.getStringCellValue());    </p><p>  break;    </p><p><b>  }    </b></p><p>

110、;<b>  }    </b></p><p><b>  }    </b></p><p><b>  }    </b></p><p>  這個函數(shù)有兩個問題暫時無法解決:

111、    </p><p>  a、只能在同一個Workbook里面使用,跨Workbook總是拷不過去,不知道為什么?    </p><p>  b、由于在拷貝行時也把行高也拷過去了,如果往這些單元格里寫入的數(shù)據(jù)長度超過單元格長度,那么他們不會自動調(diào)整行高!    &l

112、t;/p><p>  3、公式的問題    </p><p>  POI對Excel公式的支持是相當(dāng)好的,但是我發(fā)現(xiàn)一個問題,如果公式里面的函數(shù)不帶參數(shù),比如now()或today(),那么你通過 getCellFormula()取出來的值就是now(ATTR(semiVolatile))和today(ATTR (semiVolati

113、le)),這樣的值寫入Excel是會出錯的,這也是我上面copyRow的函數(shù)在寫入公式前要調(diào)用parseFormula的原 因,parseFormula這個函數(shù)的功能很簡單,就是把ATTR(semiVolatile)刪掉,我把它的代碼貼出來:    </p><p>  private String parseFormula(String

114、60;pPOIFormula)    </p><p><b>  {    </b></p><p>  final String cstReplaceString = "ATTR(semiVolatile)"; //

115、$NON-NLS-1$     </p><p>  StringBuffer result = null;    </p><p>  int index;    </p><p>  result

116、0;= new StringBuffer();    </p><p>  index = pPOIFormula.indexOf(cstReplaceString);    </p><p>  if (index >= 0)

117、0;   </p><p><b>  {    </b></p><p>  result.append(pPOIFormula.substring(0, index));    </p><p>  result.appe

118、nd(pPOIFormula.substring(index + cstReplaceString.length()));    </p><p><b>  }    </b></p><p><b>  else   

119、0;</b></p><p><b>  {    </b></p><p>  result.append(pPOIFormula);    </p><p><b>  }    </b>

120、</p><p>  return result.toString();    </p><p><b>  }    </b></p><p>  至于為什么會出現(xiàn)ATTR(semiVolatile),還需要大家的探索精神!  

121、60; </p><p>  4、向Excel寫入圖片的問題。    </p><p>  我上POI論壇查相關(guān)帖子,得到兩種結(jié)論:    </p><p>  1、不支持寫入圖片;    </p><p>  2

122、、支持寫入圖片,通過EscherGraphics2d這個Class實現(xiàn)。于是我就去查EscherGraphics2d這個Class,發(fā)現(xiàn) 這個Class提供了N個drawImage方法,喜出望外的我開始寫代碼,結(jié)果調(diào)了一天,一直看不到效果,黔驢技窮的我在萬般無奈下只好跟蹤進 drawImage這個函數(shù)內(nèi)部,經(jīng)過N個函數(shù)調(diào)用后在最底層函數(shù)發(fā)現(xiàn)了最終答案:    </p>

123、;<p>  public boolean drawImage(Image image, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1,    </p><

124、p>  int sx2, int sy2, Color bgColor, ImageObserver imageobserver)    </p><p><b>  {    </b></p><p>  if&

125、#160;(logger.check( POILogger.WARN ))    </p><p>  logger.log(POILogger.WARN,"drawImage() not supported");    </p><p>  retu

126、rn true;    </p><p><b>  }    </b></p><p>  所以我強烈建議大家,以后使用第三方開發(fā)包一定盡量下載它的源代碼,這樣你在碰到問題時,看看它的的內(nèi)部是怎么實現(xiàn)的,很多時候就可以不必重蹈我的 覆轍了。既然POI不能寫入圖片,那我

127、們只能把目光投向JXL,我用JXL寫入圖片功能是實現(xiàn)了,付出的代價是now()和today()這些函數(shù)丟失掉 了,魚與熊掌不能兼得吧。    </p><p>  ==========================jsp操作===============================    </p><

128、;p>  <%@ page contentType="application/msexcel;charset=gb2312" %>    </p><p>  response.setHeader("Content-disposition","inline; file

129、name=test1.xls");    </p><p>  //以上這行設(shè)定傳送到前端瀏覽器時的檔名為test1.xls     </p><p>  //就是靠這一行,讓前端瀏覽器以為接收到一個excel檔     </p><p>

130、;  下面正常顯示要轉(zhuǎn)化的表    </p><p>  --------------------------------------------------------------------------    </p><p><b>  介紹:    &l

131、t;/b></p><p>  Jakarta_POI 使用Java讀寫Excel(97-2002)文件,可以滿足大部分的需要。    </p><p>  因為剛好有一個項目使用到了這個工具,花了點時間順便翻譯了一下POI本身    </p><p>  帶的一個Gui

132、de.有一些節(jié)減和修改,希望給使用這個項目的人一些入門幫助。    </p><p>  POI 下面有幾個自項目:HSSF用來實現(xiàn)Excel 的讀寫.以下是HSSF的主頁    </p><p>  http://jakarta.apache.org/poi/hssf/index.html

133、     </p><p>  下面的介紹是基于以下地址的翻譯:    </p><p>  http://jakarta.apache.org/poi/hssf/quick-guide.html     </p><p>  目前的版本為1.51

134、應(yīng)該是很長時間之內(nèi)的一個穩(wěn)定版,但HSSF提供的Sample不是基于    </p><p>  1.51所寫,所以使用的時候需要適當(dāng)?shù)淖⒁?    </p><p>  其實POI下面的幾個子項目側(cè)重不同讀寫 Word 的HDF正在開發(fā)當(dāng)中.    

135、</p><p>  XML下的FOP(http://xml.apache.org/fop/index.html)     </p><p>  可以輸出pdf文件,也是比較好的一個工具    </p><p><b>  目錄:    

136、</b></p><p>  創(chuàng)建一個workbook    </p><p>  創(chuàng)建一個sheet    </p><p>  創(chuàng)建cells    </p><p>  創(chuàng)建日期cells 

137、60;  </p><p>  設(shè)定單元格格式    </p><p><b>  說明:    </b></p><p>  以下可能需要使用到如下的類    </p><p> 

138、 import org.apache.poi.hssf.usermodel.HSSFCell;    </p><p>  import org.apache.poi.hssf.usermodel.HSSFCellStyle;    </p><p>  import org.ap

139、ache.poi.hssf.usermodel.HSSFDataFormat;    </p><p>  import org.apache.poi.hssf.usermodel.HSSFFont;    </p><p>  import org.apache.poi.hssf.user

140、model.HSSFRow;    </p><p>  import org.apache.poi.hssf.usermodel.HSSFSheet;    </p><p>  import org.apache.poi.hssf.usermodel.HSSFWorkbook; 

141、;   </p><p>  import org.apache.poi.hssf.util.HSSFColor;    </p><p>  創(chuàng)建workbook    </p><p>  HSSFWorkbook wb =

142、 new HSSFWorkbook();    </p><p>  //使用默認(rèn)的構(gòu)造方法創(chuàng)建workbook     </p><p>  FileOutputStream fileOut = new FileOutputStream("

143、workbook.xls");    </p><p>  //指定文件名     </p><p>  wb.write(fileOut);    </p><p>  //輸出到文件     &

144、lt;/p><p>  fileOut.close();    </p><p>  創(chuàng)建一個sheet    </p><p>  HSSFWorkbook wb = new HSSFWorkbook();   

145、0;</p><p>  HSSFSheet sheet1 = wb.createSheet("new sheet");    </p><p>  //workbook創(chuàng)建sheet     </p><p>  HSSFSh

146、eet sheet2 = wb.createSheet("second sheet");    </p><p>  //workbook創(chuàng)建另外的sheet     </p><p>  FileOutputStream fileOut&#

147、160;= new FileOutputStream("workbook.xls");    </p><p>  wb.write(fileOut);    </p><p>  fileOut.close();    </

148、p><p>  創(chuàng)建cells    </p><p>  HSSFWorkbook wb = new HSSFWorkbook();    </p><p>  HSSFSheet sheet = wb.createSh

149、eet("new sheet");    </p><p>  //注意以下的代碼很多方法的參數(shù)是short 而不是int 所以需要做一次類型轉(zhuǎn)換     </p><p>  HSSFRow row = sheet.createR

150、ow((short)0);    </p><p>  //sheet 創(chuàng)建一行     </p><p>  HSSFCell cell = row.createCell((short)0);    </p><

151、;p>  //行創(chuàng)建一個單元格     </p><p>  cell.setCellValue(1);    </p><p>  //設(shè)定單元格的值     </p><p>  //值的類型參數(shù)有多中double ,Strin

152、g ,boolean,     </p><p>  row.createCell((short)1).setCellValue(1.2);    </p><p>  row.createCell((short)2).setCellValue("This is a

153、60;string");    </p><p>  row.createCell((short)3).setCellValue(true);    </p><p>  // Write the output to a file 

154、    </p><p>  FileOutputStream fileOut = new FileOutputStream("workbook.xls");    </p><p>  wb.write(fileOut);   &

155、#160;</p><p>  fileOut.close();    </p><p>  創(chuàng)建日期cells    </p><p>  HSSFWorkbook wb = new HSSFWorkbook();  

156、0; </p><p>  HSSFSheet sheet = wb.createSheet("new sheet");    </p><p>  HSSFRow row = sheet.createRow((short)0);  

157、;  </p><p>  HSSFCell cell = row.createCell((short)0);    </p><p>  //設(shè)定值為日期     </p><p>  cell.setCellValue(new

158、0;Date());    </p><p>  HSSFCellStyle cellStyle = wb.createCellStyle();    </p><p>  //指定日期顯示格式     </p><p&g

159、t;  cellStyle.setDataFormat(HSSFDataFormat.getFormat("m/d/yy h:mm"));    </p><p>  cell = row.createCell((short)1);    </p><p>  

160、cell.setCellValue(new Date());    </p><p>  //設(shè)定單元格日期顯示格式     </p><p>  cell.setCellStyle(cellStyle);    </p><p>  F

161、ileOutputStream fileOut = new FileOutputStream("workbook.xls");    </p><p>  wb.write(fileOut);    </p><p>  fileOut.close()

162、;    </p><p>  設(shè)定單元格格式    </p><p>  單元格格式的設(shè)定有很多形式包括單元格的對齊方式,內(nèi)容的字體設(shè)置,    </p><p>  單元格的背景色等,因為形式比較多,只舉一些例子.以下的例子在 

163、60;  </p><p>  POI1.5中可能會有所改變具體查看API.    </p><p>  ..........    </p><p>  // Aqua background     <

164、;/p><p>  HSSFCellStyle style = wb.createCellStyle();    </p><p>  //創(chuàng)建一個樣式     </p><p>  style.setFillBackgroundColor(HSSFCellSt

165、yle.AQUA);    </p><p>  //設(shè)定此樣式的的背景顏色填充     </p><p>  style.setFillPattern(HSSFCellStyle.BIG_SPOTS);    </p><p>  //樣式的填充

166、類型。     </p><p>  //有多種式樣如:     </p><p>  //HSSFCellStyle.BIG_SPOTS     </p><p>  //HSSFCellStyle.FINE_DOTS   &

167、#160; </p><p>  //HSSFCellStyle.SPARSE_DOTS等     </p><p>  style.setAlignment(HSSFCellStyle.ALIGN_CENTER );    </p><p>  //居中對齊

168、0;    </p><p>  style.setFillBackgroundColor(HSSFColor.GREEN.index);    </p><p>  //設(shè)定單元個背景顏色     </p><p>  style.setFillForeg

169、roundColor(HSSFColor.RED.index);    </p><p>  //設(shè)置單元格顯示顏色     </p><p>  HSSFCell cell = row.createCell((short) 1);   &#

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論