From: Ugo Cei Date: Fri, 25 Jan 2008 17:16:14 +0000 (+0000) Subject: Initial support for loading workbooks off files. X-Git-Tag: REL_3_5_BETA2~222 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=6194d088cda005ff7856b531b92754fc913ce7c3;p=poi.git Initial support for loading workbooks off files. git-svn-id: https://svn.apache.org/repos/asf/poi/branches/ooxml@615275 13f79535-47bb-0310-9956-ffa450edef68 --- 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 1d92b63800..a26ca9c5f6 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java @@ -17,6 +17,7 @@ package org.apache.poi.xssf.usermodel; +import java.io.File; import java.io.IOException; import java.io.OutputStream; import java.util.LinkedList; @@ -31,12 +32,15 @@ import org.apache.poi.ss.usermodel.Name; import org.apache.poi.ss.usermodel.Palette; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; +import org.apache.xmlbeans.XmlException; import org.apache.xmlbeans.XmlObject; import org.apache.xmlbeans.XmlOptions; import org.openxml4j.exceptions.InvalidFormatException; +import org.openxml4j.exceptions.OpenXML4JException; import org.openxml4j.opc.Package; import org.openxml4j.opc.PackagePart; import org.openxml4j.opc.PackagePartName; +import org.openxml4j.opc.PackageRelationship; import org.openxml4j.opc.PackageRelationshipTypes; import org.openxml4j.opc.PackagingURIHelper; import org.openxml4j.opc.TargetMode; @@ -45,6 +49,7 @@ import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTBookViews; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheet; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorkbook; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorksheet; +import org.openxmlformats.schemas.spreadsheetml.x2006.main.WorkbookDocument; public class XSSFWorkbook implements Workbook { @@ -52,6 +57,9 @@ public class XSSFWorkbook implements Workbook { private CTWorkbook workbook; private List sheets = new LinkedList(); + + /** The OPC Package */ + private Package pkg; public XSSFWorkbook() { this.workbook = CTWorkbook.Factory.newInstance(); @@ -61,6 +69,26 @@ public class XSSFWorkbook implements Workbook { this.workbook.addNewSheets(); } + public XSSFWorkbook(String path) throws IOException { + try { + this.pkg = Package.open(path); + PackageRelationship coreDocRelationship = this.pkg.getRelationshipsByType( + PackageRelationshipTypes.CORE_DOCUMENT).getRelationship(0); + + // Get core part + PackagePart corePart = this.pkg.getPart(coreDocRelationship); + WorkbookDocument doc = WorkbookDocument.Factory.parse(corePart.getInputStream()); + this.workbook = doc.getWorkbook(); + + } catch (InvalidFormatException e) { + throw new IOException(e.toString()); + } catch (OpenXML4JException e) { + throw new IOException(e.toString()); + } catch (XmlException e) { + throw new IOException(e.toString()); + } + } + protected CTWorkbook getWorkbook() { return this.workbook; } diff --git a/src/ooxml/testcases/org/apache/poi/xssf/io/TestLoadSaveXSSF.java b/src/ooxml/testcases/org/apache/poi/xssf/io/TestLoadSaveXSSF.java new file mode 100644 index 0000000000..18d0034f83 --- /dev/null +++ b/src/ooxml/testcases/org/apache/poi/xssf/io/TestLoadSaveXSSF.java @@ -0,0 +1,36 @@ +/* ==================================================================== + 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.io; + +import java.net.URL; + +import junit.framework.TestCase; + +import org.apache.poi.xssf.usermodel.XSSFWorkbook; + + +public class TestLoadSaveXSSF extends TestCase { + + public void testLoadSample() throws Exception { + URL url = this.getClass().getResource("sample.xlsx"); + XSSFWorkbook workbook = new XSSFWorkbook(url.getFile()); + assertEquals(3, workbook.getNumberOfSheets()); + assertEquals("Sheet1", workbook.getSheetName(0)); + } + +} diff --git a/src/ooxml/testcases/org/apache/poi/xssf/io/sample.xlsx b/src/ooxml/testcases/org/apache/poi/xssf/io/sample.xlsx new file mode 100644 index 0000000000..a275cf417e Binary files /dev/null and b/src/ooxml/testcases/org/apache/poi/xssf/io/sample.xlsx differ