You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ni...@apache.org on 2014/05/21 19:08:26 UTC
svn commit: r1596624 - in /poi/trunk:
src/ooxml/java/org/apache/poi/xssf/usermodel/
src/ooxml/testcases/org/apache/poi/xssf/usermodel/ test-data/spreadsheet/
Author: nick
Date: Wed May 21 17:08:25 2014
New Revision: 1596624
URL: http://svn.apache.org/r1596624
Log:
Patch from Yaniv Kunda from bug #56274 - Fix SXSSF writing of tables when creating from a template
Added:
poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFTable.java
poi/trunk/test-data/spreadsheet/56274.xlsx (with props)
Modified:
poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFTable.java
poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/AllXSSFUsermodelTests.java
Modified: poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFTable.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFTable.java?rev=1596624&r1=1596623&r2=1596624&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFTable.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFTable.java Wed May 21 17:08:25 2014
@@ -294,13 +294,15 @@ public class XSSFTable extends POIXMLDoc
int firstHeaderColumn = ref.getCol();
XSSFRow row = sheet.getRow(headerRow);
- if(row != null) for(CTTableColumn col : getCTTable().getTableColumns().getTableColumnList()){
- int colIdx = (int)col.getId() - 1 + firstHeaderColumn;
- XSSFCell cell = row.getCell(colIdx);
- if(cell != null) {
- col.setName(cell.getStringCellValue());
+ if (row != null && row.getCTRow().validate()) {
+ int cellnum = firstHeaderColumn;
+ for (CTTableColumn col : getCTTable().getTableColumns().getTableColumnList()) {
+ XSSFCell cell = row.getCell(cellnum);
+ if (cell != null) {
+ col.setName(cell.getStringCellValue());
+ }
+ cellnum++;
}
}
-
}
}
Modified: poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/AllXSSFUsermodelTests.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/AllXSSFUsermodelTests.java?rev=1596624&r1=1596623&r2=1596624&view=diff
==============================================================================
--- poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/AllXSSFUsermodelTests.java (original)
+++ poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/AllXSSFUsermodelTests.java Wed May 21 17:08:25 2014
@@ -50,6 +50,7 @@ import org.junit.runners.Suite;
TestXSSFRow.class,
TestXSSFSheet.class,
TestXSSFSheetUpdateArrayFormulas.class,
+ TestXSSFTable.class,
TestXSSFWorkbook.class,
TestXSSFBorder.class,
TestXSSFCellFill.class,
Added: poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFTable.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFTable.java?rev=1596624&view=auto
==============================================================================
--- poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFTable.java (added)
+++ poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFTable.java Wed May 21 17:08:25 2014
@@ -0,0 +1,73 @@
+/* ====================================================================
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+==================================================================== */
+
+package org.apache.poi.xssf.usermodel;
+
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.xssf.XSSFTestDataSamples;
+import org.apache.poi.xssf.streaming.SXSSFWorkbook;
+import org.junit.Test;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTTable;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTTableColumn;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+public final class TestXSSFTable {
+
+ public TestXSSFTable() {
+ }
+
+ @Test
+ public void bug56274() throws IOException {
+ // read sample file
+ XSSFWorkbook inputWorkbook = XSSFTestDataSamples.openSampleWorkbook("56274.xlsx");
+
+ // read the original sheet header order
+ XSSFRow row = inputWorkbook.getSheetAt(0).getRow(0);
+ List<String> headers = new ArrayList<String>();
+ for (Cell cell : row) {
+ headers.add(cell.getStringCellValue());
+ }
+
+ // save the worksheet as-is using SXSSF
+ File outputFile = File.createTempFile("poi-56274", ".xlsx");
+ SXSSFWorkbook outputWorkbook = new org.apache.poi.xssf.streaming.SXSSFWorkbook(inputWorkbook);
+ outputWorkbook.write(new FileOutputStream(outputFile));
+
+ // re-read the saved file and make sure headers in the xml are in the original order
+ inputWorkbook = new org.apache.poi.xssf.usermodel.XSSFWorkbook(new FileInputStream(outputFile));
+ CTTable ctTable = inputWorkbook.getSheetAt(0).getTables().get(0).getCTTable();
+ List<CTTableColumn> ctTableColumnList = ctTable.getTableColumns().getTableColumnList();
+
+ assertEquals("number of headers in xml table should match number of header cells in worksheet",
+ headers.size(), ctTableColumnList.size());
+ for (int i = 0; i < headers.size(); i++) {
+ assertEquals("header name in xml table should match number of header cells in worksheet",
+ headers.get(i), ctTableColumnList.get(i).getName());
+ }
+ assertTrue(outputFile.delete());
+ }
+
+}
\ No newline at end of file
Added: poi/trunk/test-data/spreadsheet/56274.xlsx
URL: http://svn.apache.org/viewvc/poi/trunk/test-data/spreadsheet/56274.xlsx?rev=1596624&view=auto
==============================================================================
Binary file - no diff available.
Propchange: poi/trunk/test-data/spreadsheet/56274.xlsx
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org