Java使用poi向Excel中任意位置数据写各种数据数据
1.注意点,肯定是先拿到excel的行列坐标来获取单元格,然后写入数据的
2.获取模板使用XSSFWorkBook(new InputStream(文件路径)),因为sxssf虽然内存友好,但是会提前数据写入硬盘导致内存数据销毁,会造成空指针,所以sxxsf只能适合从上往下下入数据
3.对于模板文件,需要校验名称管理器,防止操作模板时报错
4.wb.getAllNames(),遍历获得XSSFName,XSSFName.getSheetIndex()==-1,XSSFName.getSheetAt(XSSFName.getSheetIndex())==null,的续删除掉,wb.removeName(XSSFName)
5.需要校验合并区域,判断所有的合并区域是否有重叠,如果重叠则删除,防止文件报错,sheet.removeMergeRegion(合并区域的ID)
6.插入空行,sheet.shiftRows(要插入的起始行,sheet的终止行,插入的行数,true,false),可以实现行平移,目前未发现引起样式或公式问题,但是会因错误的名称管理器和合并区域影响报错
7.导出的数据逻辑是先插入行,再数据,后枚举再图片,再文件
8.数据写入时会有样式问题,需要提前知道样式是什么,在单元格中先写入数据还是先写入样式其实无所谓,如果样式不生效,需要考虑是不是数据不满足要求
9.注意点,一个workbook可以创建的样式是有限的,具体数量自行百度,所以要控制样式创建的数量,建议一列数据使用相同样式,数量过多会文件报错,所有样式失效
10.为什么会有样式数据限制呢,要是不限制的话,每个单元格样式都不一样,单元格一多生成出来的Excel用啥都打不开,直接内存爆炸
11.写入图片,附件数据是没有问题的,关键是在于位置,后续文章再提供思路