Dev@Free

          zJun's Tech Weblog

          使用POI生成Excel文件

          Apache的Jakata項目的POI子項目,目標是處理ole2對象。 POI可以到 http://www.apache.org/dyn/closer.cgi/jakarta/poi/ 下載。 編譯好的jar主要有這樣4個:poi包,poi Browser包,poi hdf包,poi hssf例程包。實際運行時,需要有poi包就可以了。

          HSSF提供給用戶使用的對象在org.apache.poi.hssf.usermodel包中,主要部分包括Excell對象,樣式和格式,還有輔助操作。有以下幾種對象:
          HSSFWorkbook excell的文檔對象
          HSSFSheet excell的表單
          HSSFRow excell的行
          HSSFCell excell的格子單元
          HSSFFont excell字體
          HSSFName 名稱
          HSSFDataFormat 日期格式

          在poi1.7中才有以下2項:
          HSSFHeader sheet頭
          HSSFFooter sheet尾

          和這個樣式
          HSSFCellStyle cell樣式

          輔助操作包括
          HSSFDateUtil 日期
          HSSFPrintSetup 打印
          HSSFErrorConstants 錯誤信息表

          下面是一個簡單的例子:

          /**
          ?*?
          ?
          */

          package ?com.justinmobile.payease.admin.commons.excel;

          import
          ?java.io.FileNotFoundException;
          import
          ?java.io.FileOutputStream;
          import
          ?java.io.IOException;
          import
          ?java.util.Calendar;

          import
          ?org.apache.poi.hssf.usermodel.HSSFCell;
          import
          ?org.apache.poi.hssf.usermodel.HSSFCellStyle;
          import
          ?org.apache.poi.hssf.usermodel.HSSFDataFormat;
          import
          ?org.apache.poi.hssf.usermodel.HSSFRow;
          import
          ?org.apache.poi.hssf.usermodel.HSSFSheet;
          import
          ?org.apache.poi.hssf.usermodel.HSSFWorkbook;

          /**
          ?*?生成導出Excel文件對象
          ?*?
          ?*?
          @author ?John.Zhu
          ?*?
          ?
          */

          public ? class ?XLSExport? {

          ????
          // ?設置cell編碼解決中文高位字節截斷

          ???? private ? static ? short ?XLS_ENCODING? = ?HSSFWorkbook.ENCODING_UTF_16;

          ????
          // ?定制日期格式

          ???? private ? static ?String?DATE_FORMAT? = ? " m/d/yy " ;? // ?"m/d/yy?h:mm"

          ????
          // ?定制浮點數格式

          ???? private ? static ?String?NUMBER_FORMAT? = ? " #,##0.00 " ;

          ????
          private
          ?String?xlsFileName;

          ????
          private
          ?HSSFWorkbook?workbook;

          ????
          private
          ?HSSFSheet?sheet;

          ????
          private
          ?HSSFRow?row;

          ????
          /**
          ?????*?初始化Excel
          ?????*?
          ?????*?
          @param ?fileName
          ?????*????????????導出文件名
          ?????
          */

          ????
          public ?XLSExport(String?fileName)? {
          ????????
          this .xlsFileName? =
          ?fileName;
          ????????
          this .workbook? = ? new
          ?HSSFWorkbook();
          ????????
          this .sheet? =
          ?workbook.createSheet();
          ????}


          ????
          /**
          ?????*?導出Excel文件
          ?????*?
          ?????*?
          @throws ?XLSException
          ?????
          */

          ????
          public ? void ?exportXLS()? throws ?XLSException? {
          ????????
          try ?
          {
          ????????????FileOutputStream?fOut?
          = ? new
          ?FileOutputStream(xlsFileName);
          ????????????workbook.write(fOut);
          ????????????fOut.flush();
          ????????????fOut.close();
          ????????}
          ? catch ?(FileNotFoundException?e)? {
          ????????????
          throw ? new ?XLSException( " 生成導出Excel文件出錯! "
          ,?e);
          ????????}
          ? catch ?(IOException?e)? {
          ????????????
          throw ? new ?XLSException( " 寫入Excel文件出錯! "
          ,?e);
          ????????}


          ????}


          ????
          /**
          ?????*?增加一行
          ?????*?
          ?????*?
          @param ?index
          ?????*????????????行號
          ?????
          */

          ????
          public ? void ?createRow( int ?index)? {
          ????????
          this .row? = ? this
          .sheet.createRow(index);
          ????}


          ????
          /**
          ?????*?設置單元格
          ?????*?
          ?????*?
          @param ?index
          ?????*????????????列號
          ?????*?
          @param
          ?value
          ?????*????????????單元格填充值
          ?????
          */

          ????
          public ? void ?setCell( int ?index,?String?value)? {
          ????????HSSFCell?cell?
          = ? this .row.createCell(( short
          )?index);
          ????????cell.setCellType(HSSFCell.CELL_TYPE_STRING);
          ????????cell.setEncoding(XLS_ENCODING);
          ????????cell.setCellValue(value);
          ????}


          ????
          /**
          ?????*?設置單元格
          ?????*?
          ?????*?
          @param ?index
          ?????*????????????列號
          ?????*?
          @param
          ?value
          ?????*????????????單元格填充值
          ?????
          */

          ????
          public ? void ?setCell( int ?index,?Calendar?value)? {
          ????????HSSFCell?cell?
          = ? this .row.createCell(( short
          )?index);
          ????????cell.setEncoding(XLS_ENCODING);
          ????????cell.setCellValue(value.getTime());
          ????????HSSFCellStyle?cellStyle?
          = ?workbook.createCellStyle();? // ?建立新的cell樣式

          ????????cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat(DATE_FORMAT));? // ?設置cell樣式為定制的日期格式
          ????????cell.setCellStyle(cellStyle);? // ?設置該cell日期的顯示格式
          ????}


          ????
          /**
          ?????*?設置單元格
          ?????*?
          ?????*?
          @param ?index
          ?????*????????????列號
          ?????*?
          @param
          ?value
          ?????*????????????單元格填充值
          ?????
          */

          ????
          public ? void ?setCell( int ?index,? int ?value)? {
          ????????HSSFCell?cell?
          = ? this .row.createCell(( short
          )?index);
          ????????cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
          ????????cell.setCellValue(value);
          ????}


          ????
          /**
          ?????*?設置單元格
          ?????*?
          ?????*?
          @param ?index
          ?????*????????????列號
          ?????*?
          @param
          ?value
          ?????*????????????單元格填充值
          ?????
          */

          ????
          public ? void ?setCell( int ?index,? double ?value)? {
          ????????HSSFCell?cell?
          = ? this .row.createCell(( short
          )?index);
          ????????cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
          ????????cell.setCellValue(value);
          ????????HSSFCellStyle?cellStyle?
          = ?workbook.createCellStyle();? // ?建立新的cell樣式

          ????????HSSFDataFormat?format? = ?workbook.createDataFormat();
          ????????cellStyle.setDataFormat(format.getFormat(NUMBER_FORMAT));?
          // ?設置cell樣式為定制的浮點數格式

          ????????cell.setCellStyle(cellStyle);? // ?設置該cell浮點數的顯示格式
          ????}


          }

          調用的過程:
          /**
          ?*?
          ?
          */

          package ?com.justinmobile.payease.admin.commons.excel;

          import
          ?java.util.Calendar;

          /**
          ?*?導出Excel示例
          ?*?
          ?*?
          @author ?John.Zhu
          ?*?
          ?
          */

          public ? class ?XLSDemo? {

          ????
          public ? static ? void ?main(String[]?args)?
          {
          ????????System.out.println(
          " 開始導出Excel文件 "
          );
          ????????XLSExport?e?
          = ? new ?XLSExport( " d:/test.xls "
          );
          ????????e.createRow(
          0
          );
          ????????e.setCell(
          0 ,? " 編號 "
          );
          ????????e.setCell(
          1 ,? " 名稱 "
          );
          ????????e.setCell(
          2 ,? " 日期 "
          );
          ????????e.setCell(
          3 ,? " 金額 "
          );
          ????????e.createRow(
          1
          );
          ????????e.setCell(
          0 ,? 1
          );
          ????????e.setCell(
          1 ,? " 工商銀行 "
          );
          ????????e.setCell(
          2
          ,?Calendar.getInstance());
          ????????e.setCell(
          3 ,? 111123.99
          );
          ????????e.createRow(
          2
          );
          ????????e.setCell(
          0 ,? 2
          );
          ????????e.setCell(
          1 ,? " 招商銀行 "
          );
          ????????e.setCell(
          2
          ,?Calendar.getInstance());
          ????????e.setCell(
          3 ,? 222456.88
          );
          ????????
          try ?
          {
          ????????????e.exportXLS();
          ????????????System.out.println(
          " 導出Excel文件[成功] "
          );
          ????????}
          ? catch ?(XLSException?e1)? {
          ????????????System.out.println(
          " 導出Excel文件[失敗] "
          );
          ????????????e1.printStackTrace();
          ????????}

          ????}

          }

          參考文檔: http://jakarta.apache.org/poi/hssf/quick-guide.html

          posted on 2007-01-22 17:59 zJun's帛羅閣 閱讀(22235) 評論(6)  編輯  收藏 所屬分類: 開發環境

          評論

          # re: 使用POI生成Excel文件 2007-01-23 12:07 Welkin Hu

          POI不能支持圖片啊  回復  更多評論   

          # re: 使用POI生成Excel文件 2007-01-23 23:30 小車馬

          恩,非常好,還是用開源的東東,呵呵,
          樓主,潛力貼論壇(http://content.uu1001.com)是我個人的一個設想,如果你對java非常的專注,并且愿意交我這個朋友,可以發郵件給我(lbw070105@gmail.com),希望我們可以一起發展它。  回復  更多評論   

          # re: 使用POI生成Excel文件 2007-01-25 09:45 dixson

          個人覺得POI沒有JXL好用.而且POI...很~~~~久沒有更新了.開發者根本不重視POI的HSSF啊.  回復  更多評論   

          # re: 使用POI生成Excel文件[未登錄] 2007-03-12 11:51 魔力天使

          這個資料比較好,謝謝提供.特此感謝  回復  更多評論   

          # re: 使用POI生成Excel文件 2008-04-16 13:43 峨峨

          好東西,頂!不過生成excel表格的時間有問題  回復  更多評論   

          # re: 使用POI生成Excel文件 2009-12-10 19:17 zou-hong

          為什么我用上面的代碼運行,控制臺顯示成功,但是沒有生成test.xls文件,這是為什么啊?我用的是Excel2003的版本是不是和這有關系啊?  回復  更多評論   

          導航

          <2007年1月>
          31123456
          78910111213
          14151617181920
          21222324252627
          28293031123
          45678910

          統計

          常用鏈接

          留言簿(15)

          隨筆分類

          隨筆檔案

          相冊

          收藏夾

          博客

          文檔

          站點

          論壇

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 四子王旗| 昌平区| 丰宁| 淮北市| 奈曼旗| 拜泉县| 那坡县| 寿阳县| 从江县| 尚义县| 三门县| 三江| 临海市| 丹寨县| 新兴县| 吉木萨尔县| 新沂市| 宁海县| 项城市| 漳平市| 政和县| 芷江| 湖南省| 德阳市| 蕲春县| 寿阳县| 稻城县| 靖安县| 阿拉善右旗| 红桥区| 保靖县| 迁安市| 盐边县| 固阳县| 宜州市| 广汉市| 银川市| 乌拉特中旗| 梁平县| 峨眉山市| 荃湾区|