POI操作EXCEL(一)

    技术2022-05-13  15

    Jakarta POI 是一套用于访问微软格式文档的Java API。 Jakarta POI有很多组件组成,其中有用于操作Excel格式文件的HSSF和用于早在Word的HWPF,在各种组件中目前只有用于操作Excel的HSSF相对成熟。它的官方首页是:http://jakarta.apache.org/poi/hssf/index.html,这里可以下载到它的最新版本和文档。 下面就来看看如何通过Jakarta POI的HSSF操作Excel文件。 操作Excel文件的步骤同JXL类似(关于如何用JXL操作Excel可以看我的另外两篇文章)。 HSSF对Excel的操作主要是通过下面几个对象实现: HSSFWorkbook    工作簿对象对应于Excel文件 HSSFSheet       Sheet对象对应于Excel中的Sheet HSSFRow         行对象表示Sheet中的一行(这个对象在JXL中并没有提供) HSSFCell        单元格对象 操作步骤就是用HSSFWorkbook打开或者创建“Excel文件对象”,用HSSFWorkbook对象返回或者创建Sheet对象,用Sheet对象返回行对象,用行对象得到Cell对象,有了Cell对象就随你读写了。下面来看一个动态生成Excel文件的例子: //创建HSSFWorkbook对象 HSSFWorkbook wb = new HSSFWorkbook(); //创建HSSFSheet对象 HSSFSheet sheet = wb.createSheet("sheet0"); //创建HSSFRow对象 HSSFRow row = sheet.createRow((short)0); //创建HSSFCell对象 HSSFCell cell=row.createCell((short)0); //用来处理中文问题 cell.setEncoding(HSSFCell.ENCODING_UTF_16); //设置单元格的值 cell.setCellValue("单元格中的中文"); //定义你需要的输出流 OutputStream out = new FileOutputStream("viwo.xls"); //输出Excel wb.write(out); out.flush(); HSSF读取文件同样还是使用这几个对象,只是把相应的createXXX方法变成了getXXX方法即可。 只要理解了其中原理,不管是读还是写亦或是特定格式都可以轻松实现,正所谓知其然更要知其所以然。 最后附上HSSF官方的QuickGuide:《Busy Developers' Guide to HSSF Features》,虽然是英文的但还是很容易理解的。 http://jakarta.apache.org/poi/hssf/quick-guide.html 一、示例1: Java代码     package com.cplatform.contants;     import java.io.FileOutputStream;      import java.io.IOException;      import java.util.Date;        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;      import org.apache.poi.hssf.util.HSSFColor;        public class A {          /**        * HSSFWorkbook excell的文档对象 HSSFSheet excell的表单 HSSFRow excell的行 HSSFCell        * excell的格子单元 HSSFFont excell字体 HSSFName 名称 HSSFDataFormat 日期格式 HSSFHeader        * sheet头 HSSFFooter sheet尾 HSSFCellStyle cell样式        */        public static void main(String[] args) throws IOException {              HSSFWorkbook wb = new HSSFWorkbook();              // 建立新HSSFWorkbook对象              HSSFSheet sheet = wb.createSheet("new sheet");              // 建立新的sheet对象              // Create a row and put some cells in it.Rows are 0 based.              HSSFRow row = sheet.createRow((short0);              // 建立新行              // Create a cell and put a value in it.              HSSFCell cell = row.createCell((short0);              // 建立新cell              cell.setCellValue(1);// 设置cell的整数类型的值              // Or do it on one line.              row.createCell((short1).setCellValue(1.2);              // 设置cell浮点类型的值              row.createCell((short2).setCellValue("test");              // 设置cell字符类型的值              row.createCell((short3).setCellValue(true);              // 设置cell布尔类型的值              HSSFCellStyle cellStyle = wb.createCellStyle();              // 建立新的cell样式              cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm"));              // 设置cell样式为定制的日期格式              HSSFCell dCell = row.createCell((short4);              dCell.setCellValue(new Date());              // 设置cell为日期类型的值              dCell.setCellStyle(cellStyle);              // 设置该cell日期的显示格式              HSSFCell csCell = row.createCell((short5);              csCell.setEncoding(HSSFCell.ENCODING_UTF_16);              // 设置cell编码解决中文高位字节截断              csCell.setCellValue("中文测试_Chinese Words Test");                // 设置背景色              HSSFCellStyle style = wb.createCellStyle();              style                      .setFillForegroundColor(new HSSFColor.GREY_25_PERCENT()                              .getIndex());              style                      .setFillBackgroundColor(new HSSFColor.GREY_25_PERCENT()                              .getIndex());              style.setFillPattern(HSSFCellStyle.SPARSE_DOTS);              HSSFCell cell1 = row.createCell((short6);              cell1.setCellValue("X");              cell1.setCellStyle(style);                // 设置背景色              HSSFCellStyle style1 = wb.createCellStyle();              style1.setFillForegroundColor(new HSSFColor.GREY_40_PERCENT()                      .getIndex());              style1.setFillBackgroundColor(new HSSFColor.GREY_40_PERCENT()                      .getIndex());              style1.setBorderBottom((short1);              style1.setBorderTop((short1);              style1.setBorderLeft((short1);              style1.setBorderRight((short1);              /**            * 注意这句代码, style1.setFillPattern, 如果你在你的程序中不设置fill pattern,那么            * 你上面设置的前景色和背景色就显示不出来.           */            style1.setFillPattern(HSSFCellStyle.SPARSE_DOTS);              HSSFCell cell11 = row.createCell((short7);              cell11.setCellValue("X11");              cell11.setCellStyle(style1);                // 数字格式化              HSSFCellStyle st = wb.createCellStyle();              // 建立新的cell样式              st.setDataFormat(HSSFDataFormat.getBuiltinFormat("#,##0"));              HSSFCell cell12 = row.createCell((short8);              cell12.setCellValue((double10000000);              cell12.setCellStyle(st);       cell12 .setEncoding(HSSFCell.ENCODING_UTF_16);//设置cell编码解决中文高位字节截断     cell12 .setCellValue("中文测试_Chinese Words Test");//设置中西文结合字符串             row.createCell((short9).setCellType(HSSFCell.CELL_TYPE_ERROR);              // 建立错误cell              // Write the output to a file              FileOutputStream fileOut = new FileOutputStream("D:/workbook.xls");              wb.write(fileOut);              fileOut.close();          }      }     二、示例2:     package com.cplatform.contants;     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 Exception {      try {       FileOutputStream fOut = new FileOutputStream(xlsFileName);       workbook.write(fOut);       fOut.flush();       fOut.close();      }      catch (FileNotFoundException e) {       throw new Exception(" 生成导出Excel文件出错! ", e);      }      catch (IOException e) {       throw new Exception(" 写入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浮点数的显示格式   }     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(01);      e.setCell(1" 工商银行 ");      e.setCell(2, Calendar.getInstance());      e.setCell(3111123.99);      e.createRow(2);      e.setCell(02);      e.setCell(1" 招商银行 ");      e.setCell(2, Calendar.getInstance());      e.setCell(3222456.88);      try {       e.exportXLS();       System.out.println(" 导出Excel文件[成功] ");      }      catch (Exception e1) {       System.out.println(" 导出Excel文件[失败] ");       e1.printStackTrace();      }   }     }   

    最新回复(0)