diff options
author | Nick Burch <nick@apache.org> | 2015-07-22 00:04:59 +0000 |
---|---|---|
committer | Nick Burch <nick@apache.org> | 2015-07-22 00:04:59 +0000 |
commit | f0a360a7bcc8acc624d6b218161b786dd6f58e37 (patch) | |
tree | cea4cdac42f80de4aed5f63cb73c9cdd2dd1a713 /src/ooxml/java/org/apache/poi/xssf/model | |
parent | 4000f528a11e6e2b1a24d6bef95fd03702e7aef2 (diff) | |
download | poi-f0a360a7bcc8acc624d6b218161b786dd6f58e37.tar.gz poi-f0a360a7bcc8acc624d6b218161b786dd6f58e37.zip |
Allow creating of an empty Themes Table on request
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1692211 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/ooxml/java/org/apache/poi/xssf/model')
-rw-r--r-- | src/ooxml/java/org/apache/poi/xssf/model/StylesTable.java | 26 | ||||
-rw-r--r-- | src/ooxml/java/org/apache/poi/xssf/model/ThemesTable.java | 31 |
2 files changed, 56 insertions, 1 deletions
diff --git a/src/ooxml/java/org/apache/poi/xssf/model/StylesTable.java b/src/ooxml/java/org/apache/poi/xssf/model/StylesTable.java index 3937e3eeab..c891509274 100644 --- a/src/ooxml/java/org/apache/poi/xssf/model/StylesTable.java +++ b/src/ooxml/java/org/apache/poi/xssf/model/StylesTable.java @@ -35,7 +35,10 @@ import org.apache.poi.ss.usermodel.BuiltinFormats; import org.apache.poi.ss.usermodel.FontFamily; import org.apache.poi.ss.usermodel.FontScheme; import org.apache.poi.xssf.usermodel.XSSFCellStyle; +import org.apache.poi.xssf.usermodel.XSSFFactory; import org.apache.poi.xssf.usermodel.XSSFFont; +import org.apache.poi.xssf.usermodel.XSSFRelation; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.poi.xssf.usermodel.extensions.XSSFCellBorder; import org.apache.poi.xssf.usermodel.extensions.XSSFCellFill; import org.apache.xmlbeans.XmlException; @@ -57,7 +60,6 @@ import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTXf; import org.openxmlformats.schemas.spreadsheetml.x2006.main.STPatternType; import org.openxmlformats.schemas.spreadsheetml.x2006.main.StyleSheetDocument; - /** * Table of styles shared across all sheets in a workbook. */ @@ -79,6 +81,7 @@ public class StylesTable extends POIXMLDocumentPart { private static final int MAXIMUM_STYLE_ID = SpreadsheetVersion.EXCEL2007.getMaxCellStyles(); private StyleSheetDocument doc; + private XSSFWorkbook workbook; private ThemesTable theme; /** @@ -96,7 +99,17 @@ public class StylesTable extends POIXMLDocumentPart { super(part, rel); readFrom(part.getInputStream()); } + + public void setWorkbook(XSSFWorkbook wb) { + this.workbook = wb; + } + /** + * Get the current Workbook's theme table, or null if the + * Workbook lacks any themes. + * <p>Use {@link #ensureThemesTable()} to have a themes table + * created if needed + */ public ThemesTable getTheme() { return theme; } @@ -113,6 +126,17 @@ public class StylesTable extends POIXMLDocumentPart { border.setThemesTable(theme); } } + + /** + * If there isn't currently a {@link ThemesTable} for the + * current Workbook, then creates one and sets it up. + * After this, calls to {@link #getTheme()} won't give null + */ + public void ensureThemesTable() { + if (theme != null) return; + + theme = (ThemesTable)workbook.createRelationship(XSSFRelation.THEME, XSSFFactory.getInstance()); + } /** * Read this shared styles table from an XML file. diff --git a/src/ooxml/java/org/apache/poi/xssf/model/ThemesTable.java b/src/ooxml/java/org/apache/poi/xssf/model/ThemesTable.java index bf58989ccb..c710e3576f 100644 --- a/src/ooxml/java/org/apache/poi/xssf/model/ThemesTable.java +++ b/src/ooxml/java/org/apache/poi/xssf/model/ThemesTable.java @@ -17,12 +17,14 @@ package org.apache.poi.xssf.model; import java.io.IOException; +import java.io.OutputStream; 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.XmlOptions; import org.openxmlformats.schemas.drawingml.x2006.main.CTColor; import org.openxmlformats.schemas.drawingml.x2006.main.CTColorScheme; import org.openxmlformats.schemas.drawingml.x2006.main.ThemeDocument; @@ -35,6 +37,15 @@ public class ThemesTable extends POIXMLDocumentPart { private ThemeDocument theme; /** + * Create a new, empty ThemesTable + */ + public ThemesTable() { + super(); + theme = ThemeDocument.Factory.newInstance(); + theme.addNewTheme().addNewThemeElements(); + } + + /** * Construct a ThemesTable. * @param part A PackagePart. * @param rel A PackageRelationship. @@ -120,4 +131,24 @@ public class ThemesTable extends POIXMLDocumentPart { // All done } + + /** + * Write this table out as XML. + * + * @param out The stream to write to. + * @throws IOException if an error occurs while writing. + */ + public void writeTo(OutputStream out) throws IOException { + XmlOptions options = new XmlOptions(DEFAULT_XML_OPTIONS); + + theme.save(out, options); + } + + @Override + protected void commit() throws IOException { + PackagePart part = getPackagePart(); + OutputStream out = part.getOutputStream(); + writeTo(out); + out.close(); + } } |