From 22c794c1ba12d74984ca2db0960e21ba90547b46 Mon Sep 17 00:00:00 2001 From: Nick Burch Date: Fri, 21 Mar 2008 19:14:43 +0000 Subject: [PATCH] Excel objects to in a sheet, so avoid outputting that git-svn-id: https://svn.apache.org/repos/asf/poi/branches/ooxml@639766 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/poi/xssf/usermodel/XSSFSheet.java | 23 +++++++++++++++++++ .../poi/xssf/usermodel/XSSFWorkbook.java | 2 +- .../poi/xssf/usermodel/TestXSSFWorkbook.java | 7 +++++- 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java index f2714d2cf..fd4918cb2 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java @@ -17,6 +17,8 @@ package org.apache.poi.xssf.usermodel; +import java.io.IOException; +import java.io.OutputStream; import java.util.Iterator; import java.util.LinkedList; import java.util.List; @@ -34,7 +36,10 @@ import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.xssf.usermodel.extensions.XSSFComments; import org.apache.poi.xssf.usermodel.helpers.ColumnHelper; import org.apache.poi.xssf.util.CellReference; +import org.apache.xmlbeans.XmlOptions; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTBreak; +import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCol; +import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCols; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTComments; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTDialogsheet; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTHeaderFooter; @@ -97,6 +102,24 @@ public class XSSFSheet implements Sheet { public XSSFWorkbook getWorkbook() { return this.workbook; } + + /** + * Tweaks the CTWorksheet to fit with what Excel + * will accept without a massive huff, and write into + * the OutputStream supplied. + */ + protected void save(OutputStream out, XmlOptions xmlOptions) throws IOException { + // Excel objects to + if(worksheet.getColsArray().length == 1) { + CTCols col = worksheet.getColsArray(0); + if(col.getColArray().length == 0) { + worksheet.setColsArray(null); + } + } + + // Save + worksheet.save(out, xmlOptions); + } protected CTWorksheet getWorksheet() { return this.worksheet; diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java index 9db77ab9f..d4ef042f0 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java @@ -612,7 +612,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook { // XXX This should not be needed, but apparently the setSaveOuter call above does not work in XMLBeans 2.2 xmlOptions.setSaveSyntheticDocumentElement(new QName(CTWorksheet.type.getName().getNamespaceURI(), "worksheet")); out = part.getOutputStream(); - sheet.getWorksheet().save(out, xmlOptions); + sheet.save(out, xmlOptions); out.close(); // Update our internal reference for the package part diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java index e0f4e65fe..ca7dbb373 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java @@ -245,9 +245,14 @@ public class TestXSSFWorkbook extends TestCase { // Load up again, check all still there XSSFWorkbook wb2 = new XSSFWorkbook(tmpFile.toString()); assertEquals(3, wb2.getNumberOfSheets()); + assertNotNull(wb2.getSheetAt(0)); + assertNotNull(wb2.getSheetAt(1)); + assertNotNull(wb2.getSheetAt(2)); - // TODO - fix these! assertEquals("dd/mm/yyyy", wb2.getSheetAt(0).getRow(1).getCell(0).getRichStringCellValue().getString()); + assertEquals("yyyy/mm/dd", wb2.getSheetAt(0).getRow(2).getCell(0).getRichStringCellValue().getString()); + assertEquals("yyyy-mm-dd", wb2.getSheetAt(0).getRow(3).getCell(0).getRichStringCellValue().getString()); + assertEquals("yy/mm/dd", wb2.getSheetAt(0).getRow(4).getCell(0).getRichStringCellValue().getString()); assertNotNull(wb2.getSharedStringSource()); assertNotNull(wb2.getStylesSource()); }