POI 读取excel模板,动态添加数据行和图片

本文详细介绍了如何使用Apache POI库动态生成Excel表格,包括数据行的动态添加及图片插入方法,特别针对POI 4.1.0版本的bug提供了解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求就是生成一个excel,要求就是数据大于10行的时候动态添加,小于10行的时候,原来的模板不变,只是填充数据。

还有一些小需求比如说添加图片所以本篇文章分三部分。

目录

读取模板

动态添加行数据

这里有一个小坑

插入图片


读取模板

try (FileInputStream is = new FileInputStream(mdlpart); XSSFWorkbook workBook = new XSSFWorkbook(is)) {
     XSSFSheet sheet1 = workBook.getSheetAt(0);
}

动态添加行数据

我本来想的思路和手动操作excel一样,直接插入行就可以了。奈何发现POI没有类似的方法可以使用。解决办法就是先调用函数sheet.shiftRows();向下移动行,这样就会空出来一个空行。再去创建行,然后复制行的格式。

这里有一个小坑

POI的4.1.0版本的sheet.shiftRows();当sheet为XSSF时,此方法无法正常工作,直接使用会导致保存之后的excel(xlsx),访问会显示文件已损坏,是否修复。这个是4.1.0版本POI的一个bug,目前appache还没有修复这个bug,需要手动添加代码。这个代码实在stackoverflow论坛上找到的解决办法。向开发者们致敬。

这里附上链接:POI4.1.0 seet.shiftRows()在xssf下无法使用解决办法

我这里直接贴出代码:

sheet1.shiftRows(3, sheet1.getLastRowNum(), table1.size() - 20);

//XSSFSheet中的shiftRows方法在4.1.0版本中存在bug,至今还未修复,所以这一段话必须加上:
                if (sheet1 instanceof XSSFSheet) {
                    XSSFSheet xSSFSheet = (XSSFSheet) sheet1;
                    // correcting bug that shiftRows does not adjusting references of the cells
                    // if row 3 is shifted down, then reference in the cells remain r="A3", r="B3", ...
                    // they must be adjusted to the new row thoug: r="A4", r="B4", ...
                    // apache poi 3.17 has done this properly but had have other bugs in shiftRows.
                    for (int r = xSSFSheet.getFirstRow
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值