写在前面
想尽快的使用HSSF和XSSF对电子表格进行操作吗?这个指南正是您所需要的。现在稳定的POI的版本为3.6。但最近在查阅POI的资料时发现,虽然资料很多,但是大都局限于2.x的版本,3.x中文资料比较少,查阅apache网站的时候发现了这份文档,看着不错,就翻译了一下,希望能够对大家有所帮助。由于时间仓促难免有翻译不当之处,还望不吝赐教,费神指正,感激不尽!
岑坚(高凯)
cenjian@taobao.com
2010-08-08
目录
添加POI支持... 5
创建新工作簿... 5
创建新sheet页... 5
创建单元格... 5
新建一个时间格式的单元格... 6
处理不同内容格式的单元格... 7
遍历列和单元格... 7
获得单元格内的内容... 8
文本提取... 9
处理单元格边框... 10
填充色和颜色操作... 11
合并单元格... 12
字体的处理... 12
自定义颜色... 14
读取和重写工作簿... 15
在单元格中使用换行... 15
创建用户自定义数据格式... 16
Sheet页自适应页面大小... 17
设定打印区域... 17
设置脚注页码... 18
使用便捷函数... 18
上下移动一行... 19
将sheet页设定为默认选中... 19
设置sheet页放大倍率... 20
拆分和冻结窗格... 20
重复列和行... 21
页眉和页脚... 21
绘制图形... 22
设置图形样式... 23
图形和Graphics2d类... 24
提纲... 25
图像处理... 26
关联范围和关联单元格... 27
为单元格添加注释... 30
根据内容调整单元格的宽度... 31
超级链接... 31
数据验证... 33
嵌入其他资源对象... 35
鉴于现在大部分应用是以Maven作为构建,可在pom.xml中加入POI的maven依赖,但是maven现在只支持到3.1版本,对3.5版本还不提供支持。
<dependency>
<groupId>poi</groupId>
<artifactId>poi</artifactId>
<version>3.1-FINAL</version>
</dependency>
因此可以直接在Apache 官网下载POI3.5版本,作为reference library加入工程中
Workbook wb = new HSSFWorkbook();
FileOutputStream fileOut = new FileOutputStream("workbook.xls");
wb.write(fileOut);
fileOut.close();
Workbook wb = new XSSFWorkbook();
FileOutputStream fileOut = new FileOutputStream("workbook.xlsx");
wb.write(fileOut);
fileOut.close();
创建新sheet页
Workbook wb = new HSSFWorkbook();
//Workbook wb = new XSSFWorkbook();
Sheet sheet1 = wb.createSheet("new sheet");
Sheet sheet2 = wb.createSheet("second sheet");
FileOutputStream fileOut = new FileOutputStream("workbook.xls");
wb.write(fileOut);
fileOut.close();
Workbook wb = new HSSFWorkbook();
//Workbook wb = new XSSFWorkbook();
CreationHelper createHelper = wb.getCreationHelper();
Sheet sheet = wb.createSheet("new sheet");
//创建一列,在其中加入多个单元格,列索引号从0开始,单元格的索引号也是从0
//开始
Row row = sheet.createRow((short)0);
//创建一个单元格,并在其中加入内容.
Cell cell = row.createCell(0);
cell.setCellValue(1);
// 上面的多行代码可以采用下面的一行代码的方式完成
row.createCell(1).setCellValue(1.2);
row.createCell(2).setCellValue(
createHelper.createRichTextString("This is a string"));
row.createCell(3).setCellValue(true);
//将输出流写入一个文件
FileOutputStream fileOut = new FileOutputStream("workbook.xls");
wb.write(fileOut);
fileOut.close();
//Workbook wb = new XSSFWorkbook();
CreationHelper createHelper = wb.getCreationHelper();
Sheet sheet = wb.createSheet("new sheet");
//创建一列,在其中加入多个单元格,列索引号从0开始,单元格的索引号也是从0
//开始
Row row = sheet.createRow(0);
//创建一个单元格,并在其中加入内容. 第一个单元格的内容不设置为日期时间格式
Cell cell = row.createCell(0);
cell.setCellValue(new Date());
//我们将第二个单元格设置成日期(和时间)格式。对这个文件来说创建一个新的单//元格格式非常重要,除非您能够不用内置的格式来渲染所有的单元格
CellStyle cellStyle = wb.createCellStyle();
cellStyle.setDataFormat(
createHelper.createDataFormat().getFormat("m/d/yy h:mm"));
cell = row.createCell(1);
cell.setCellValue(new Date());
cell.setCellStyle(cellStyle);
//也可以用java.util.Calendar来设置单元格格式
cell = row.createCell(2);
cell.setCellValue(Calendar.getInstance());
cell.setCellStyle(cellStyle);
// 将输出流写入一个文件
FileOutputStream fileOut = new FileOutputStream("workbook.xls");
wb.write(fileOut);
fileOut.close();
Workbook wb = new HSSFWorkbook();
Sheet sheet = wb.createSheet("new sheet");
Row row = sheet.createRow((short)2);
row.createCell(0).setCellValue(1.1);
row.createCell(1).setCellValue(new Date());
row.createCell(2).setCellValue(Calendar.getInstance());
row.createCell(3).setCellValue("a string");
row.createCell(4).setCellValue(true);
row.createCell(5).setCellType(HSSFCell.CELL_TYPE_ERROR);
//将输出流写入一个文件
FileOutputStream fileOut = new FileOutputStream("workbook.xls");
wb.write(fileOut);
fileOut.close();
有些时候您仅希望遍历一个sheet页中所有的列或是一列中所有的单元格。这可以用一个简单的for循环来实现。
幸运的是,这非常简单。Row对象定义了一个CellIterator内部类用来处理单元格的遍历(可以通过调用row.cellIterator() 来获得Iterator 对象),另外,Sheet 对象提供了一个rowIterator()方法对所有列进行遍历
除此之外,Sheet 和Row对象都实现了java.lang.Iterable 接口,因此如果您用的是Java 1.5 及以上版本,您可以简单的调用内置的“foreach”来实现。请看:
Sheet sheet = wb.getSheetAt(0);
for (Iterator<Row> rit = sheet.rowIterator(); rit.hasNext(); ) {
Row row = rit.next();
for (Iterator<Cell> cit = row.cellIterator(); cit.hasNext(); ) {
Cell cell = cit.next();
// Do something here
}
}
使用Java1.5 foreach 循环遍历列和单元格
有时候您仅希望遍历一个sheet页中所有的列或是一列中所有的单元格。如果您使用的是java1.5或是以上版本,那么这将十分的方便,因为它支持新的 foreach 循环。
幸运的是,这非常的简单。Sheet 和Row对象都实现了java.lang.Iterable 接口支持foreach 循环。对Row对象来说它支持通过调用CellIterator内部类用来处理单元格的遍历,对于Sheet对象来说它提供了一个rowIterator()方法对所有列进行遍历。
Sheet sheet = wb.getSheetAt(0);
for (Row row : sheet) {
for (Cell cell : row) {
// Do something here
}
}
要想获得单元格内的内容,您首先要要知道单元格内容的格式(比如您想获得从字符格式的单元格内获得一个数字,您将得到的是NumberFormatException错误)。因此,您将希望能够切换到该单元格格式,然后为获得该单元格内容调用合适的getter方法。
在以下的代码中我们将对一个sheet页中的所有单元格进行遍历,并打印出单元格的引用和内容。
// import org.apache.poi.ss.usermodel.*;
Sheet sheet1 = wb.getSheetAt(0);
for (Row row : sheet1) {
for (Cell cell : row) {
CellReference cellRef = new CellReference(row.getRowNum(), cell.getCellNum());
System.out.print(cellRef.formatAsString());
System.out.print(" - ");
switch(cell.getCellType()) {
case Cell.CELL_TYPE_STRING:
System.out.println(cell.getRichStringCellValue().getString());
break;
case Cell.CELL_TYPE_NUMERIC:
if(DateUtil.isCellDateFormatted(cell)) {
System.out.println(cell.getDateCellValue());
} else {
System.out.println(cell.getNumericCellValue());
}
break;
case Cell.CELL_TYPE_BOOLEAN:
System.out.println(cell.getBooleanCellValue());
break;
case Cell.CELL_TYPE_FORMULA:
System.out.println(cell.getCellFormula());
break;
default:
System.out.println();
}
}
}
对于大多数的文本提取需求,标准的ExcelExtractor类应该能够满足您所有的需求。
InputStream inp = new FileInputStream("workbook.xls");
HSSFWorkbook wb = new HSSFWorkbook(new POIFSFileSystem(inp));
ExcelExtractor extractor = new ExcelExtractor(wb);
extractor.setFormulasNotResults(true);
extractor.setIncludeSheetNames(false);
String text = extractor.getText();
对于特殊的文本提取,比如将xls文件内容写入csv文件,可以参考:
/src/examples/src/org/apache/poi/hssf/eventusermodel/examples/XLS2CSVmra.java 文件
单元格的各种对齐方式
public static void main(String[] args) throws Exception {
Workbook wb = new XSSFWorkbook(); //或者是 new HSSFWorkbook();
Sheet sheet = wb.createSheet();
Row row = sheet.createRow((short) 2);
row.setHeightInPoints(30);
createCell(wb, row, (short) 0, XSSFCellStyle.ALIGN_CENTER, XSSFCellStyle.VERTICAL_BOTTOM);
createCell(wb, row, (short) 1, XSSFCellStyle.ALIGN_CENTER_SELECTION, XSSFCellStyle.VERTICAL_BOTTOM);
createCell(wb, row, (short) 2, XSSFCellStyle.ALIGN_FILL, XSSFCellStyle.VERTICAL_CENTER);
createCell(wb, row, (short) 3, XSSFCellStyle.ALIGN_GENERAL, XSSFCellStyle.VERTICAL_CENTER);
createCell(wb, row, (short) 4, XSSFCellStyle.ALIGN_JUSTIFY, XSSFCellStyle.VERTICAL_JUSTIFY);
createCell(wb, row, (short) 5, XSSFCellStyle.ALIGN_LEFT, XSSFCellStyle.VERTICAL_TOP);
createCell(wb, row, (short) 6, XSSFCellStyle.ALIGN_RIGHT, XSSFCellStyle.VERTICAL_TOP);
//将输出流写入一个文件
FileOutputStream fileOut = new FileOutputStream("xssf-align.xlsx");
wb.write(fileOut);
fileOut.close();
}
/**
*创建一个单元格并为其设定指定的对齐方式.
*
* @param wb 工作簿
* @param row 单元格所在的列
* @param column 单元格所在的行索引号
* @param halign 单元格的水平对齐方式.
*/
private static void createCell(Workbook wb, Row row, short column, short halign, short valign) {
Cell cell = row.createCell(column);
cell.setCellValue(new XSSFRichTextString("Align It"));
CellStyle cellStyle = wb.createCellStyle();
cellStyle.setAlignment(halign);
cellStyle.setVerticalAlignment(valign);
cell.setCellStyle(cellStyle);
}
Workbook wb = new HSSFWorkbook();
Sheet sheet = wb.createSheet("new sheet");
//创建一列,在其中加入多个单元格,列索引号从0开始,单元格的索引号也是从0
//开始.
Row row = sheet.createRow(1);
//创建一个单元格,并在其中加入内容.
Cell cell = row.createCell(1);
cell.setCellValue(4);
//设置单元格边框为四周环绕.
CellStyle style = wb.createCellStyle();
style.setBorderBottom(CellStyle.BORDER_THIN);
style.setBottomBorderColor(IndexedColors.BLACK.getIndex());
</
我的博客地址:www.aitawo.com
分享到:
相关推荐
### POI3.5 HSSF 和XSSF Excel操作快速入门手册 #### 一、简介 Apache POI 是一个用于读写Microsoft Office格式文件的Java API,包括但不限于Excel、Word等。其中,HSSF用于处理Excel 97-2003格式(.xls),而XSSF则...
### POI3.5 HSSF 和 XSSF Excel 操作快速入门手册 #### 一、POI简介与背景 Apache POI 是一个强大的 Java API,用于处理 Microsoft Office 格式的文件,包括 Excel 和 Word。其中,HSSF 和 XSSF 分别是 POI 提供的...
本手册是POI操作Excel文件的快速入门指南,旨在帮助开发者快速掌握使用HSSF和XSSF进行Excel文件操作的基本方法。通过阅读和实践本手册中的内容,用户可以学会如何添加POI支持、创建新工作簿、创建新的sheet页、操作...
在本文中,我们将重点关注如何使用POI 3.5版本中的HSSF和XSSF库来读写Excel文件。 HSSF(Horizontally Stored Sheet Format)是POI针对旧版BIFF格式(Excel 97-2007)的API,而XSSF(XML Spreadsheet Format)则是...
### POI3.5-HSSF和XSSF-Excel操作快速入门 #### 一、简介与背景 Apache POI是Java编程语言中一个强大的工具包,用于处理Microsoft Office格式的文件,包括Excel、Word和PowerPoint等。POI的HSSF组件主要用于处理...
Apache POI HSSF和XSSF读写EXCEL总结
。Apache 1.。POI HSSF和XSSF读写EXCEL总结.pdf
。Apache 1.。POI HSSF和XSSF读写EXCEL总结.docx
在本文中,我们将深入探讨如何使用POI库中的HSSF和XSSF组件来读取和写入Excel文件,这两种组件分别用于处理.xls(97-2003版Excel格式)和.xlsx(2007及更高版本的Office Open XML格式)。 首先,让我们了解HSSF...
在"poi-3.8-POI-HSSF和POI-XSSF和SXSSF.rar"这个压缩包中,主要涵盖了POI项目对Excel文件处理的三个关键组件:HSSF、XSSF和SXSSF。 1. HSSF (Horrible Spreadsheet Format):这是POI项目早期开发的一个API,用于...
它提供了两种主要的接口,HSSF(Horrible Spreadsheet Format)和XSSF(XML Spreadsheet Format),分别用于处理老版本的.BIFF8格式(Excel 97-2003)和较新的.XLSX XML格式(Excel 2007及以上版本)。 **HSSF** 是...
在POI 3.5中,主要关注的是HSSF(Horizontally SpreadSheet Format)和XSSF(XML SpreadSheet Format)两个组件,分别用于处理老版的.xls Excel文件和新版的.xlsx Excel文件。这两个组件提供了工作簿(Workbook)、...
### Apache POI HSSF and XSSF 快速指南帮助文档 API poi-3.15 #### 一、Apache POI 概述 Apache POI 是一个用于读取和写入 Microsoft Office 格式文件(如 Word 和 Excel)的开源 Java 库。它支持多种格式,包括...
Apache POI 是一个开源项目,专门用于处理微软的Office文档格式,如Excel(.xls 和 .xlsx)、Word(.doc 和 .docx)以及PowerPoint(.ppt 和 .pptx)。在Java环境中,Apache POI 提供了丰富的API,使得开发者能够...
- **HSSF和XSSF**: POI 3.5支持两种类型的Excel文件,即旧版的.HSSF(Horrible Spreadsheet Format)用于处理BIFF8格式的.xls文件,而.XSSF则用于处理OOXML格式的.xlsx文件。这两种API都提供了创建、读取和修改工作...
Apache POI提供了HSSF(Horrible Spreadsheet Format)和XSSF(XML Spreadsheet Format)两个主要组件,分别用于读写旧版的.BIFF8格式(Excel 97-2007)和OOXML(Office Open XML)格式的Excel文件。 在HSSF中,...
Apache POI 是一个开源项目,专门用于处理Microsoft Office格式的文件,如Excel、Word和PowerPoint。这个项目在Java环境中提供了API,使得开发者能够创建、修改和读取这些文件。标题提到的“POI-3.5(很不错的共两...
总的来说,Apache POI 3.5 jar包提供了全面的工具集,使得Java开发者能够方便地处理Microsoft Office文件,特别是在Excel的旧版和OOXML格式之间进行操作。通过这些库,开发者可以创建应用程序,读取、分析、编辑和...
POI提供API给Java程式对Microsoft Office格式档案读和写的功能。 结构: HSSF - 提供读写Microsoft Excel格式档案的功能。 XSSF - 提供读写Microsoft Excel OOXML格式档案的功能。 HWPF - 提供读写...
POI_3.8_API.CHM; POI3.5_HSSF_和XSSF_Excel操作快速入门手册.pdf; poi-bin-3.9-20121203.zip; poi使用总结.txt; POI整理.doc;