Browse Source

Fix bug #51955 - XSSFReader supplied StylesTables need to have the theme data available

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1179440 13f79535-47bb-0310-9956-ffa450edef68
tags/REL_3_8_BETA5
Nick Burch 12 years ago
parent
commit
9395942e91

+ 1
- 0
src/documentation/content/xdocs/status.xml View File

@@ -34,6 +34,7 @@

<changes>
<release version="3.8-beta5" date="2011-??-??">
<action dev="poi-developers" type="fix">51955 - XSSFReader supplied StylesTables need to have the theme data available</action>
<action dev="poi-developers" type="fix">51716 - Removed incorrect assert in SXSSFSheet#getSXSSFSheet</action>
<action dev="poi-developers" type="fix">51834 - Opening and Writing .doc file results in corrupt document</action>
<action dev="poi-developers" type="fix">51902 - Picture.fillRawImageContent - ArrayIndexOutOfBoundsException (duplicate)</action>

+ 18
- 1
src/ooxml/java/org/apache/poi/xssf/eventusermodel/XSSFReader.java View File

@@ -36,6 +36,7 @@ import org.apache.poi.openxml4j.opc.PackagingURIHelper;
import org.apache.poi.xssf.model.CommentsTable;
import org.apache.poi.xssf.model.SharedStringsTable;
import org.apache.poi.xssf.model.StylesTable;
import org.apache.poi.xssf.model.ThemesTable;
import org.apache.poi.xssf.usermodel.XSSFRelation;
import org.apache.xmlbeans.XmlException;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheet;
@@ -83,7 +84,15 @@ public class XSSFReader {
*/
public StylesTable getStylesTable() throws IOException, InvalidFormatException {
ArrayList<PackagePart> parts = pkg.getPartsByContentType( XSSFRelation.STYLES.getContentType());
return parts.size() == 0 ? null : new StylesTable(parts.get(0), null);
if(parts.size() == 0) return null;
// Create the Styles Table, and associate the Themes if present
StylesTable styles = new StylesTable(parts.get(0), null);
parts = pkg.getPartsByContentType( XSSFRelation.THEME.getContentType());
if(parts.size() != 0) {
styles.setTheme(new ThemesTable(parts.get(0), null));
}
return styles;
}


@@ -104,6 +113,14 @@ public class XSSFReader {
return XSSFRelation.STYLES.getContents(workbookPart);
}

/**
* Returns an InputStream to read the contents of the
* themes table.
*/
public InputStream getThemesData() throws IOException, InvalidFormatException {
return XSSFRelation.THEME.getContents(workbookPart);
}

/**
* Returns an InputStream to read the contents of the
* main Workbook, which contains key overall data for

+ 10
- 2
src/ooxml/java/org/apache/poi/xssf/model/ThemesTable.java View File

@@ -16,10 +16,13 @@
==================================================================== */
package org.apache.poi.xssf.model;

import java.io.IOException;

import org.apache.poi.POIXMLDocumentPart;
import org.apache.poi.openxml4j.opc.PackagePart;
import org.apache.poi.openxml4j.opc.PackageRelationship;
import org.apache.poi.xssf.usermodel.XSSFColor;
import org.apache.xmlbeans.XmlException;
import org.apache.xmlbeans.XmlObject;
import org.openxmlformats.schemas.drawingml.x2006.main.CTColorScheme;
import org.openxmlformats.schemas.drawingml.x2006.main.ThemeDocument;
@@ -34,9 +37,14 @@ import org.openxmlformats.schemas.drawingml.x2006.main.CTColor;
public class ThemesTable extends POIXMLDocumentPart {
private ThemeDocument theme;

public ThemesTable(PackagePart part, PackageRelationship rel) throws Exception {
public ThemesTable(PackagePart part, PackageRelationship rel) throws IOException {
super(part, rel);
theme = ThemeDocument.Factory.parse(part.getInputStream());
try {
theme = ThemeDocument.Factory.parse(part.getInputStream());
} catch(XmlException e) {
throw new IOException(e.getLocalizedMessage());
}
}

public ThemesTable(ThemeDocument theme) {

+ 7
- 0
src/ooxml/testcases/org/apache/poi/xssf/eventusermodel/TestXSSFReader.java View File

@@ -55,6 +55,13 @@ public final class TestXSSFReader extends TestCase {

assertEquals(3, r.getStylesTable().getFonts().size());
assertEquals(0, r.getStylesTable()._getNumberFormatSize());
// The Styles Table should have the themes associated with it too
assertNotNull(r.getStylesTable().getTheme());
// Check we get valid data for the two
assertNotNull(r.getStylesData());
assertNotNull(r.getThemesData());
}

public void testStrings() throws Exception {

Loading…
Cancel
Save