bug 57840: add unit test for XSSFTable.findColumnIndex
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1747762 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
a6f21296cc
commit
71e3aa52fd
@ -335,12 +335,15 @@ public class XSSFTable extends POIXMLDocumentPart implements Table {
|
||||
* The column index is relative to the left-most column in the table, 0-indexed.
|
||||
* Returns <code>-1</code> if <code>column</code> is not a header name in table.
|
||||
*
|
||||
* Column Header names are case-insensitive
|
||||
*
|
||||
* Note: this function caches column names for performance. To flush the cache (because columns
|
||||
* have been moved or column headers have been changed), {@link #updateHeaders()} must be called.
|
||||
*
|
||||
* @since 3.15 beta 2
|
||||
*/
|
||||
public int findColumnIndex(String column) {
|
||||
public int findColumnIndex(String columnHeader) {
|
||||
if (columnHeader == null) return -1;
|
||||
if (columnMap == null) {
|
||||
// FIXME: replace with org.apache.commons.collections.map.CaseInsensitiveMap
|
||||
int count = getTableColumns().length;
|
||||
@ -353,7 +356,7 @@ public class XSSFTable extends POIXMLDocumentPart implements Table {
|
||||
}
|
||||
// Table column names with special characters need a single quote escape
|
||||
// but the escape is not present in the column definition
|
||||
Integer idx = columnMap.get(caseInsensitive(column.replace("'", "")));
|
||||
Integer idx = columnMap.get(caseInsensitive(columnHeader.replace("'", "")));
|
||||
return idx == null ? -1 : idx.intValue();
|
||||
}
|
||||
|
||||
|
@ -18,6 +18,7 @@
|
||||
package org.apache.poi.xssf.usermodel;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import java.io.File;
|
||||
@ -110,4 +111,27 @@ public final class TestXSSFTable {
|
||||
outputWorkbook.close();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void findColumnIndex() throws IOException {
|
||||
XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("StructuredReferences.xlsx");
|
||||
// FIXME: use a worksheet where upper left cell of table is not A1 so that we test
|
||||
// that XSSFTable.findColumnIndex returns the column index relative to the first
|
||||
// column in the table, not the column number in the sheet
|
||||
|
||||
XSSFTable table = wb.getTable("\\_Prime.1");
|
||||
assertNotNull(table);
|
||||
assertEquals(0, table.findColumnIndex("calc='#*'#"));
|
||||
assertEquals(1, table.findColumnIndex("Name"));
|
||||
assertEquals(2, table.findColumnIndex("Number"));
|
||||
|
||||
assertEquals("case insensitive", 2, table.findColumnIndex("NuMbEr"));
|
||||
|
||||
// findColumnIndex should return -1 if no column header name matches
|
||||
assertEquals(-1, table.findColumnIndex(null));
|
||||
assertEquals(-1, table.findColumnIndex(""));
|
||||
assertEquals(-1, table.findColumnIndex("one"));
|
||||
|
||||
wb.close();
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user