项目导出excel功能,在特定的项目中应该是很常见的。 本人也因需要使用,所以这两天就研究了一下,并做个记录。
这里先简单介绍一下导出excel的几种方法,如我标题所说,poi导出excel,所以这里不会讲和poi无关的其他API的实现,并且我也不会。综合这两天看的文章,poi导出excel有两种方式:
第一种:从无到有的创建整个excel,通过HSSFWorkbook,HSSFSheet HSSFCell, 等对象一步一步的创建出工作簿,sheet,和单元格,并添加样式,数据等。
第二种:通过excel.xls 模板的方式,自己在桌面创建一个excel, 然后修改这个excel为模板,复制到项目中(我是放在根目录下),再然后读取模板,修改模板,给模板填充数据,最后把模板写入到另外一个excel2.xls中(硬盘中的)。 按我自己的理解,这种方式只适合,需要导出的内容是固定格式的,只需要填充一次数据的 情况。比如简历。
本文内容如下:
1. 使用 HSSFWorkbook 对象 实现excel导出。一般是导出excel2003
2. 使用 XSSFWorkbook 对象实现excel导出。 一般是导出excel2007
3. 使用 SXSSFWorkbook 对象实现excel导出。 一般是导出百万级数据的excel
4. 使用 template.xls 格式模板,实现excel导出。 一般是导出有固定字段的excel
5. 多表头excel导出。
提醒:如果不知道这些poi里的类的可以看他的api,都是英文,看不懂,我用的百度翻译,了解一下。
一,
二,
三,
四,使用 template.xls 格式模板
使用模板的最大好处是不用去关系样式问题, 你完全可以直接操作excel,模板中已经包含了样式,我们只需要填充数据即可。值得一提的是,你模板中的表达式的样式会延续给修改后的excel文件。 以下是代码:
我的模板位置:
我的模板格式:
实现代码:
public class ExportExcelTemplate {
/**
* @throws Exception
*
* 根据模板导出excel, 这种方法是 通过给模板中指定的位置赋值,然后重新生成excel,来导出excel的,
* 而且不会修改模板本身。
* 感觉不太合适去导出有大量数据的excel。
* POIFSFileSystem: poi里面的类,
* 可以把Excel文件作为数据流来进行传入传出。这里介绍下POIFSFileSystem类,这个类是专门用来读取excel表格的。
*
*/
public void exportXls() throws Exception {
// 读取项目根目录中的模板
InputStream in = this.getClass().getResourceAsStream("/templates/template.xls");
// File file = new File("E:\\template.xls"); 电脑硬盘上的模板,,一般模板都在项目里
POIFSFileSystem poifsFileSystem = new POIFSFileSystem(in);
HSSFWorkbook workbook = new HSSFWorkbook(poifsFileSystem);
HSSFSheet sheet = workbook.getSheetAt(0);
sheet.setForceFormulaRecalculation(true);
// 根据模板中表达式位置, 修改对应单元格的值
HSSFCell cell = sheet.getRow(2).getCell(0);//第3行 第1列, 下标是0开始的
cell.setCellValue("张三");
HSSFCell cell2 = sheet.getRow(2).getCell(1);
cell2.setCellValue(23);
sheet.getRow(2).getCell(2).setCellValue("180cm");
sheet.getRow(2).getCell(3).setCellValue("未婚");
sheet.getRow(2).getCell(4).setCellValue("男");
//修改模板内容导出新模板
// '/' 分隔符 采用 File.separator 统一表示
FileOutputStream out = new FileOutputStream("E:"+File.separator+"export.xls");
workbook.write(out);
out.close();
}
public static void main(String[] args) throws Exception {
new ExportExcelTemplate().exportXls();
}
}
结果:
其他的几个类型,可以参考下面的博文。
参考文档:
https://www.cnblogs.com/xuyuanjia/p/5886056.html
https://blog.csdn.net/evangel_z/article/details/7332535
https://blog.csdn.net/happyljw/article/details/52809244