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 2008/03/21 20:54:36 UTC

svn commit: r639779 - in /poi/branches/ooxml/src/ooxml: java/org/apache/poi/xssf/model/ java/org/apache/poi/xssf/usermodel/ testcases/org/apache/poi/xssf/usermodel/

Author: nick
Date: Fri Mar 21 12:54:35 2008
New Revision: 639779

URL: http://svn.apache.org/viewvc?rev=639779&view=rev
Log:
Get it to the point that existing .xslx files can be loaded+saved, and opened by excel without warning, and new files can be loaded but with a warning

Modified:
    poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/model/SharedStringsTable.java
    poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/model/StylesTable.java
    poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/model/XSSFModel.java
    poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCreationHelper.java
    poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFDataFormat.java
    poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java
    poi/branches/ooxml/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java

Modified: poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/model/SharedStringsTable.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/model/SharedStringsTable.java?rev=639779&r1=639778&r2=639779&view=diff
==============================================================================
--- poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/model/SharedStringsTable.java (original)
+++ poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/model/SharedStringsTable.java Fri Mar 21 12:54:35 2008
@@ -22,6 +22,8 @@
 import java.io.OutputStream;
 import java.util.LinkedList;
 
+import javax.xml.namespace.QName;
+
 import org.apache.poi.ss.usermodel.SharedStringSource;
 import org.apache.xmlbeans.XmlException;
 import org.apache.xmlbeans.XmlOptions;
@@ -95,6 +97,11 @@
     public void writeTo(OutputStream out) throws IOException {
         XmlOptions options = new XmlOptions();
         options.setSaveOuter();
+        options.setUseDefaultNamespace();
+        
+        // Requests use of whitespace for easier reading
+        options.setSavePrettyPrint();
+
         SstDocument doc = SstDocument.Factory.newInstance(options);
         CTSst sst = doc.addNewSst();
         sst.setCount(strings.size());
@@ -102,6 +109,6 @@
         for (String s : strings) {
             sst.addNewSi().setT(s);
         }
-        doc.save(out);
+        doc.save(out, options);
     }
 }

Modified: poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/model/StylesTable.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/model/StylesTable.java?rev=639779&r1=639778&r2=639779&view=diff
==============================================================================
--- poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/model/StylesTable.java (original)
+++ poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/model/StylesTable.java Fri Mar 21 12:54:35 2008
@@ -40,7 +40,9 @@
 import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTNumFmts;
 import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTStylesheet;
 import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTXf;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.StyleSheetDocument;;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.StyleSheetDocument;
+import javax.xml.namespace.QName;
+
 
 
 /**
@@ -92,21 +94,27 @@
         	doc = StyleSheetDocument.Factory.parse(is);
         	
         	// Grab all the different bits we care about
+        	if(doc.getStyleSheet().getNumFmts() != null)
         	for (CTNumFmt nfmt : doc.getStyleSheet().getNumFmts().getNumFmtArray()) {
         		numberFormats.put(nfmt.getNumFmtId(), nfmt.getFormatCode());
         	}
+        	if(doc.getStyleSheet().getFonts() != null)
         	for (CTFont font : doc.getStyleSheet().getFonts().getFontArray()) {
         		fonts.add(font);
         	}
+        	if(doc.getStyleSheet().getFills() != null)
         	for (CTFill fill : doc.getStyleSheet().getFills().getFillArray()) {
         		fills.add(fill);
         	}
+        	if(doc.getStyleSheet().getBorders() != null)
         	for (CTBorder border : doc.getStyleSheet().getBorders().getBorderArray()) {
         		borders.add(border);
         	}
+        	if(doc.getStyleSheet().getCellStyleXfs() != null)
         	for (CTXf xf : doc.getStyleSheet().getCellXfs().getXfArray()) {
         		xfs.add(xf);
         	}
+        	if(doc.getStyleSheet().getCellStyleXfs() != null)
         	for (CTXf xf : doc.getStyleSheet().getCellStyleXfs().getXfArray()) {
         		styleXfs.add(xf);
         	}
@@ -221,6 +229,15 @@
     public void writeTo(OutputStream out) throws IOException {
         XmlOptions options = new XmlOptions();
         options.setSaveOuter();
+        options.setUseDefaultNamespace();
+        
+        // Requests use of whitespace for easier reading
+        options.setSavePrettyPrint();
+
+        // XXX This should not be needed, but apparently the setSaveOuter call above does not work in XMLBeans 2.2
+        options.setSaveSyntheticDocumentElement(
+        		new QName(CTStylesheet.type.getName().getNamespaceURI(), doc.getStyleSheet().getDomNode().getNodeName()));
+
         
         // Work on the current one
         // Need to do this, as we don't handle
@@ -254,6 +271,6 @@
     	// TODO
     	
         // Save
-        doc.save(out);
+        doc.save(out, options);
     }
 }

Modified: poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/model/XSSFModel.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/model/XSSFModel.java?rev=639779&r1=639778&r2=639779&view=diff
==============================================================================
--- poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/model/XSSFModel.java (original)
+++ poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/model/XSSFModel.java Fri Mar 21 12:54:35 2008
@@ -21,6 +21,8 @@
 import java.io.OutputStream;
 
 public interface XSSFModel {
+	/** Read from the given InputStream */
 	public void readFrom(InputStream is) throws IOException;
+	/** Write to the supplied OutputStream, with default options */
 	public void writeTo(OutputStream out) throws IOException;
 }

Modified: poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCreationHelper.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCreationHelper.java?rev=639779&r1=639778&r2=639779&view=diff
==============================================================================
--- poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCreationHelper.java (original)
+++ poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCreationHelper.java Fri Mar 21 12:54:35 2008
@@ -27,7 +27,7 @@
 		workbook = wb;
 		
 		// Create the things we only ever need one of
-		dataFormat = new XSSFDataFormat();
+		dataFormat = new XSSFDataFormat(workbook.getStylesSource());
 	}
 	
     /**

Modified: poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFDataFormat.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFDataFormat.java?rev=639779&r1=639778&r2=639779&view=diff
==============================================================================
--- poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFDataFormat.java (original)
+++ poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFDataFormat.java Fri Mar 21 12:54:35 2008
@@ -17,16 +17,23 @@
 package org.apache.poi.xssf.usermodel;
 
 import org.apache.poi.ss.usermodel.DataFormat;
+import org.apache.poi.ss.usermodel.StylesSource;
 
 /**
- * TODO - figure out how this should really work for XSSF
+ * Handles data formats for XSSF.
+ * TODO Figure out if there are build in formats too 
  */
 public class XSSFDataFormat implements DataFormat {
+	private StylesSource stylesSource;
+	public XSSFDataFormat(StylesSource stylesSource) {
+		this.stylesSource = stylesSource;
+	}
+	
 	public short getFormat(String format) {
-		return -1;
+		return (short)stylesSource.putNumberFormat(format);
 	}
 
 	public String getFormat(short index) {
-		return null;
+		return stylesSource.getNumberFormatAt((long)index);
 	}
 }

Modified: poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java?rev=639779&r1=639778&r2=639779&view=diff
==============================================================================
--- poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java (original)
+++ poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java Fri Mar 21 12:54:35 2008
@@ -165,6 +165,7 @@
             PackageRelationship rel =
             	corePart.addRelationship(ppName, TargetMode.INTERNAL, REL);
             PackagePart part = corePart.getPackage().createPart(ppName, TYPE);
+            
             OutputStream out = part.getOutputStream();
             model.writeTo(out);
             out.close();
@@ -188,6 +189,10 @@
         CTBookView bv = bvs.addNewWorkbookView();
         bv.setActiveTab(0);
         this.workbook.addNewSheets();
+        
+        // We always require styles and shared strings
+        sharedStringSource = new SharedStringsTable();
+        stylesSource = new StylesTable();
     }
     
     public XSSFWorkbook(String path) throws IOException {
@@ -203,11 +208,16 @@
 	            // Load shared strings
 	            this.sharedStringSource = (SharedStringSource)
 	            	SHARED_STRINGS.load(getCorePart());
+            } catch(Exception e) {
+            	throw new IOException("Unable to load shared strings - " + e.toString());
+            }
+            try {
 	            // Load styles source
 	            this.stylesSource = (StylesSource)
 	            	STYLES.load(getCorePart());
             } catch(Exception e) {
-            	throw new IOException(e.getMessage());
+            	e.printStackTrace();
+            	throw new IOException("Unable to load styles - " + e.toString());
             }
             
             // Load individual sheets
@@ -617,6 +627,7 @@
                  
                 // Update our internal reference for the package part
                 workbook.getSheets().getSheetArray(i).setId(rel.getId());
+                workbook.getSheets().getSheetArray(i).setSheetId(sheetNumber);
             }
              
             // Write shared strings and styles

Modified: poi/branches/ooxml/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java?rev=639779&r1=639778&r2=639779&view=diff
==============================================================================
--- poi/branches/ooxml/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java (original)
+++ poi/branches/ooxml/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java Fri Mar 21 12:54:35 2008
@@ -23,6 +23,7 @@
 
 import junit.framework.TestCase;
 
+import org.apache.poi.ss.usermodel.RichTextString;
 import org.apache.poi.ss.usermodel.Sheet;
 import org.apache.poi.ss.usermodel.StylesSource;
 import org.apache.poi.xssf.model.StylesTable;
@@ -158,8 +159,10 @@
         Sheet sheet2 = workbook.createSheet("sheet2");
         Sheet sheet3 = workbook.createSheet("sheet3");
         
-        sheet1.createRow(0);
-        sheet1.createRow(1);
+        RichTextString rts = workbook.getCreationHelper().createRichTextString("hello world");
+        
+        sheet1.createRow(0).createCell((short)0).setCellValue(1.2);
+        sheet1.createRow(1).createCell((short)0).setCellValue(rts);
         sheet2.createRow(0);
         
         assertEquals(0, workbook.getSheetAt(0).getFirstRowNum());
@@ -184,9 +187,9 @@
         
         PackagePart wbPart = 
         	pkg.getPart(PackagingURIHelper.createPartName("/xl/workbook.xml"));
-        // Links to the three sheets
+        // Links to the three sheets, shared strings and styles
         assertTrue(wbPart.hasRelationships());
-        assertEquals(3, wbPart.getRelationships().size());
+        assertEquals(5, wbPart.getRelationships().size());
         
         // Load back the XSSFWorkbook
         workbook = new XSSFWorkbook(pkg);
@@ -195,12 +198,19 @@
         assertNotNull(workbook.getSheetAt(1));
         assertNotNull(workbook.getSheetAt(2));
         
+        assertNotNull(workbook.getSharedStringSource());
+        assertNotNull(workbook.getStylesSource());
+        
         assertEquals(0, workbook.getSheetAt(0).getFirstRowNum());
         assertEquals(1, workbook.getSheetAt(0).getLastRowNum());
         assertEquals(0, workbook.getSheetAt(1).getFirstRowNum());
         assertEquals(0, workbook.getSheetAt(1).getLastRowNum());
         assertEquals(-1, workbook.getSheetAt(2).getFirstRowNum());
         assertEquals(-1, workbook.getSheetAt(2).getLastRowNum());
+        
+        sheet1 = workbook.getSheetAt(0);
+        assertEquals(1.2, sheet1.getRow(0).getCell(0).getNumericCellValue(), 0.0001);
+        assertEquals("hello world", sheet1.getRow(1).getCell(0).getRichStringCellValue().getString());
     }
     
     public void testExisting() throws Exception {



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org