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 2007/12/27 12:52:14 UTC
svn commit: r607043 - in /poi/trunk: ./
src/scratchpad/ooxml-src/org/apache/poi/hssf/
src/scratchpad/ooxml-src/org/apache/poi/hxf/
src/scratchpad/ooxml-src/org/apache/poi/hxf/dev/
src/scratchpad/ooxml-testcases/org/apache/poi/hssf/
Author: nick
Date: Thu Dec 27 03:52:12 2007
New Revision: 607043
URL: http://svn.apache.org/viewvc?rev=607043&view=rev
Log:
Support getting the low level sheet objects back for an xlsx document
Modified:
poi/trunk/build.xml
poi/trunk/src/scratchpad/ooxml-src/org/apache/poi/hssf/HSSFXML.java
poi/trunk/src/scratchpad/ooxml-src/org/apache/poi/hxf/HXFDocument.java
poi/trunk/src/scratchpad/ooxml-src/org/apache/poi/hxf/dev/HXFLister.java
poi/trunk/src/scratchpad/ooxml-testcases/org/apache/poi/hssf/TestHSSFXML.java
Modified: poi/trunk/build.xml
URL: http://svn.apache.org/viewvc/poi/trunk/build.xml?rev=607043&r1=607042&r2=607043&view=diff
==============================================================================
--- poi/trunk/build.xml (original)
+++ poi/trunk/build.xml Thu Dec 27 03:52:12 2007
@@ -271,6 +271,7 @@
<mkdir dir="${main.reports.test}"/>
<mkdir dir="${scratchpad.reports.test}"/>
<mkdir dir="${contrib.reports.test}"/>
+ <mkdir dir="${ooxml.reports.test}"/>
<mkdir dir="${junit.report.dir}"/>
<mkdir dir="${jdepend.report.dir}"/>
<mkdir dir="${jdepend.report.out.dir}"/>
@@ -698,6 +699,43 @@
<target name="-test-contrib-write-testfile" unless="contrib.test.failed">
<echo file="${contrib.testokfile}" append="false" message="testok"/>
+ </target>
+
+ <target name="-test-ooxml-check">
+ <uptodate property="ooxml.test.notRequired" targetfile="${ooxml.testokfile}">
+ <srcfiles dir="${ooxml.src}"/>
+ <srcfiles dir="${ooxml.src.test}"/>
+ </uptodate>
+ </target>
+
+ <target name="test-ooxml" depends="compile-main,compile-ooxml,-test-ooxml-check" unless="ooxml.test.notRequired">
+ <junit printsummary="yes" fork="no" haltonfailure="${halt.on.test.failure}" failureproperty="ooxml.test.failed">
+ <classpath>
+ <path refid="ooxml.classpath"/>
+ <pathelement location="${main.output.dir}"/>
+ <pathelement location="${ooxml.output.dir}"/>
+ <pathelement location="${ooxml.output.test.dir}"/>
+ <pathelement location="${junit.jar1.dir}"/>
+ </classpath>
+ <sysproperty key="HSSF.testdata.path" file="${main.src.test}/org/apache/poi/hssf/data"/>
+ <sysproperty key="HWPF.testdata.path" file="${scratchpad.src.test}/org/apache/poi/hwpf/data"/>
+ <sysproperty key="HSLF.testdata.path" file="${scratchpad.src.test}/org/apache/poi/hslf/data"/>
+ <sysproperty key="java.awt.headless" value="true"/>
+ <formatter type="plain"/>
+ <formatter type="xml"/>
+ <batchtest todir="${ooxml.reports.test}">
+ <fileset dir="${ooxml.src.test}">
+ <include name="**/Test*.java"/>
+ <exclude name="**/AllTests.java"/>
+ </fileset>
+ </batchtest>
+ </junit>
+ <delete file="${ooxml.testokfile}"/>
+ <antcall target="-test-ooxml-write-testfile"/>
+ </target>
+
+ <target name="-test-ooxml-write-testfile" unless="ooxml.test.failed">
+ <echo file="${ooxml.testokfile}" append="false" message="testok"/>
</target>
<target name="-check-docs">
Modified: poi/trunk/src/scratchpad/ooxml-src/org/apache/poi/hssf/HSSFXML.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/ooxml-src/org/apache/poi/hssf/HSSFXML.java?rev=607043&r1=607042&r2=607043&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/ooxml-src/org/apache/poi/hssf/HSSFXML.java (original)
+++ poi/trunk/src/scratchpad/ooxml-src/org/apache/poi/hssf/HSSFXML.java Thu Dec 27 03:52:12 2007
@@ -22,8 +22,13 @@
import org.apache.xmlbeans.XmlException;
import org.openxml4j.exceptions.OpenXML4JException;
import org.openxml4j.opc.Package;
+import org.openxml4j.opc.PackagePart;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheet;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheets;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorkbook;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorksheet;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.WorkbookDocument;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.WorksheetDocument;
/**
* Experimental class to do low level processing
@@ -45,7 +50,30 @@
WorkbookDocument.Factory.parse(basePart.getInputStream());
}
+ /**
+ * Returns the low level workbook base object
+ */
public CTWorkbook getWorkbook() {
return workbookDoc.getWorkbook();
+ }
+ /**
+ * Returns the references from the workbook to its
+ * sheets.
+ * You'll need these to figure out the sheet ordering,
+ * and to get at the actual sheets themselves
+ */
+ public CTSheets getSheetReferences() {
+ return getWorkbook().getSheets();
+ }
+ /**
+ * Returns the low level (work)sheet object from
+ * the supplied sheet reference
+ */
+ public CTWorksheet getSheet(CTSheet sheet) throws IOException, XmlException {
+ PackagePart sheetPart =
+ getRelatedPackagePart(sheet.getId());
+ WorksheetDocument sheetDoc =
+ WorksheetDocument.Factory.parse(sheetPart.getInputStream());
+ return sheetDoc.getWorksheet();
}
}
Modified: poi/trunk/src/scratchpad/ooxml-src/org/apache/poi/hxf/HXFDocument.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/ooxml-src/org/apache/poi/hxf/HXFDocument.java?rev=607043&r1=607042&r2=607043&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/ooxml-src/org/apache/poi/hxf/HXFDocument.java (original)
+++ poi/trunk/src/scratchpad/ooxml-src/org/apache/poi/hxf/HXFDocument.java Thu Dec 27 03:52:12 2007
@@ -29,6 +29,9 @@
import org.openxml4j.opc.Package;
import org.openxml4j.opc.PackageAccess;
import org.openxml4j.opc.PackagePart;
+import org.openxml4j.opc.PackagePartName;
+import org.openxml4j.opc.PackageRelationship;
+import org.openxml4j.opc.PackagingURIHelper;
/**
* Parent class of the low level interface to
@@ -76,8 +79,28 @@
}
}
- public static Package openPackage(File f) throws InvalidFormatException {
- return Package.open(f.toString(), PackageAccess.READ_WRITE);
+ /**
+ * Retrieves the PackagePart for the given relation
+ * id. This will normally come from a r:id attribute
+ * on part of the base document.
+ * @param partId The r:id pointing to the other PackagePart
+ */
+ protected PackagePart getRelatedPackagePart(String partId) {
+ PackageRelationship rel =
+ basePart.getRelationship(partId);
+
+ PackagePartName relName;
+ try {
+ relName = PackagingURIHelper.createPartName(rel.getTargetURI());
+ } catch(InvalidFormatException e) {
+ throw new InternalError(e.getMessage());
+ }
+
+ PackagePart part = container.getPart(relName);
+ if(part == null) {
+ throw new IllegalArgumentException("No part found for rel " + rel);
+ }
+ return part;
}
/**
@@ -86,5 +109,13 @@
*/
public Package getPackage() {
return container;
+ }
+
+ /**
+ * Returns an opened OOXML Package for the supplied File
+ * @param f File to open
+ */
+ public static Package openPackage(File f) throws InvalidFormatException {
+ return Package.open(f.toString(), PackageAccess.READ_WRITE);
}
}
Modified: poi/trunk/src/scratchpad/ooxml-src/org/apache/poi/hxf/dev/HXFLister.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/ooxml-src/org/apache/poi/hxf/dev/HXFLister.java?rev=607043&r1=607042&r2=607043&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/ooxml-src/org/apache/poi/hxf/dev/HXFLister.java (original)
+++ poi/trunk/src/scratchpad/ooxml-src/org/apache/poi/hxf/dev/HXFLister.java Thu Dec 27 03:52:12 2007
@@ -80,6 +80,9 @@
if(! part.isRelationshipPart()) {
disp.println("\t" + part.getRelationships().size() + " relations");
+ for(PackageRelationship rel : part.getRelationships()) {
+ displayRelation(rel, "\t ");
+ }
}
}
}
@@ -92,12 +95,15 @@
PackageRelationshipCollection rels =
container.getRelationships();
for (PackageRelationship rel : rels) {
- disp.println("Relationship:");
- disp.println("\tFrom: "+ rel.getSourceURI());
- disp.println("\tTo: " + rel.getTargetURI());
- disp.println("\tMode: " + rel.getTargetMode());
- disp.println("\tType: " + rel.getRelationshipType());
+ displayRelation(rel, "");
}
+ }
+ private void displayRelation(PackageRelationship rel, String indent) {
+ disp.println(indent+"Relationship:");
+ disp.println(indent+"\tFrom: "+ rel.getSourceURI());
+ disp.println(indent+"\tTo: " + rel.getTargetURI());
+ disp.println(indent+"\tMode: " + rel.getTargetMode());
+ disp.println(indent+"\tType: " + rel.getRelationshipType());
}
public static void main(String[] args) throws Exception {
Modified: poi/trunk/src/scratchpad/ooxml-testcases/org/apache/poi/hssf/TestHSSFXML.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/ooxml-testcases/org/apache/poi/hssf/TestHSSFXML.java?rev=607043&r1=607042&r2=607043&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/ooxml-testcases/org/apache/poi/hssf/TestHSSFXML.java (original)
+++ poi/trunk/src/scratchpad/ooxml-testcases/org/apache/poi/hssf/TestHSSFXML.java Thu Dec 27 03:52:12 2007
@@ -5,6 +5,7 @@
import org.apache.poi.hxf.HXFDocument;
import org.openxml4j.opc.Package;
import org.openxml4j.opc.PackagePart;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheet;
import junit.framework.TestCase;
@@ -64,5 +65,32 @@
xml = new HSSFXML(
HXFDocument.openPackage(sampleFile)
);
+
+ // Check it has a workbook
+ assertNotNull(xml.getWorkbook());
+ }
+
+ public void testSheetBasics() throws Exception {
+ HSSFXML xml = new HSSFXML(
+ HXFDocument.openPackage(sampleFile)
+ );
+
+ // Should have three sheets
+ assertEquals(3, xml.getSheetReferences().sizeOfSheetArray());
+ assertEquals(3, xml.getSheetReferences().getSheetArray().length);
+
+ // Check they're as expected
+ CTSheet[] sheets = xml.getSheetReferences().getSheetArray();
+ assertEquals("Sheet1", sheets[0].getName());
+ assertEquals("Sheet2", sheets[1].getName());
+ assertEquals("Sheet3", sheets[2].getName());
+ assertEquals("rId1", sheets[0].getId());
+ assertEquals("rId2", sheets[1].getId());
+ assertEquals("rId3", sheets[2].getId());
+
+ // Now get those objects
+ assertNotNull(xml.getSheet(sheets[0]));
+ assertNotNull(xml.getSheet(sheets[1]));
+ assertNotNull(xml.getSheet(sheets[2]));
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org