Dev@Free

          zJun's Tech Weblog

          使用POI生成Excel文件

          Apache的Jakata項(xiàng)目的POI子項(xiàng)目,目標(biāo)是處理ole2對(duì)象。 POI可以到 http://www.apache.org/dyn/closer.cgi/jakarta/poi/ 下載。 編譯好的jar主要有這樣4個(gè):poi包,poi Browser包,poi hdf包,poi hssf例程包。實(shí)際運(yùn)行時(shí),需要有poi包就可以了。

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

          在poi1.7中才有以下2項(xiàng):
          HSSFHeader sheet頭
          HSSFFooter sheet尾

          和這個(gè)樣式
          HSSFCellStyle cell樣式

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

          下面是一個(gè)簡(jiǎn)單的例子:

          /**
          ?*?
          ?
          */

          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;

          /**
          ?*?生成導(dǎo)出Excel文件對(duì)象
          ?*?
          ?*?
          @author ?John.Zhu
          ?*?
          ?
          */

          public ? class ?XLSExport? {

          ????
          // ?設(shè)置cell編碼解決中文高位字節(jié)截?cái)?/span>

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

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

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

          ????
          // ?定制浮點(diǎn)數(shù)格式

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

          ????
          private
          ?String?xlsFileName;

          ????
          private
          ?HSSFWorkbook?workbook;

          ????
          private
          ?HSSFSheet?sheet;

          ????
          private
          ?HSSFRow?row;

          ????
          /**
          ?????*?初始化Excel
          ?????*?
          ?????*?
          @param ?fileName
          ?????*????????????導(dǎo)出文件名
          ?????
          */

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


          ????
          /**
          ?????*?導(dǎo)出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( " 生成導(dǎo)出Excel文件出錯(cuò)! "
          ,?e);
          ????????}
          ? catch ?(IOException?e)? {
          ????????????
          throw ? new ?XLSException( " 寫(xiě)入Excel文件出錯(cuò)! "
          ,?e);
          ????????}


          ????}


          ????
          /**
          ?????*?增加一行
          ?????*?
          ?????*?
          @param ?index
          ?????*????????????行號(hào)
          ?????
          */

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


          ????
          /**
          ?????*?設(shè)置單元格
          ?????*?
          ?????*?
          @param ?index
          ?????*????????????列號(hào)
          ?????*?
          @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);
          ????}


          ????
          /**
          ?????*?設(shè)置單元格
          ?????*?
          ?????*?
          @param ?index
          ?????*????????????列號(hào)
          ?????*?
          @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));? // ?設(shè)置cell樣式為定制的日期格式
          ????????cell.setCellStyle(cellStyle);? // ?設(shè)置該cell日期的顯示格式
          ????}


          ????
          /**
          ?????*?設(shè)置單元格
          ?????*?
          ?????*?
          @param ?index
          ?????*????????????列號(hào)
          ?????*?
          @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);
          ????}


          ????
          /**
          ?????*?設(shè)置單元格
          ?????*?
          ?????*?
          @param ?index
          ?????*????????????列號(hào)
          ?????*?
          @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));?
          // ?設(shè)置cell樣式為定制的浮點(diǎn)數(shù)格式

          ????????cell.setCellStyle(cellStyle);? // ?設(shè)置該cell浮點(diǎn)數(shù)的顯示格式
          ????}


          }

          調(diào)用的過(guò)程:
          /**
          ?*?
          ?
          */

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

          import
          ?java.util.Calendar;

          /**
          ?*?導(dǎo)出Excel示例
          ?*?
          ?*?
          @author ?John.Zhu
          ?*?
          ?
          */

          public ? class ?XLSDemo? {

          ????
          public ? static ? void ?main(String[]?args)?
          {
          ????????System.out.println(
          " 開(kāi)始導(dǎo)出Excel文件 "
          );
          ????????XLSExport?e?
          = ? new ?XLSExport( " d:/test.xls "
          );
          ????????e.createRow(
          0
          );
          ????????e.setCell(
          0 ,? " 編號(hào) "
          );
          ????????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(
          " 導(dǎo)出Excel文件[成功] "
          );
          ????????}
          ? catch ?(XLSException?e1)? {
          ????????????System.out.println(
          " 導(dǎo)出Excel文件[失敗] "
          );
          ????????????e1.printStackTrace();
          ????????}

          ????}

          }

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

          posted on 2007-01-22 17:59 zJun's帛羅閣 閱讀(22235) 評(píng)論(6)  編輯  收藏 所屬分類(lèi): 開(kāi)發(fā)環(huán)境

          評(píng)論

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

          POI不能支持圖片啊  回復(fù)  更多評(píng)論   

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

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

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

          個(gè)人覺(jué)得POI沒(méi)有JXL好用.而且POI...很~~~~久沒(méi)有更新了.開(kāi)發(fā)者根本不重視POI的HSSF啊.  回復(fù)  更多評(píng)論   

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

          這個(gè)資料比較好,謝謝提供.特此感謝  回復(fù)  更多評(píng)論   

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

          好東西,頂!不過(guò)生成excel表格的時(shí)間有問(wèn)題  回復(fù)  更多評(píng)論   

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

          為什么我用上面的代碼運(yùn)行,控制臺(tái)顯示成功,但是沒(méi)有生成test.xls文件,這是為什么啊?我用的是Excel2003的版本是不是和這有關(guān)系啊?  回復(fù)  更多評(píng)論   

          導(dǎo)航

          <2009年12月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          統(tǒng)計(jì)

          常用鏈接

          留言簿(15)

          隨筆分類(lèi)

          隨筆檔案

          相冊(cè)

          收藏夾

          博客

          文檔

          站點(diǎn)

          論壇

          搜索

          積分與排名

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 宜兴市| 哈尔滨市| 兴海县| 乌兰浩特市| 全州县| 横峰县| 梧州市| 怀仁县| 安丘市| 和静县| 乳源| 新安县| 黄冈市| 石门县| 中卫市| 佛教| 苏尼特右旗| 江北区| 门头沟区| 洛隆县| 老河口市| 宜兴市| 遵化市| 铜梁县| 金华市| 香格里拉县| 汉寿县| 广西| 蚌埠市| 岳池县| 碌曲县| 光泽县| 清镇市| 柏乡县| 湖口县| 滨州市| 曲麻莱县| 九江县| 泗水县| 昭平县| 绥阳县|