mirror of
https://github.com/apache/poi.git
synced 2025-03-06 00:49:36 +00:00
Bug 62906 and 63401: Ensure tables have an initial name which does not conflict with
existing names git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1861819 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
16779b96e5
commit
9cde034ab9
@ -4097,6 +4097,10 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet {
|
||||
|
||||
/**
|
||||
* Creates a new Table, and associates it with this Sheet.
|
||||
* <p>
|
||||
* The table is assigned a default display name (since 4.1.1) which can be overridden
|
||||
* by calling {@code setDisplayName}. The default display name is guaranteed to not conflict
|
||||
* with the names of any {@code XSSFName} or {@code XSSFTable} in the workbook.
|
||||
*
|
||||
* @param tableArea
|
||||
* the area that the table should cover, should not be null
|
||||
@ -4140,9 +4144,17 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet {
|
||||
table.setArea(tableArea);
|
||||
}
|
||||
|
||||
// Bug 62906: Must set a display name; can be overridden using setDisplayName
|
||||
final String displayName = "Table" + tableNumber;
|
||||
table.setDisplayName(displayName);
|
||||
// Set the default name of the table. This must not conflict with any defined names.
|
||||
while(tableNumber<Integer.MAX_VALUE) {
|
||||
final String displayName="Table"+tableNumber;
|
||||
if(getWorkbook().getTable(displayName) == null &&
|
||||
getWorkbook().getName(displayName) == null) {
|
||||
table.setDisplayName(displayName);
|
||||
table.setName(displayName);
|
||||
break;
|
||||
}
|
||||
++tableNumber;
|
||||
}
|
||||
|
||||
return table;
|
||||
}
|
||||
|
@ -369,7 +369,7 @@ public class XSSFTable extends POIXMLDocumentPart implements Table {
|
||||
* @return the name of the Table, if set
|
||||
*/
|
||||
public String getName() {
|
||||
if (name == null) {
|
||||
if (name == null && ctTable.getName() != null) {
|
||||
setName(ctTable.getName());
|
||||
}
|
||||
return name;
|
||||
|
@ -17,6 +17,7 @@
|
||||
|
||||
package org.apache.poi.xssf.usermodel;
|
||||
|
||||
import org.apache.poi.ss.SpreadsheetVersion;
|
||||
import org.apache.poi.ss.usermodel.Cell;
|
||||
import org.apache.poi.ss.util.AreaReference;
|
||||
import org.apache.poi.ss.util.CellReference;
|
||||
@ -35,6 +36,7 @@ import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
@ -587,4 +589,37 @@ public final class TestXSSFTable {
|
||||
table1.setDisplayName("");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete table2, and create a named range in sheet0; it should automatically be assigned the name "Table4"
|
||||
*/
|
||||
@Test
|
||||
public void testBug63401And62906() throws IOException {
|
||||
try (XSSFWorkbook workbook = new XSSFWorkbook()) {
|
||||
XSSFSheet sheet0 = workbook.createSheet();
|
||||
XSSFTable table = addTable(sheet0, 3, 0, 2, 2);
|
||||
|
||||
final String procName = "testXSSFTableGetName";
|
||||
final String name = table.getName();
|
||||
System.out.println(String.format(Locale.ROOT, "%s: table.getName=%s", procName, name));
|
||||
}
|
||||
}
|
||||
|
||||
private static XSSFTable addTable(XSSFSheet sheet,int nRow, int nCol, int nNumRows, int nNumCols) {
|
||||
for (int i = 0; i < nNumRows; i++) {
|
||||
XSSFRow row = sheet.createRow(i + nRow);
|
||||
for (int j = 0; j < nNumCols; j++) {
|
||||
XSSFCell localXSSFCell = row.createCell(j + nCol);
|
||||
if (i == 0) {
|
||||
localXSSFCell.setCellValue(String.format(Locale.ROOT, "Col%d", j + 1));
|
||||
} else {
|
||||
localXSSFCell.setCellValue(String.format(Locale.ROOT, "(%d,%d)", i + 1, j + 1));
|
||||
}
|
||||
}
|
||||
}
|
||||
final CellReference upperLeft = new CellReference(nRow, nCol);
|
||||
final CellReference lowerRight = new CellReference(nNumRows - 1, nNumCols - 1);
|
||||
final AreaReference area = new AreaReference(upperLeft, lowerRight, SpreadsheetVersion.EXCEL2007);
|
||||
return sheet.createTable(area);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user