]> source.dussan.org Git - poi.git/commitdiff
Excel objects to <cols/> in a sheet, so avoid outputting that
authorNick Burch <nick@apache.org>
Fri, 21 Mar 2008 19:14:43 +0000 (19:14 +0000)
committerNick Burch <nick@apache.org>
Fri, 21 Mar 2008 19:14:43 +0000 (19:14 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/branches/ooxml@639766 13f79535-47bb-0310-9956-ffa450edef68

src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java
src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java
src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java

index f2714d2cf6c5ebdb2d6862c75c12416befdeb345..fd4918cb26fd6b8905a8b8e66d51cedb1763c9ba 100644 (file)
@@ -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 <cols/>
+       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;
index 9db77ab9fe52021121111023b5ec13f1c14893a7..d4ef042f02b1b46902279582c7e85d5978b06bb9 100644 (file)
@@ -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
index e0f4e65fe40603c3d4ac071e4ced7ac1fa0eee96..ca7dbb37361594b1f3c1c97d897998779c422765 100644 (file)
@@ -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());
     }