业务上需要上传并解析excel。这边因为项目本来就已经引入了poi库,就没有考虑别的类库,本人以前还使用过jxl,个人感觉poi是比较好用的,暂不评论其他类库。
Apache POI
Apache POI是免费开源的跨平台的Java API,Apache POI提供给Java程序对Microsoft Office 格式档案进行读写功能的API开源类库。它可以对不同格式的文件进行解析:
HSSF – 提供读写Microsoft Excel格式档案的功能。
XSSF – 提供读写Microsoft Excel OOXML格式档案的功能。
HWPF – 提供读写Microsoft Word格式档案的功能。
HSLF – 提供读写Microsoft PowerPoint格式档案的功能。
HDGF – 提供读写Microsoft Visio格式档案的功能。
我这边文件上传限定了excel,只需要用到hssf和xssf,根据文件后缀名来决定,xlsx后缀名用xssf,xls后缀名用hssf。(好像新版本还提供了SXSSF,效率更高?个人没有研究)
个人需求这边excel列信息是不固定的,只能确定有金额等某些列,以下代码展示如何确定有无金额列,以及取到他是哪列及对应信息的读取。
// 正常读取文件流这个写法是jdk7以后的 无需手动close关闭流
try (InputStream inputStream = new FileInputStream(filePath)) {
Workbook workbook;
// 识别后缀名 不同的类型需要用不同的来读取流
if ("xlsx".equalsIgnoreCase(suffix)) {
workbook = new XSSFWorkbook(inputStream);
} else if ("xls".equalsIgnoreCase(suffix)) {
workbook = new HSSFWorkbook(inputStream);
} else {
throw ..