Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。
基本功能
结构:
HSSF - 提供读写Microsoft Excel格式档案的功能。
XSSF - 提供读写Microsoft Excel OOXML格式档案的功能。
HWPF - 提供读写Microsoft Word格式档案的功能。
HSLF - 提供读写Microsoft PowerPoint格式档案的功能。
HDGF - 提供读写Microsoft Visio格式档案的功能。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
|
读取Excel文档中的数据
示例2将演示如何读取Excel文档中的数据。假定在D盘JTest目录下有一个文件名为test1.xls的Excel文件。
示例2程序如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
|
设置单元格格式
在这里,我们将只介绍一些和格式设置有关的语句,我们假定workbook就是对一个工作簿的引用。在Java中,第一步要做的就是创建和设置字体和单元格的格式,然后再应用这些格式:
1、创建字体,设置其为红色、粗体:
1 2 3 |
|
2、创建格式
1 2 |
|
3、应用格式
1 2 3 4 |
|
处理WORD文档
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
三、Excel文件导出:POI
1.jar包依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.9</version>
</dependency>
2.Excel文件的结构
Excel文件
└sheet:工作表,在这个级别对列宽进行控制
└row:行
└cell:单元格
3.创建代表一个Excel文件的HSSFWorkbook对象
HSSFWorkbook workbook = new HSSFWorkbook();
※如果使用SpringMVC提供的AbstractExcelView视图,则不必自己创建。
4.创建代表一个工作表的HSSFSheet对象
HSSFSheet sheet = workbook.createSheet("工作表名称");
5.创建代表行的HSSFRow对象
HSSFRow row = sheet.createRow(index);
index表示行的索引,从0开始
6.创建代表单元格的HSSFCell对象
HSSFCell cell = row.createCell(index);
index表示单元格的索引,从0开始
7.将Excel文件写入到文件系统中
①创建一个文件输出流对象
FileOutputStream outputStream = new FileOutputStream("文件路径");
②将文件内容写入这个输出流
workbook.write(outputStream);
8.调整工作表格式
为了避免处理工作表数据时内存溢出,相关对象要尽可能重用,而不是每次都创建新的。
HSSFDataFormat format = workbook.createDataFormat();
①日期格式
HSSFCellStyle styleDate = workbook.createCellStyle();
styleDate.setDataFormat(format.getFormat("yyyy/MM/dd HH:mm:ss"));
②小数格式
HSSFCellStyle styleDouble = workbook.createCellStyle();
styleDouble.setDataFormat(format.getFormat("#,#.00000"));
"#,#.00000"表示:节与节之间使用逗号分隔,保留5位小数
③回绕文本
HSSFCellStyle styleWrapText = workbook.createCellStyle();
styleWrapText.setWrapText(true);
④指定列宽:单位1/20像素
sheet.setColumnWidth(columnIndex, width);
⑤自动列宽:根据内容自动调整列宽,但并不是绝对的
sheet.autoSizeColumn(columnIndex);
⑥应用已有的样式
cell.setCellStyle(styleWrapText);
9.响应消息头设置
//1.生成workbook对象
HSSFWorkbook workbook = statisticsService.generateWorkBook(surveyId);
//2.准备文件名字符串
String fileName = System.nanoTime() + ".xls";
//3.设置响应的内容类型
response.setContentType("application/vnd.ms-excel");
//4.设置浏览器下载文件时的文件名响应消息头
response.setHeader("Content-Disposition", "attachment;filename="+fileName);
//5.获取输出流
ServletOutputStream out = response.getOutputStream();
//6.将workbook数据写入输出流
workbook.write(out);