一、介绍
1.POI
-
Apache POI是一种流行的API,它允许程序员使用Java程序创建,修改和显示MS Office文件。这由Apache软件基金会开发使用Java分布式设计或修改Microsoft Office文件的开源库。它包含类和方法对用户输入数据或文件到MS Office文档进行解码。
-
POI可以通过操作SS,SL,WP操作Excel,PowerPoint,Word
-
注:Excel (SS=HSSF+XSSF+SXSSF),PowerPoint (SL=HSLF+XSLF),Word (WP=HWPF+XWPF)SS官网介绍
2.HSSF
- 全称为Horrible SpreadSheet Format 中文翻译为讨厌的电子表格格式
- HSSF是POI项目的纯java实现,可以操作Excel文件(97-2007)格式(.xls)
3.XSSF
- XSSF是POI项目的纯java实现,可以操作Excel文件(2007)格式(.xslx)
4.SXSSF
- 自POI版本3.8-beta3 以来, 提供了新的API-------一个在 XSSF 之上构建的低内存占用空间的SXSSF
- SXSSF是 XSSF 的 API 兼容流扩展, 在必须生成非常大的电子表格时使用,而且在堆空间使用方面是有限的。
- SXSSF通过限制访问,是一个滑动窗口内的行实现低内存占用,而XSSF可以访问文档中的所有行。不在窗口中的旧行变得无法访问,因为它们已经被写入磁盘。
- 就我认为,SXSSF专门用来处理大量数据的。
二、下载jar包
-
官网下载jar包
可以下载jar包,和它的源代码
-
下载下来解压,得到一个文件夹,里面包含很多jar包和html文档,jar包具体作用,百度得到一个答案仅供参考
-
用官网例子测试,暂时所以先用最核心的poi.jar
- 前几个创建HSSFWorkbook时,操作xls文件没有问题,等到使用WorkbookFactory时,会报异常,把poi-ooxml.jar导进去,正常。
- 新版本的常量没有放在接口里,都放在了枚举里,所以官网里有些例子,使用这个版本的jar包,会报错,例子是旧版的,需要把接口里的静态变量修改到枚举里。这时关联源码,可以找到方法定义,找到参数,找到枚举,找到枚举实例,使用名字差不多的,可能会有差别,不过都差不多。
- 接下来创建XSSFWorkbook对象时会报错,又是没有找到类的异常,根据类的名字依次导入jar包
- poi-ooxml-schemas.jar
- commons-collections.jar
- xmlbeans.jar
public static void main(String[] args) throws IOException { Workbook wb = new XSSFWorkbook(); //or new HSSFWorkbook();不可以,会无法打开 Sheet sheet = wb.createSheet(); Row row = sheet.createRow((short) 2); row.setHeightInPoints(30); createCell(wb, row, (short) 0, HorizontalAlignment.CENTER, VerticalAlignment.BOTTOM); createCell(wb, row, (short) 1, HorizontalAlignment.CENTER_SELECTION, VerticalAlignment.BOTTOM); createCell(wb, row, (short) 2, HorizontalAlignment.DISTRIBUTED, VerticalAlignment.CENTER); createCell(wb, row, (short) 3, HorizontalAlignment.GENERAL, VerticalAlignment.CENTER); createCell(wb, row, (short) 4, HorizontalAlignment.JUSTIFY, VerticalAlignment.JUSTIFY); createCell(wb, row, (short) 5, HorizontalAlignment.LEFT, VerticalAlignment.TOP); createCell(wb, row, (short) 6, HorizontalAlignment.RIGHT, VerticalAlignment.TOP); FileOutputStream fileOut = new FileOutputStream("xssf-align.xlsx"); wb.write(fileOut); fileOut.close(); } private static void createCell(Workbook wb, Row row, short column, HorizontalAlignment halign, VerticalAlignment valign) { Cell cell = row.createCell(column); cell.setCellValue("Align It"); CellStyle cellStyle = wb.createCellStyle(); cellStyle.setAlignment(halign); cellStyle.setVerticalAlignment(valign); cell.setCellStyle(cellStyle); }
以下是官方原版的,使用这个版本3.17会出错。
public static void main(String[] args) throws Exception {
Workbook wb = new XSSFWorkbook(); //or new HSSFWorkbook();
Sheet sheet = wb.createSheet();
Row row = sheet.createRow((short) 2);
row.setHeightInPoints(30);
createCell(wb, row, (short) 0, CellStyle.ALIGN_CENTER, CellStyle.VERTICAL_BOTTOM);
createCell(wb, row, (short) 1, CellStyle.ALIGN_CENTER_SELECTION, CellStyle.VERTICAL_BOTTOM);
createCell(wb, row, (short) 2, CellStyle.ALIGN_FILL, CellStyle.VERTICAL_CENTER);
createCell(wb, row, (short) 3, CellStyle.ALIGN_GENERAL, CellStyle.VERTICAL_CENTER);
createCell(wb, row, (short) 4, CellStyle.ALIGN_JUSTIFY, CellStyle.VERTICAL_JUSTIFY);
createCell(wb, row, (short) 5, CellStyle.ALIGN_LEFT, CellStyle.VERTICAL_TOP);
createCell(wb, row, (short) 6, CellStyle.ALIGN_RIGHT, CellStyle.VERTICAL_TOP);
// Write the output to a file
FileOutputStream fileOut = new FileOutputStream("xssf-align.xlsx");
wb.write(fileOut);
fileOut.close();
}
/**
* Creates a cell and aligns it a certain way.
*
* @param wb the workbook
* @param row the row to create the cell in
* @param column the column number to create the cell in
* @param halign the horizontal alignment for the cell.
*/
private static void createCell(Workbook wb, Row row, short column, short halign, short valign) {
Cell cell = row.createCell(column);
cell.setCellValue("Align It");
CellStyle cellStyle = wb.createCellStyle();
cellStyle.setAlignment(halign);
cellStyle.setVerticalAlignment(valign);
cell.setCellStyle(cellStyle);
}