]> source.dussan.org Git - poi.git/commitdiff
[Bug-61281] fix issue with export of table columns - Thanks to Daniel for the patch
authorPJ Fanning <fanningpj@apache.org>
Wed, 12 Jul 2017 10:46:13 +0000 (10:46 +0000)
committerPJ Fanning <fanningpj@apache.org>
Wed, 12 Jul 2017 10:46:13 +0000 (10:46 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1801721 13f79535-47bb-0310-9956-ffa450edef68

src/ooxml/java/org/apache/poi/xssf/extractor/XSSFExportToXml.java
src/ooxml/testcases/org/apache/poi/xssf/extractor/TestXSSFExportToXML.java

index 0ed44d304801c00ffe5060e7e053e279ac5b334a..814f0a04e1d0182f790098412fc86043976ea0ad 100644 (file)
@@ -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<String>{
                 // Exports elements and attributes mapped with tables
                 if (table!=null) {
 
-                    List<XSSFXmlColumnPr> tableColumns = table.getXmlColumnPrs();
+                    List<CTTableColumn> tableColumns = table.getCTTable().getTableColumns().getTableColumnList();
 
                     XSSFSheet sheet = table.getXSSFSheet();
 
@@ -188,16 +189,19 @@ public class XSSFExportToXml implements Comparator<String>{
                         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);
+                                    }
                                 }
                             }
                         }
index 5c92901079219dbe4c6e68f338d5ffd95f708a18..61d8a1b7f877cfb2dc406545ee7a5ee2e46ab3f2 100644 (file)
@@ -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("<Test><Test>1</Test></Test>", exportedXml.replaceAll("\\s+", ""));
         }
     }
 }