mirror of https://github.com/apache/poi.git
Move the SharedStringsTable to a more generic package, and make a start on the styles table
git-svn-id: https://svn.apache.org/repos/asf/poi/branches/ooxml@637624 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
c94ce50344
commit
ef20df0bd1
|
@ -15,7 +15,7 @@
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
==================================================================== */
|
==================================================================== */
|
||||||
|
|
||||||
package org.apache.poi.xssf.strings;
|
package org.apache.poi.xssf.model;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
|
@ -0,0 +1,156 @@
|
||||||
|
/* ====================================================================
|
||||||
|
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.model;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.util.LinkedList;
|
||||||
|
|
||||||
|
import org.apache.poi.ss.usermodel.SharedStringSource;
|
||||||
|
import org.apache.xmlbeans.XmlException;
|
||||||
|
import org.apache.xmlbeans.XmlOptions;
|
||||||
|
import org.openxml4j.opc.PackagePart;
|
||||||
|
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTBorder;
|
||||||
|
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTFill;
|
||||||
|
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTFont;
|
||||||
|
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTNumFmt;
|
||||||
|
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTNumFmts;
|
||||||
|
import org.openxmlformats.schemas.spreadsheetml.x2006.main.StyleSheetDocument;;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Table of styles shared across all sheets in a workbook.
|
||||||
|
*
|
||||||
|
* FIXME: I don't like having a dependency on PackagePart (from OpenXML4J) in model classes.
|
||||||
|
* I'd rather let Workbook keep track of all part-document relationships and keep all other
|
||||||
|
* classes clean. -- Ugo
|
||||||
|
*
|
||||||
|
* @version $Id: SharedStringsTable.java 612495 2008-01-16 16:08:22Z ugo $
|
||||||
|
*/
|
||||||
|
public class StylesTable {
|
||||||
|
private final LinkedList<String> numberFormats = new LinkedList<String>();
|
||||||
|
private final LinkedList<CTFont> fonts = new LinkedList<CTFont>();
|
||||||
|
private final LinkedList<CTFill> fills = new LinkedList<CTFill>();
|
||||||
|
private final LinkedList<CTBorder> borders = new LinkedList<CTBorder>();
|
||||||
|
|
||||||
|
private PackagePart part;
|
||||||
|
private StyleSheetDocument doc;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new StylesTable by reading it from a PackagePart.
|
||||||
|
*
|
||||||
|
* @param part The PackagePart to read.
|
||||||
|
* @throws IOException if an error occurs while reading.
|
||||||
|
*/
|
||||||
|
public StylesTable(PackagePart part) throws IOException {
|
||||||
|
this.part = part;
|
||||||
|
InputStream is = part.getInputStream();
|
||||||
|
try {
|
||||||
|
readFrom(is);
|
||||||
|
} finally {
|
||||||
|
if (is != null) is.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Read this shared styles table from an XML file.
|
||||||
|
*
|
||||||
|
* @param is The input stream containing the XML document.
|
||||||
|
* @throws IOException if an error occurs while reading.
|
||||||
|
*/
|
||||||
|
public void readFrom(InputStream is) throws IOException {
|
||||||
|
try {
|
||||||
|
doc = StyleSheetDocument.Factory.parse(is);
|
||||||
|
|
||||||
|
// Grab all the different bits we care about
|
||||||
|
for (CTNumFmt nfmt : doc.getStyleSheet().getNumFmts().getNumFmtArray()) {
|
||||||
|
numberFormats.add(nfmt.getFormatCode());
|
||||||
|
}
|
||||||
|
for (CTFont font : doc.getStyleSheet().getFonts().getFontArray()) {
|
||||||
|
fonts.add(font);
|
||||||
|
}
|
||||||
|
for (CTFill fill : doc.getStyleSheet().getFills().getFillArray()) {
|
||||||
|
fills.add(fill);
|
||||||
|
}
|
||||||
|
for (CTBorder border : doc.getStyleSheet().getBorders().getBorderArray()) {
|
||||||
|
borders.add(border);
|
||||||
|
}
|
||||||
|
} catch (XmlException e) {
|
||||||
|
throw new IOException(e.getLocalizedMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getNumberFormatAt(int idx) {
|
||||||
|
return numberFormats.get(idx);
|
||||||
|
}
|
||||||
|
|
||||||
|
public synchronized int putNumberFormat(String fmt) {
|
||||||
|
if (numberFormats.contains(fmt)) {
|
||||||
|
return numberFormats.indexOf(fmt);
|
||||||
|
}
|
||||||
|
numberFormats.add(fmt);
|
||||||
|
return numberFormats.size() - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Save this table to its own PackagePart.
|
||||||
|
*
|
||||||
|
* @throws IOException if an error occurs while writing.
|
||||||
|
*/
|
||||||
|
public void save() throws IOException {
|
||||||
|
OutputStream out = this.part.getOutputStream();
|
||||||
|
try {
|
||||||
|
writeTo(out);
|
||||||
|
} finally {
|
||||||
|
out.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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();
|
||||||
|
options.setSaveOuter();
|
||||||
|
|
||||||
|
// Work on the current one
|
||||||
|
// Need to do this, as we don't handle
|
||||||
|
// all the possible entries yet
|
||||||
|
|
||||||
|
// Formats
|
||||||
|
CTNumFmts formats = CTNumFmts.Factory.newInstance();
|
||||||
|
formats.setCount(numberFormats.size());
|
||||||
|
for (String fmt : numberFormats) {
|
||||||
|
formats.addNewNumFmt().setFormatCode(fmt);
|
||||||
|
}
|
||||||
|
doc.getStyleSheet().setNumFmts(formats);
|
||||||
|
|
||||||
|
// Fonts
|
||||||
|
|
||||||
|
// Fills
|
||||||
|
|
||||||
|
// Borders
|
||||||
|
|
||||||
|
// Save
|
||||||
|
doc.save(out);
|
||||||
|
}
|
||||||
|
}
|
|
@ -38,7 +38,7 @@ import org.apache.poi.ss.usermodel.Sheet;
|
||||||
import org.apache.poi.ss.usermodel.Workbook;
|
import org.apache.poi.ss.usermodel.Workbook;
|
||||||
import org.apache.poi.util.POILogFactory;
|
import org.apache.poi.util.POILogFactory;
|
||||||
import org.apache.poi.util.POILogger;
|
import org.apache.poi.util.POILogger;
|
||||||
import org.apache.poi.xssf.strings.SharedStringsTable;
|
import org.apache.poi.xssf.model.SharedStringsTable;
|
||||||
import org.apache.xmlbeans.XmlException;
|
import org.apache.xmlbeans.XmlException;
|
||||||
import org.apache.xmlbeans.XmlObject;
|
import org.apache.xmlbeans.XmlObject;
|
||||||
import org.apache.xmlbeans.XmlOptions;
|
import org.apache.xmlbeans.XmlOptions;
|
||||||
|
|
Loading…
Reference in New Issue