[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
This commit is contained in:
PJ Fanning 2017-07-12 10:46:13 +00:00
parent 748e0c4981
commit eddad11775
2 changed files with 17 additions and 11 deletions

View 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.XSSFTable;
import org.apache.poi.xssf.usermodel.helpers.XSSFSingleXmlCell; import org.apache.poi.xssf.usermodel.helpers.XSSFSingleXmlCell;
import org.apache.poi.xssf.usermodel.helpers.XSSFXmlColumnPr; 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.Document;
import org.w3c.dom.Element; import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap; import org.w3c.dom.NamedNodeMap;
@ -172,7 +173,7 @@ public class XSSFExportToXml implements Comparator<String>{
// Exports elements and attributes mapped with tables // Exports elements and attributes mapped with tables
if (table!=null) { if (table!=null) {
List<XSSFXmlColumnPr> tableColumns = table.getXmlColumnPrs(); List<CTTableColumn> tableColumns = table.getCTTable().getTableColumns().getTableColumnList();
XSSFSheet sheet = table.getXSSFSheet(); XSSFSheet sheet = table.getXSSFSheet();
@ -188,21 +189,24 @@ public class XSSFExportToXml implements Comparator<String>{
Node tableRootNode = getNodeByXPath(table.getCommonXpath(),doc.getFirstChild(),doc,true); Node tableRootNode = getNodeByXPath(table.getCommonXpath(),doc.getFirstChild(),doc,true);
short startColumnIndex = table.getStartCellReference().getCol(); short startColumnIndex = table.getStartCellReference().getCol();
for(int j = startColumnIndex; j<= table.getEndCellReference().getCol(); j++) { for (int j = startColumnIndex; j <= table.getEndCellReference().getCol(); j++) {
int tableColumnIndex = j - startColumnIndex;
if (tableColumnIndex < tableColumns.size()) {
XSSFCell cell = row.getCell(j); XSSFCell cell = row.getCell(j);
if (cell != null) { if (cell != null) {
XSSFXmlColumnPr pointer = tableColumns.get(tableColumnIndex); 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(); String localXPath = pointer.getLocalXPath();
Node currentNode = getNodeByXPath(localXPath,tableRootNode,doc,false); Node currentNode = getNodeByXPath(localXPath,tableRootNode,doc,false);
mapCellOnNode(cell,currentNode); mapCellOnNode(cell,currentNode);
} }
} }
} }
} }
} }
}
} /*else { } /*else {
// TODO: implement filtering management in xpath // TODO: implement filtering management in xpath
}*/ }*/

View File

@ -666,6 +666,8 @@ public final class TestXSSFExportToXML {
ByteArrayOutputStream bos = new ByteArrayOutputStream(); ByteArrayOutputStream bos = new ByteArrayOutputStream();
exporter.exportToXML(bos, true); exporter.exportToXML(bos, true);
assertNotNull(DocumentHelper.readDocument(new ByteArrayInputStream(bos.toByteArray()))); assertNotNull(DocumentHelper.readDocument(new ByteArrayInputStream(bos.toByteArray())));
String exportedXml = bos.toString("UTF-8");
assertEquals("<Test><Test>1</Test></Test>", exportedXml.replaceAll("\\s+", ""));
} }
} }
} }