From: PJ Fanning Date: Wed, 12 Jul 2017 10:46:13 +0000 (+0000) Subject: [Bug-61281] fix issue with export of table columns - Thanks to Daniel for the patch X-Git-Tag: REL_3_17_FINAL~68 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=012ab1a9ad447fe17dd4a856a9c889c8a8fecb5e;p=poi.git [Bug-61281] fix issue with export of table columns - Thanks to Daniel for the patch git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1801721 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFExportToXml.java b/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFExportToXml.java index 0ed44d3048..814f0a04e1 100644 --- a/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFExportToXml.java +++ b/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFExportToXml.java @@ -53,6 +53,7 @@ import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFTable; import org.apache.poi.xssf.usermodel.helpers.XSSFSingleXmlCell; import org.apache.poi.xssf.usermodel.helpers.XSSFXmlColumnPr; +import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTTableColumn; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; @@ -172,7 +173,7 @@ public class XSSFExportToXml implements Comparator{ // Exports elements and attributes mapped with tables if (table!=null) { - List tableColumns = table.getXmlColumnPrs(); + List tableColumns = table.getCTTable().getTableColumns().getTableColumnList(); XSSFSheet sheet = table.getXSSFSheet(); @@ -188,16 +189,19 @@ public class XSSFExportToXml implements Comparator{ Node tableRootNode = getNodeByXPath(table.getCommonXpath(),doc.getFirstChild(),doc,true); short startColumnIndex = table.getStartCellReference().getCol(); - for(int j = startColumnIndex; j<= table.getEndCellReference().getCol(); j++) { - int tableColumnIndex = j - startColumnIndex; - if (tableColumnIndex < tableColumns.size()) { - XSSFCell cell = row.getCell(j); - if (cell != null) { - XSSFXmlColumnPr pointer = tableColumns.get(tableColumnIndex); - String localXPath = pointer.getLocalXPath(); - Node currentNode = getNodeByXPath(localXPath,tableRootNode,doc,false); - - mapCellOnNode(cell,currentNode); + for (int j = startColumnIndex; j <= table.getEndCellReference().getCol(); j++) { + XSSFCell cell = row.getCell(j); + if (cell != null) { + int tableColumnIndex = j - startColumnIndex; + if (tableColumnIndex < tableColumns.size()) { + CTTableColumn ctTableColumn = tableColumns.get(tableColumnIndex); + if (ctTableColumn.getXmlColumnPr() != null) { + XSSFXmlColumnPr pointer = new XSSFXmlColumnPr(table, ctTableColumn, + ctTableColumn.getXmlColumnPr()); + String localXPath = pointer.getLocalXPath(); + Node currentNode = getNodeByXPath(localXPath,tableRootNode,doc,false); + mapCellOnNode(cell,currentNode); + } } } } diff --git a/src/ooxml/testcases/org/apache/poi/xssf/extractor/TestXSSFExportToXML.java b/src/ooxml/testcases/org/apache/poi/xssf/extractor/TestXSSFExportToXML.java index 5c92901079..61d8a1b7f8 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/extractor/TestXSSFExportToXML.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/extractor/TestXSSFExportToXML.java @@ -666,6 +666,8 @@ public final class TestXSSFExportToXML { ByteArrayOutputStream bos = new ByteArrayOutputStream(); exporter.exportToXML(bos, true); assertNotNull(DocumentHelper.readDocument(new ByteArrayInputStream(bos.toByteArray()))); + String exportedXml = bos.toString("UTF-8"); + assertEquals("1", exportedXml.replaceAll("\\s+", "")); } } }