You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@poi.apache.org by XU JINGCHENG <xu...@gmail.com> on 2017/09/20 06:37:46 UTC
POI Table Remove after Creation bugs ?
Hey POI Devs
I am facing a issue when try to remove a XSSF Table after creating one.
Here is my test case with manual print out result.
Create 3 tables on a single sheet.
[java] Create Table Name: /xl/tables/table1.xml - Content Type:
application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml
[java] Create Table Name: /xl/tables/table2.xml - Content Type:
application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml
[java] Create Table Name: /xl/tables/table3.xml - Content Type:
application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml
Delete table2
[java] Tables before deletion Name: /xl/tables/table1.xml - Content
Type: application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml
[java] Tables before deletion Name: /xl/tables/table2.xml - Content
Type: application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml
[java] Tables before deletion Name: /xl/tables/table3.xml - Content
Type: application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml
[java] Tables after deletion Name: /xl/tables/table1.xml - Content
Type: application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml
[java] Tables after deletion Name: /xl/tables/table3.xml - Content
Type: application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml
Create a new table table and it throws exception as below
org.apache.poi.openxml4j.exceptions.PartAlreadyExistsException: A part with
the name '/xl/tables/table3.xml' already exists : Packages shall not
contain equivalent part names and package implementers shall neither create
nor recognize packages with equivalent part names. [M1.12]
Looks like it tries to re-use table3.xml which is already exists.
When I look into the code, this line.
XSSFSheet line 3971
int tableNumber =
getPackagePart().getPackage().getPartsByContentType(XSSFRelation.TABLE.getContentType()).size()
+ 1;
Use the size of tables as the next index which will cause conflict if there
is a delete after creation.