为什么写这笔记
- 导出excel在web管理系统中是一个经典的功能。
- 项目已经有新的解决方案,即让前端基于获取的json数据通过js插件来生成excel。好处在于任何的页面上的json数据都可以这样导出Excel,方便很多。
- 所以,后端已经不需要提供这个功能,删除无用代码,把自制的工具代码搬到笔记这边
pom.xml
首先是jar问题,至少baidu搜索出来的前一页教程都没提及这个问题,也可能是本人使用的版本问题,这里使用的是poi4.0.0
1 | <dependency> |
poi有两种操作excel的包,一个是poi-ooxml-schemas用于操作xls格式的Excel表-2003版,自Excel2007版文件格式都为xlsx,所以这里导入poi-excelant的包。
生成Excel表并导入数据
下面的操作搬运自 – poi官网教程
创建Excel文件
XSSFWorkbook需要导入poi-excelant的jar包,HSSFWorkbook需要导入poi-ooxml-schemas的jar包。
1 | // 创建xls格式的excel文件 |
创建表
一个Excel文件可以包含多个表,不清楚的话,桌面新建一个Excel文件,看左下角的sheet1、sheet2、sheet3就知道了
1 | Workbook wb = new XSSFWorkbook(); // or new HSSFWorkbook(); |
sheet的名字有如下规则要求:
- 命名不允许有:(空字符)0x0000、(全角空格)0x0003、冒号(:)、斜杠(\)、星号(*)、问号(?)、反斜杠(/)、中括号([、])
- 命名不能以单引号(‘)开头或结尾
apache也提供了检验修正命名的工具
1 | //默认将不符合规定的字符替换为半角空格 |
替换名字的源码的实现很简单,这里看看apache的校验修正方式。
1 | public static String createSafeSheetName(final String nameProposal, char replaceChar) { |
创建阵列(行、列)
1 | Sheet sheet = wb.createSheet("new sheet"); |
完整的导出数据过程
1 | //使用lombok生成getter/setter方法 |
小工具
用于任意一种类型的数据excel表导出的小工具,先来看看使用方式
1 | Workbook workbook = new XSSFWorkbook(); |
以下是源码:
1 | import org.apache.poi.ss.usermodel.Row; |