liaochong / myexcel

MyExcel, a new way to operate excel!
https://github.com/liaochong/myexcel/wiki
Apache License 2.0
1.66k stars 325 forks source link

MultiSheet策略下,rowspan不为0的行是最后一行时,生成的blankTd会被下一个sheet错误领取 #381

Closed sec7lQ closed 2 years ago

sec7lQ commented 2 years ago

Bug描述 MultiSheet策略下,rowspan不为0的行是最后一行时,生成的blankTd会被下一个sheet错误领取

Bug复现 模板文件: freemarker模板.txt 出现错误的文件: 结算确认单2022-09-09 (6).xlsx 如图:

Snipaste_2022-09-09_16-40-50 Snipaste_2022-09-09_16-40-22

sheet0创建的空单元格,即8、9、10、11行中被rowspan覆盖的单元格,被sheet1错误领取,从而替代掉了sheet1中8、9、10、11行中本应渲染的值

bug产生原因 rowspan不为0时创建出被覆盖的单元格存储至AbstractExcelFactory类中的stagingTds列表, 提供给接下来被覆盖的行领取,虽然下面的行领取后会进行删除操作,但当rowspan不为0的行作为sheet的最后一行时,创建的单元格并没有被领取的必要,但错误的延续到了下一个sheet,被下一个sheet对应行领取

Snipaste_2022-09-09_16-55-38

修复建议 将stagingTds设为public,在table操作完成后清除stagingTds

Snipaste_2022-09-09_17-00-27 Snipaste_2022-09-09_17-01-09
liaochong commented 2 years ago

4.3.0.RC1版本修复,感谢🙏

liaochong commented 2 years ago

4.3.0.RC1版本修复,感谢🙏