* Creates a new Table, and associates it with this Sheet
*/
public XSSFTable createTable() {
- if(! worksheet.isSetTableParts()) {
- worksheet.addNewTableParts();
- }
+ if(! worksheet.isSetTableParts()) {
+ worksheet.addNewTableParts();
+ }
+
+ CTTableParts tblParts = worksheet.getTableParts();
+ CTTablePart tbl = tblParts.addNewTablePart();
+
+ // Table numbers need to be unique in the file, not just
+ // unique within the sheet. Find the next one
+ int tableNumber = getPackagePart().getPackage().getPartsByContentType(XSSFRelation.TABLE.getContentType()).size() + 1;
+
+ // the id could already be taken after insertion/deletion of different tables
+ outerloop:
+ while(true) {
+ for (PackagePart packagePart : getPackagePart().getPackage().getPartsByContentType(XSSFRelation.TABLE.getContentType())) {
+ String fileName = XSSFRelation.TABLE.getFileName(tableNumber);
+ if(fileName.equals(packagePart.getPartName().getName())) {
+ // duplicate found, increase the number and start iterating again
+ tableNumber++;
+ continue outerloop;
+ }
+ }
- CTTableParts tblParts = worksheet.getTableParts();
- CTTablePart tbl = tblParts.addNewTablePart();
+ break;
+ }
- // Table numbers need to be unique in the file, not just
- // unique within the sheet. Find the next one
- int tableNumber = getPackagePart().getPackage().getPartsByContentType(XSSFRelation.TABLE.getContentType()).size() + 1;
- RelationPart rp = createRelationship(XSSFRelation.TABLE, XSSFFactory.getInstance(), tableNumber, false);
- XSSFTable table = rp.getDocumentPart();
- tbl.setId(rp.getRelationship().getId());
- table.getCTTable().setId(tableNumber);
+ RelationPart rp = createRelationship(XSSFRelation.TABLE, XSSFFactory.getInstance(), tableNumber, false);
+ XSSFTable table = rp.getDocumentPart();
+ tbl.setId(rp.getRelationship().getId());
+ table.getCTTable().setId(tableNumber);
- tables.put(tbl.getId(), table);
+ tables.put(tbl.getId(), table);
- return table;
+ return table;
}
/**
assertEquals("AND($A1>=EDATE($D$6,3),$B1>0)", rules.get(0).getFormula1());
}
}
+
+ @Test
+ public void test61543() throws IOException {
+ XSSFWorkbook wb = new XSSFWorkbook();
+
+ XSSFSheet sheet = wb.createSheet();
+ XSSFTable table1 = sheet.createTable();
+ XSSFTable table2 = sheet.createTable();
+ XSSFTable table3 = sheet.createTable();
+
+ sheet.removeTable(table1);
+
+ sheet.createTable();
+
+ sheet.removeTable(table2);
+ sheet.removeTable(table3);
+
+ sheet.createTable();
+
+ wb.close();
+ }
}