1. Excel
POI提供了对Excel文件的读写,HSSF和XSSF提供创建,修改,读取和写入电子表格的方式
HSSF - 读写Excel '97(-2007)(.xls)文件格式
XSSF - 读写Excel 2007 OOXML(.xlsx)文件格式
SXSSF - XSSF的API兼容流扩展,用于生成大型电子表格,堆空间有限,实现低内存占用
org.apache.poi.ss.SpreadsheetVersion
2. HSSF用户模式类图
3. 工作簿Workbook
Workbook是创建或维护Excel工作簿的所有类的超接口。它属于org.apache.poi.ss.usermodel包
- HSSFWorkbook - 读写.xls格式的Excel
- XSSFWorkbook - 读写.xlsx格式的Excel
4. 工作表Sheet
工作表Sheet是工作簿Workbook的中心结构,一个工作簿最少 有一个工作表Sheet
- HSSFSheet - Excel 2003及以下版本
- XSSFSheet - Excel 2007及以上版本
3. 工作簿类结构
以HSSFWorkbook为例:
4. 合法sheet名
工作表Sheet名是有限制条件的:
5. Sheet名不能超过31个字符
6. 不得包含任何以下任何字符:
- 0x0000
- 0x0003
- 冒号(:)
- 反斜杠(\)
- 星号(*)
- 问号(?)
- 正斜杠(/)
- 方括号([])
POI提供了创建合法Sheet名的方法:
org.apache.poi.ss.util.WorkbookUtil#createSafeSheetName(final String nameProposal)
5. 创建Sheet步骤
1. 创建输出流OutputStream
2. 创建工作簿Workbook
3. 创建工作表Sheet
4. 创建行Row
5. 创建单元格Cell
6. 设置单元格值
7. 工作簿写入输出流
8. 关闭输出流
6. 创建Sheet实例
package hssf.sheet.sheet;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.RichTextString;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.util.WorkbookUtil;
import util.ExcelUtil;
public class ExportSheet {
public static void main(String[] args) throws Exception {
File file = new File("C:\\Users\\Administrator\\Desktop\\test.xls");
if (file.exists()) {
file.delete();
}
BufferedOutputStream out = null;
try {
out = new BufferedOutputStream(new FileOutputStream("C:\\Users\\Administrator\\Desktop\\test.xls"));
exportExcel(out);
} finally {
out.close();
}
}
private static void exportExcel(BufferedOutputStream out) throws Exception {
// Step 1 : 创建工作簿Workbook
Workbook workbook = new HSSFWorkbook();
// Workbook workbook = new XSSFWorkbook();
String safeSheetName = WorkbookUtil.createSafeSheetName("合法工作表");
// Step 2 : 创建工作表Sheet
Sheet sheet = workbook.createSheet(safeSheetName);
// 设置列宽
setColWidth (sheet);
Row row = null;
Cell cell = null;
for (int rowIndex = 0; rowIndex < 10; rowIndex++) {
// Step 3 : 创建行Row
row = sheet.createRow(rowIndex);
row.setHeightInPoints(30);
for (short colIndex = 0; colIndex < 10; colIndex++) {
// Step 4 : 创建单元格Cell
cell = row.createCell(colIndex);
RichTextString text = new HSSFRichTextString(ExcelUtil.convertNum2CellId(rowIndex, colIndex));
// Step 5 : 设置单元格内容
cell.setCellValue(text);
}
}
workbook.write(out);
}
/**
* 设置列宽
* */
private static void setColWidth(Sheet sheet) {
// 默认行高列宽
sheet.setDefaultRowHeight((short)(20*20));
sheet.setDefaultColumnWidth(4);
for (int colIndex = 0; colIndex < 10; colIndex++) {
sheet.setColumnWidth(colIndex, 12*256);
}
}
}