refactored POIXMLFactory and related classes; simplified XSSFRelation - now it's just a set of definitions of XSSF relations, all read/load stuff is not used anymore and was removed. Also, removed Workbook.getCustomPallete() - it's OLE-specific
git-svn-id: https://svn.apache.org/repos/asf/poi/branches/ooxml@703814 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
1a700918d8
commit
9c094be425
@ -374,8 +374,6 @@ public interface Workbook {
|
|||||||
*/
|
*/
|
||||||
void removeName(String name);
|
void removeName(String name);
|
||||||
|
|
||||||
Palette getCustomPalette();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds a picture to the workbook.
|
* Adds a picture to the workbook.
|
||||||
*
|
*
|
||||||
|
@ -22,7 +22,6 @@ import java.util.List;
|
|||||||
|
|
||||||
import org.apache.poi.poifs.common.POIFSConstants;
|
import org.apache.poi.poifs.common.POIFSConstants;
|
||||||
import org.apache.poi.util.IOUtils;
|
import org.apache.poi.util.IOUtils;
|
||||||
import org.apache.poi.util.PackageHelper;
|
|
||||||
import org.apache.xmlbeans.XmlException;
|
import org.apache.xmlbeans.XmlException;
|
||||||
import org.openxml4j.exceptions.InvalidFormatException;
|
import org.openxml4j.exceptions.InvalidFormatException;
|
||||||
import org.openxml4j.exceptions.OpenXML4JException;
|
import org.openxml4j.exceptions.OpenXML4JException;
|
||||||
|
@ -143,43 +143,35 @@ public class POIXMLDocumentPart {
|
|||||||
* Create a new child POIXMLDocumentPart
|
* Create a new child POIXMLDocumentPart
|
||||||
*
|
*
|
||||||
* @param descriptor the part descriptor
|
* @param descriptor the part descriptor
|
||||||
* @param cls the Class object identifying the type of instance to create
|
* @param factory the factory that will create an instance of the requested relation
|
||||||
* @return the created child POIXMLDocumentPart
|
* @return the created child POIXMLDocumentPart
|
||||||
*/
|
*/
|
||||||
protected POIXMLDocumentPart createRelationship(POIXMLRelation descriptor, Class<? extends POIXMLDocumentPart> cls){
|
protected POIXMLDocumentPart createRelationship(POIXMLRelation descriptor, POIXMLFactory factory){
|
||||||
return createRelationship(descriptor, cls, -1);
|
return createRelationship(descriptor, factory, -1, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected POIXMLDocumentPart createRelationship(POIXMLRelation descriptor, POIXMLFactory factory, int idx){
|
||||||
|
return createRelationship(descriptor, factory, idx, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new child POIXMLDocumentPart
|
* Create a new child POIXMLDocumentPart
|
||||||
*
|
*
|
||||||
* @param descriptor the part descriptor
|
* @param descriptor the part descriptor
|
||||||
* @param cls the Class object identifying the type of instance to create
|
* @param factory the factory that will create an instance of the requested relation
|
||||||
* @param idx part number
|
* @param idx part number
|
||||||
|
* @param noRelation if true, then no relationship is added.
|
||||||
* @return the created child POIXMLDocumentPart
|
* @return the created child POIXMLDocumentPart
|
||||||
*/
|
*/
|
||||||
protected POIXMLDocumentPart createRelationship(POIXMLRelation descriptor, Class<? extends POIXMLDocumentPart> cls, int idx){
|
protected POIXMLDocumentPart createRelationship(POIXMLRelation descriptor, POIXMLFactory factory, int idx, boolean noRelation){
|
||||||
return createRelationship(descriptor, cls, idx, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a new child POIXMLDocumentPart
|
|
||||||
*
|
|
||||||
* @param descriptor the part descriptor
|
|
||||||
* @param cls the Class object identifying the type of instance to create
|
|
||||||
* @param idx part number
|
|
||||||
* @param norel if true, then no relationship is added.
|
|
||||||
* @return the created child POIXMLDocumentPart
|
|
||||||
*/
|
|
||||||
protected POIXMLDocumentPart createRelationship(POIXMLRelation descriptor, Class<? extends POIXMLDocumentPart> cls, int idx, boolean norel){
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
PackagePartName ppName = PackagingURIHelper.createPartName(descriptor.getFileName(idx));
|
PackagePartName ppName = PackagingURIHelper.createPartName(descriptor.getFileName(idx));
|
||||||
PackageRelationship rel = null;
|
PackageRelationship rel = null;
|
||||||
if(!norel) rel = packagePart.addRelationship(ppName, TargetMode.INTERNAL, descriptor.getRelation());
|
if(!noRelation) rel = packagePart.addRelationship(ppName, TargetMode.INTERNAL, descriptor.getRelation());
|
||||||
|
|
||||||
PackagePart part = packagePart.getPackage().createPart(ppName, descriptor.getContentType());
|
PackagePart part = packagePart.getPackage().createPart(ppName, descriptor.getContentType());
|
||||||
POIXMLDocumentPart doc = cls.newInstance();
|
POIXMLDocumentPart doc = factory.newDocumentPart(descriptor);
|
||||||
doc.packageRel = rel;
|
doc.packageRel = rel;
|
||||||
doc.packagePart = part;
|
doc.packagePart = part;
|
||||||
doc.parent = this;
|
doc.parent = this;
|
||||||
@ -206,7 +198,7 @@ public class POIXMLDocumentPart {
|
|||||||
logger.log(POILogger.ERROR, "Skipped invalid entry " + rel.getTargetURI());
|
logger.log(POILogger.ERROR, "Skipped invalid entry " + rel.getTargetURI());
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
POIXMLDocumentPart childPart = factory.create(rel, p);
|
POIXMLDocumentPart childPart = factory.createDocumentPart(rel, p);
|
||||||
childPart.parent = this;
|
childPart.parent = this;
|
||||||
addRelation(childPart);
|
addRelation(childPart);
|
||||||
|
|
||||||
|
@ -25,16 +25,24 @@ import org.openxml4j.opc.PackagePart;
|
|||||||
*
|
*
|
||||||
* @author Yegor Kozlov
|
* @author Yegor Kozlov
|
||||||
*/
|
*/
|
||||||
public class POIXMLFactory {
|
public abstract class POIXMLFactory {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new instance of a {@link POIXMLDocumentPart}
|
* Create a POIXMLDocumentPart from existing package part and relation. This method is called
|
||||||
|
* from {@link POIXMLDocumentPart#read(POIXMLFactory)} when parsing a document
|
||||||
*
|
*
|
||||||
* @param rel the package part relationship
|
* @param rel the package part relationship
|
||||||
* @param part the PackagePart representing the created instance
|
* @param part the PackagePart representing the created instance
|
||||||
* @return A new instance of a POIXMLDocumentPart.
|
* @return A new instance of a POIXMLDocumentPart.
|
||||||
*/
|
*/
|
||||||
public POIXMLDocumentPart create(PackageRelationship rel, PackagePart part){
|
public abstract POIXMLDocumentPart createDocumentPart(PackageRelationship rel, PackagePart part);
|
||||||
return new POIXMLDocumentPart(part, rel);
|
|
||||||
}
|
/**
|
||||||
|
* Create a new POIXMLDocumentPart using the supplied descriptor. This method is used when adding new parts
|
||||||
|
* to a document, for example, when adding a sheet to a workbook, slide to a presentation, etc.
|
||||||
|
*
|
||||||
|
* @param descriptor described the object to create
|
||||||
|
* @return A new instance of a POIXMLDocumentPart.
|
||||||
|
*/
|
||||||
|
public abstract POIXMLDocumentPart newDocumentPart(POIXMLRelation descriptor);
|
||||||
}
|
}
|
||||||
|
@ -21,7 +21,7 @@ package org.apache.poi;
|
|||||||
*
|
*
|
||||||
* @author Yegor Kozlov
|
* @author Yegor Kozlov
|
||||||
*/
|
*/
|
||||||
public class POIXMLRelation {
|
public abstract class POIXMLRelation {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Describes the content stored in a part.
|
* Describes the content stored in a part.
|
||||||
@ -38,6 +38,26 @@ public class POIXMLRelation {
|
|||||||
*/
|
*/
|
||||||
protected String _defaultName;
|
protected String _defaultName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Defines what object is used to construct instances of this relationship
|
||||||
|
*/
|
||||||
|
private Class<? extends POIXMLDocumentPart> _cls;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Instantiates a POIXMLRelation.
|
||||||
|
*
|
||||||
|
* @param type content type
|
||||||
|
* @param rel relationship
|
||||||
|
* @param defaultName default item name
|
||||||
|
* @param cls defines what object is used to construct instances of this relationship
|
||||||
|
*/
|
||||||
|
public POIXMLRelation(String type, String rel, String defaultName, Class<? extends POIXMLDocumentPart> cls) {
|
||||||
|
_type = type;
|
||||||
|
_relation = rel;
|
||||||
|
_defaultName = defaultName;
|
||||||
|
_cls = cls;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Instantiates a POIXMLRelation.
|
* Instantiates a POIXMLRelation.
|
||||||
*
|
*
|
||||||
@ -46,11 +66,8 @@ public class POIXMLRelation {
|
|||||||
* @param defaultName default item name
|
* @param defaultName default item name
|
||||||
*/
|
*/
|
||||||
public POIXMLRelation(String type, String rel, String defaultName) {
|
public POIXMLRelation(String type, String rel, String defaultName) {
|
||||||
_type = type;
|
this(type, rel, defaultName, null);
|
||||||
_relation = rel;
|
|
||||||
_defaultName = defaultName;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the content type. Content types define a media type, a subtype, and an
|
* Return the content type. Content types define a media type, a subtype, and an
|
||||||
* optional set of parameters, as defined in RFC 2616.
|
* optional set of parameters, as defined in RFC 2616.
|
||||||
@ -93,4 +110,13 @@ public class POIXMLRelation {
|
|||||||
}
|
}
|
||||||
return _defaultName.replace("#", Integer.toString(index));
|
return _defaultName.replace("#", Integer.toString(index));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return type of the obejct used to construct instances of this relationship
|
||||||
|
*
|
||||||
|
* @return the class of the object used to construct instances of this relation
|
||||||
|
*/
|
||||||
|
public Class<? extends POIXMLDocumentPart> getRelationClass(){
|
||||||
|
return _cls;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,14 +19,12 @@ package org.apache.poi.xssf.usermodel;
|
|||||||
import org.apache.poi.POIXMLDocumentPart;
|
import org.apache.poi.POIXMLDocumentPart;
|
||||||
import org.apache.poi.POIXMLFactory;
|
import org.apache.poi.POIXMLFactory;
|
||||||
import org.apache.poi.POIXMLException;
|
import org.apache.poi.POIXMLException;
|
||||||
import org.apache.poi.xssf.model.SharedStringsTable;
|
import org.apache.poi.POIXMLRelation;
|
||||||
import org.apache.poi.xssf.model.StylesTable;
|
import org.apache.poi.util.POILogger;
|
||||||
import org.apache.poi.xssf.model.CommentsTable;
|
import org.apache.poi.util.POILogFactory;
|
||||||
import org.openxml4j.opc.PackageRelationship;
|
import org.openxml4j.opc.PackageRelationship;
|
||||||
import org.openxml4j.opc.PackagePart;
|
import org.openxml4j.opc.PackagePart;
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.lang.reflect.Constructor;
|
import java.lang.reflect.Constructor;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -35,25 +33,40 @@ import java.lang.reflect.Constructor;
|
|||||||
* @author Yegor Kozlov
|
* @author Yegor Kozlov
|
||||||
*/
|
*/
|
||||||
public class XSSFFactory extends POIXMLFactory {
|
public class XSSFFactory extends POIXMLFactory {
|
||||||
protected static Map<String, Class> parts = new HashMap<String, Class>();
|
private static POILogger logger = POILogFactory.getLogger(XSSFFactory.class);
|
||||||
static {
|
|
||||||
parts.put(XSSFRelation.WORKSHEET.getRelation(), XSSFSheet.class);
|
private XSSFFactory(){
|
||||||
parts.put(XSSFRelation.SHARED_STRINGS.getRelation(), SharedStringsTable.class);
|
|
||||||
parts.put(XSSFRelation.STYLES.getRelation(), StylesTable.class);
|
|
||||||
parts.put(XSSFRelation.SHEET_COMMENTS.getRelation(), CommentsTable.class);
|
|
||||||
parts.put(XSSFRelation.DRAWINGS.getRelation(), XSSFDrawing.class);
|
|
||||||
parts.put(XSSFRelation.IMAGES.getRelation(), XSSFPictureData.class);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public POIXMLDocumentPart create(PackageRelationship rel, PackagePart p){
|
public static XSSFFactory getInstance(){
|
||||||
Class cls = parts.get(rel.getRelationshipType());
|
return new XSSFFactory();
|
||||||
if(cls == null) return super.create(rel, p);
|
}
|
||||||
|
|
||||||
|
public POIXMLDocumentPart createDocumentPart(PackageRelationship rel, PackagePart part){
|
||||||
|
XSSFRelation descriptor = XSSFRelation.getInstance(rel.getRelationshipType());
|
||||||
|
if(descriptor == null || descriptor.getRelationClass() == null){
|
||||||
|
logger.log(POILogger.DEBUG, "using default POIXMLDocumentPart for " + rel.getRelationshipType());
|
||||||
|
return new POIXMLDocumentPart(part, rel);
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
Class cls = descriptor.getRelationClass();
|
||||||
Constructor<? extends POIXMLDocumentPart> constructor = cls.getConstructor(PackagePart.class, PackageRelationship.class);
|
Constructor<? extends POIXMLDocumentPart> constructor = cls.getConstructor(PackagePart.class, PackageRelationship.class);
|
||||||
return constructor.newInstance(p, rel);
|
return constructor.newInstance(part, rel);
|
||||||
} catch (Exception e){
|
} catch (Exception e){
|
||||||
throw new POIXMLException(e);
|
throw new POIXMLException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public POIXMLDocumentPart newDocumentPart(POIXMLRelation descriptor){
|
||||||
|
try {
|
||||||
|
Class cls = descriptor.getRelationClass();
|
||||||
|
Constructor<? extends POIXMLDocumentPart> constructor = cls.getConstructor();
|
||||||
|
return constructor.newInstance();
|
||||||
|
} catch (Exception e){
|
||||||
|
throw new POIXMLException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -39,12 +39,12 @@ public class XSSFPictureData extends POIXMLDocumentPart implements PictureData {
|
|||||||
protected static final POIXMLRelation[] RELATIONS;
|
protected static final POIXMLRelation[] RELATIONS;
|
||||||
static {
|
static {
|
||||||
RELATIONS = new POIXMLRelation[8];
|
RELATIONS = new POIXMLRelation[8];
|
||||||
RELATIONS[Workbook.PICTURE_TYPE_EMF] = new POIXMLRelation("image/x-emf", XSSFRelation.IMAGES.getRelation(), "/xl/media/image#.emf");
|
RELATIONS[Workbook.PICTURE_TYPE_EMF] = XSSFRelation.IMAGE_EMF;
|
||||||
RELATIONS[Workbook.PICTURE_TYPE_WMF] = new POIXMLRelation("image/x-wmf", XSSFRelation.IMAGES.getRelation(), "/xl/media/image#.wmf");
|
RELATIONS[Workbook.PICTURE_TYPE_WMF] = XSSFRelation.IMAGE_WMF;
|
||||||
RELATIONS[Workbook.PICTURE_TYPE_PICT] = new POIXMLRelation("image/pict", XSSFRelation.IMAGES.getRelation(), "/xl/media/image#.pict");
|
RELATIONS[Workbook.PICTURE_TYPE_PICT] = XSSFRelation.IMAGE_PICT;
|
||||||
RELATIONS[Workbook.PICTURE_TYPE_JPEG] = new POIXMLRelation("image/jpeg", XSSFRelation.IMAGES.getRelation(), "/xl/media/image#.jpeg");
|
RELATIONS[Workbook.PICTURE_TYPE_JPEG] = XSSFRelation.IMAGE_JPEG;
|
||||||
RELATIONS[Workbook.PICTURE_TYPE_PNG] = new POIXMLRelation("image/png", XSSFRelation.IMAGES.getRelation(), "/xl/media/image#.png");
|
RELATIONS[Workbook.PICTURE_TYPE_PNG] = XSSFRelation.IMAGE_PNG;
|
||||||
RELATIONS[Workbook.PICTURE_TYPE_DIB] = new POIXMLRelation("image/dib", XSSFRelation.IMAGES.getRelation(), "/xl/media/image#.dib");
|
RELATIONS[Workbook.PICTURE_TYPE_DIB] = XSSFRelation.IMAGE_DIB;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -18,39 +18,37 @@ package org.apache.poi.xssf.usermodel;
|
|||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.OutputStream;
|
|
||||||
import java.lang.reflect.Constructor;
|
|
||||||
import java.lang.reflect.InvocationTargetException;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.Map;
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
import org.apache.poi.POIXMLDocument;
|
import org.apache.poi.POIXMLDocument;
|
||||||
import org.apache.poi.POIXMLRelation;
|
import org.apache.poi.POIXMLRelation;
|
||||||
|
import org.apache.poi.POIXMLDocumentPart;
|
||||||
|
import org.apache.poi.xssf.model.StylesTable;
|
||||||
|
import org.apache.poi.xssf.model.SharedStringsTable;
|
||||||
|
import org.apache.poi.xssf.model.CommentsTable;
|
||||||
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.model.BinaryPart;
|
|
||||||
import org.apache.poi.xssf.model.CommentsTable;
|
|
||||||
import org.apache.poi.xssf.model.Control;
|
|
||||||
import org.apache.poi.xssf.model.Drawing;
|
|
||||||
import org.apache.poi.xssf.model.SharedStringsTable;
|
|
||||||
import org.apache.poi.xssf.model.StylesTable;
|
|
||||||
import org.apache.poi.xssf.model.ThemeTable;
|
|
||||||
import org.apache.poi.xssf.model.XSSFChildContainingModel;
|
|
||||||
import org.apache.poi.xssf.model.XSSFModel;
|
|
||||||
import org.apache.poi.xssf.model.XSSFWritableModel;
|
|
||||||
import org.openxml4j.exceptions.InvalidFormatException;
|
import org.openxml4j.exceptions.InvalidFormatException;
|
||||||
import org.openxml4j.opc.PackagePart;
|
import org.openxml4j.opc.PackagePart;
|
||||||
import org.openxml4j.opc.PackagePartName;
|
import org.openxml4j.opc.PackagePartName;
|
||||||
import org.openxml4j.opc.PackageRelationship;
|
import org.openxml4j.opc.PackageRelationship;
|
||||||
import org.openxml4j.opc.PackageRelationshipCollection;
|
import org.openxml4j.opc.PackageRelationshipCollection;
|
||||||
import org.openxml4j.opc.PackagingURIHelper;
|
import org.openxml4j.opc.PackagingURIHelper;
|
||||||
import org.openxml4j.opc.TargetMode;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public final class XSSFRelation<W extends XSSFModel> extends POIXMLRelation {
|
public final class XSSFRelation extends POIXMLRelation {
|
||||||
|
|
||||||
|
private static POILogger log = POILogFactory.getLogger(XSSFRelation.class);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A map to lookup POIXMLRelation by its relation type
|
||||||
|
*/
|
||||||
|
protected static Map<String, XSSFRelation> _table = new HashMap<String, XSSFRelation>();
|
||||||
|
|
||||||
|
|
||||||
public static final XSSFRelation WORKBOOK = new XSSFRelation(
|
public static final XSSFRelation WORKBOOK = new XSSFRelation(
|
||||||
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml",
|
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml",
|
||||||
@ -68,15 +66,15 @@ public final class XSSFRelation<W extends XSSFModel> extends POIXMLRelation {
|
|||||||
"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml",
|
"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml",
|
||||||
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet",
|
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet",
|
||||||
"/xl/worksheets/sheet#.xml",
|
"/xl/worksheets/sheet#.xml",
|
||||||
null
|
XSSFSheet.class
|
||||||
);
|
);
|
||||||
public static final XSSFRelation<SharedStringsTable> SHARED_STRINGS = create(
|
public static final XSSFRelation SHARED_STRINGS = new XSSFRelation(
|
||||||
"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml",
|
"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml",
|
||||||
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings",
|
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings",
|
||||||
"/xl/sharedStrings.xml",
|
"/xl/sharedStrings.xml",
|
||||||
SharedStringsTable.class
|
SharedStringsTable.class
|
||||||
);
|
);
|
||||||
public static final XSSFRelation<StylesTable> STYLES = create(
|
public static final XSSFRelation STYLES = new XSSFRelation(
|
||||||
"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml",
|
"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml",
|
||||||
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles",
|
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles",
|
||||||
"/xl/styles.xml",
|
"/xl/styles.xml",
|
||||||
@ -86,22 +84,58 @@ public final class XSSFRelation<W extends XSSFModel> extends POIXMLRelation {
|
|||||||
"application/vnd.openxmlformats-officedocument.drawing+xml",
|
"application/vnd.openxmlformats-officedocument.drawing+xml",
|
||||||
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing",
|
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing",
|
||||||
"/xl/drawings/drawing#.xml",
|
"/xl/drawings/drawing#.xml",
|
||||||
null
|
XSSFDrawing.class
|
||||||
);
|
);
|
||||||
public static final XSSFRelation<Drawing> VML_DRAWINGS = create(
|
public static final XSSFRelation VML_DRAWINGS = new XSSFRelation(
|
||||||
"application/vnd.openxmlformats-officedocument.vmlDrawing",
|
"application/vnd.openxmlformats-officedocument.vmlDrawing",
|
||||||
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing",
|
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing",
|
||||||
"/xl/drawings/vmlDrawing#.vml",
|
"/xl/drawings/vmlDrawing#.vml",
|
||||||
Drawing.class
|
null
|
||||||
);
|
);
|
||||||
public static final XSSFRelation IMAGES = new XSSFRelation(
|
public static final XSSFRelation IMAGES = new XSSFRelation(
|
||||||
//client will substitute $type and $ext with the appropriate values depending on the passed data
|
null,
|
||||||
"image/$type",
|
|
||||||
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",
|
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",
|
||||||
"/xl/media/image#.$ext",
|
null,
|
||||||
null
|
XSSFPictureData.class
|
||||||
);
|
);
|
||||||
public static final XSSFRelation<CommentsTable> SHEET_COMMENTS = create(
|
public static final XSSFRelation IMAGE_EMF = new XSSFRelation(
|
||||||
|
"image/x-emf",
|
||||||
|
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",
|
||||||
|
"/xl/media/image#.emf",
|
||||||
|
XSSFPictureData.class
|
||||||
|
);
|
||||||
|
public static final XSSFRelation IMAGE_WMF = new XSSFRelation(
|
||||||
|
"image/x-wmf",
|
||||||
|
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",
|
||||||
|
"/xl/media/image#.wmf",
|
||||||
|
XSSFPictureData.class
|
||||||
|
);
|
||||||
|
public static final XSSFRelation IMAGE_PICT = new XSSFRelation(
|
||||||
|
"image/pict",
|
||||||
|
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",
|
||||||
|
"/xl/media/image#.pict",
|
||||||
|
XSSFPictureData.class
|
||||||
|
);
|
||||||
|
public static final XSSFRelation IMAGE_JPEG = new XSSFRelation(
|
||||||
|
"image/jpeg",
|
||||||
|
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",
|
||||||
|
"/xl/media/image#.jpeg",
|
||||||
|
XSSFPictureData.class
|
||||||
|
);
|
||||||
|
public static final XSSFRelation IMAGE_PNG = new XSSFRelation(
|
||||||
|
"image/png",
|
||||||
|
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",
|
||||||
|
"/xl/media/image#.png",
|
||||||
|
XSSFPictureData.class
|
||||||
|
);
|
||||||
|
public static final XSSFRelation IMAGE_DIB = new XSSFRelation(
|
||||||
|
"image/dib",
|
||||||
|
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",
|
||||||
|
"/xl/media/image#.dib",
|
||||||
|
XSSFPictureData.class
|
||||||
|
);
|
||||||
|
|
||||||
|
public static final XSSFRelation SHEET_COMMENTS = new XSSFRelation(
|
||||||
"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml",
|
"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml",
|
||||||
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments",
|
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments",
|
||||||
"/xl/comments#.xml",
|
"/xl/comments#.xml",
|
||||||
@ -113,111 +147,54 @@ public final class XSSFRelation<W extends XSSFModel> extends POIXMLRelation {
|
|||||||
null,
|
null,
|
||||||
null
|
null
|
||||||
);
|
);
|
||||||
public static final XSSFRelation<BinaryPart> OLEEMBEDDINGS = create(
|
public static final XSSFRelation OLEEMBEDDINGS = new XSSFRelation(
|
||||||
null,
|
null,
|
||||||
POIXMLDocument.OLE_OBJECT_REL_TYPE,
|
POIXMLDocument.OLE_OBJECT_REL_TYPE,
|
||||||
null,
|
null,
|
||||||
BinaryPart.class
|
null
|
||||||
);
|
);
|
||||||
public static final XSSFRelation<BinaryPart> PACKEMBEDDINGS = create(
|
public static final XSSFRelation PACKEMBEDDINGS = new XSSFRelation(
|
||||||
null,
|
null,
|
||||||
POIXMLDocument.PACK_OBJECT_REL_TYPE,
|
POIXMLDocument.PACK_OBJECT_REL_TYPE,
|
||||||
null,
|
null,
|
||||||
BinaryPart.class
|
null
|
||||||
);
|
);
|
||||||
|
|
||||||
public static final XSSFRelation<BinaryPart> VBA_MACROS = create(
|
public static final XSSFRelation VBA_MACROS = new XSSFRelation(
|
||||||
"application/vnd.ms-office.vbaProject",
|
"application/vnd.ms-office.vbaProject",
|
||||||
"http://schemas.microsoft.com/office/2006/relationships/vbaProject",
|
"http://schemas.microsoft.com/office/2006/relationships/vbaProject",
|
||||||
"/xl/vbaProject.bin",
|
"/xl/vbaProject.bin",
|
||||||
BinaryPart.class
|
null
|
||||||
);
|
);
|
||||||
public static final XSSFRelation<Control> ACTIVEX_CONTROLS = create(
|
public static final XSSFRelation ACTIVEX_CONTROLS = new XSSFRelation(
|
||||||
"application/vnd.ms-office.activeX+xml",
|
"application/vnd.ms-office.activeX+xml",
|
||||||
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/control",
|
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/control",
|
||||||
"/xl/activeX/activeX#.xml",
|
"/xl/activeX/activeX#.xml",
|
||||||
Control.class
|
null
|
||||||
);
|
);
|
||||||
public static final XSSFRelation<BinaryPart> ACTIVEX_BINS = create(
|
public static final XSSFRelation ACTIVEX_BINS = new XSSFRelation(
|
||||||
"application/vnd.ms-office.activeX",
|
"application/vnd.ms-office.activeX",
|
||||||
"http://schemas.microsoft.com/office/2006/relationships/activeXControlBinary",
|
"http://schemas.microsoft.com/office/2006/relationships/activeXControlBinary",
|
||||||
"/xl/activeX/activeX#.bin",
|
"/xl/activeX/activeX#.bin",
|
||||||
BinaryPart.class
|
null
|
||||||
);
|
);
|
||||||
public static final XSSFRelation<ThemeTable> THEME = create(
|
public static final XSSFRelation THEME = new XSSFRelation(
|
||||||
"application/vnd.openxmlformats-officedocument.theme+xml",
|
"application/vnd.openxmlformats-officedocument.theme+xml",
|
||||||
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme",
|
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme",
|
||||||
"/xl/theme/theme#.xml",
|
"/xl/theme/theme#.xml",
|
||||||
ThemeTable.class
|
null
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
private static POILogger log = POILogFactory.getLogger(XSSFRelation.class);
|
|
||||||
|
private XSSFRelation(String type, String rel, String defaultName, Class<? extends POIXMLDocumentPart> cls) {
|
||||||
private static <R extends XSSFModel> XSSFRelation<R> create(String type, String rel, String defaultName, Class<R> cls) {
|
super(type, rel, defaultName, cls);
|
||||||
return new XSSFRelation<R>(type, rel, defaultName, cls);
|
|
||||||
|
if(cls != null && !_table.containsKey(rel)) _table.put(rel, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Constructor<W> _constructor;
|
|
||||||
private final boolean _constructorTakesTwoArgs;
|
|
||||||
|
|
||||||
private XSSFRelation(String type, String rel, String defaultName, Class<W> cls) {
|
|
||||||
super(type, rel, defaultName);
|
|
||||||
|
|
||||||
if (cls == null) {
|
/**
|
||||||
_constructor = null;
|
* Fetches the InputStream to read the contents, based
|
||||||
_constructorTakesTwoArgs = false;
|
|
||||||
} else {
|
|
||||||
Constructor<W> c;
|
|
||||||
boolean twoArg;
|
|
||||||
|
|
||||||
// Find the right constructor
|
|
||||||
try {
|
|
||||||
c = cls.getConstructor(InputStream.class, String.class);
|
|
||||||
twoArg = true;
|
|
||||||
} catch(NoSuchMethodException e) {
|
|
||||||
try {
|
|
||||||
c = cls.getConstructor(InputStream.class);
|
|
||||||
twoArg = false;
|
|
||||||
} catch(NoSuchMethodException e2) {
|
|
||||||
throw new RuntimeException(e2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_constructor = c;
|
|
||||||
_constructorTakesTwoArgs = twoArg;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Does one of these exist for the given core
|
|
||||||
* package part?
|
|
||||||
*/
|
|
||||||
public boolean exists(PackagePart corePart) throws InvalidFormatException {
|
|
||||||
if(corePart == null) {
|
|
||||||
// new file, can't exist
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
PackageRelationshipCollection prc =
|
|
||||||
corePart.getRelationshipsByType(_relation);
|
|
||||||
Iterator<PackageRelationship> it = prc.iterator();
|
|
||||||
return it.hasNext();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the filename for the nth one of these,
|
|
||||||
* eg /xl/comments4.xml
|
|
||||||
*/
|
|
||||||
public String getFileName(int index) {
|
|
||||||
if(_defaultName.indexOf("#") == -1) {
|
|
||||||
// Generic filename in all cases
|
|
||||||
return getDefaultFileName();
|
|
||||||
}
|
|
||||||
return _defaultName.replace("#", Integer.toString(index));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Fetches the InputStream to read the contents, based
|
|
||||||
* of the specified core part, for which we are defined
|
* of the specified core part, for which we are defined
|
||||||
* as a suitable relationship
|
* as a suitable relationship
|
||||||
*/
|
*/
|
||||||
@ -235,150 +212,16 @@ public final class XSSFRelation<W extends XSSFModel> extends POIXMLRelation {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Loads all the XSSFModels of this type which are
|
/**
|
||||||
* defined as relationships of the given parent part
|
* Get POIXMLRelation by relation type
|
||||||
*/
|
*
|
||||||
public List<W> loadAll(PackagePart parentPart) throws Exception {
|
* @param rel relation type, for example,
|
||||||
List<W> found = new ArrayList<W>();
|
* <code>http://schemas.openxmlformats.org/officeDocument/2006/relationships/image</code>
|
||||||
for(PackageRelationship rel : parentPart.getRelationshipsByType(_relation)) {
|
* @return registered POIXMLRelation or null if not found
|
||||||
PackagePart part = XSSFWorkbook.getTargetPart(parentPart.getPackage(), rel);
|
*/
|
||||||
found.add(create(part, rel));
|
public static XSSFRelation getInstance(String rel){
|
||||||
}
|
return _table.get(rel);
|
||||||
return found;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Load a single Model, which is defined as a suitable
|
|
||||||
* relationship from the specified core (parent)
|
|
||||||
* package part.
|
|
||||||
*/
|
|
||||||
public W load(PackagePart corePart) throws Exception {
|
|
||||||
PackageRelationshipCollection prc =
|
|
||||||
corePart.getRelationshipsByType(_relation);
|
|
||||||
Iterator<PackageRelationship> it = prc.iterator();
|
|
||||||
if(it.hasNext()) {
|
|
||||||
PackageRelationship rel = it.next();
|
|
||||||
PackagePartName relName = PackagingURIHelper.createPartName(rel.getTargetURI());
|
|
||||||
PackagePart part = corePart.getPackage().getPart(relName);
|
|
||||||
return create(part, rel);
|
|
||||||
} else {
|
|
||||||
log.log(POILogger.WARN, "No part " + _defaultName + " found");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Does the actual Model creation
|
|
||||||
*/
|
|
||||||
private W create(PackagePart thisPart, PackageRelationship rel)
|
|
||||||
throws IOException, InvalidFormatException {
|
|
||||||
|
|
||||||
if (_constructor == null) {
|
|
||||||
throw new IllegalStateException("Model class not set");
|
|
||||||
}
|
|
||||||
// Instantiate, if we can
|
|
||||||
InputStream inp = thisPart.getInputStream();
|
|
||||||
if (inp == null) {
|
|
||||||
return null; // TODO - is this valid?
|
|
||||||
}
|
|
||||||
Object[] args;
|
|
||||||
if (_constructorTakesTwoArgs) {
|
|
||||||
args = new Object[] { inp, rel.getId(), };
|
|
||||||
} else {
|
|
||||||
args = new Object[] { inp, };
|
|
||||||
}
|
|
||||||
W result;
|
|
||||||
try {
|
|
||||||
try {
|
|
||||||
result = _constructor.newInstance(args);
|
|
||||||
} catch (IllegalArgumentException e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
} catch (InstantiationException e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
} catch (IllegalAccessException e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
} catch (InvocationTargetException e) {
|
|
||||||
Throwable t = e.getTargetException();
|
|
||||||
if (t instanceof IOException) {
|
|
||||||
throw (IOException)t;
|
|
||||||
}
|
|
||||||
if (t instanceof RuntimeException) {
|
|
||||||
throw (RuntimeException)t;
|
|
||||||
}
|
|
||||||
throw new RuntimeException(t);
|
|
||||||
}
|
|
||||||
} finally {
|
|
||||||
inp.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Do children, if required
|
|
||||||
if(result instanceof XSSFChildContainingModel) {
|
|
||||||
XSSFChildContainingModel ccm =
|
|
||||||
(XSSFChildContainingModel)result;
|
|
||||||
for(String relType : ccm.getChildrenRelationshipTypes()) {
|
|
||||||
for(PackageRelationship cRel : thisPart.getRelationshipsByType(relType)) {
|
|
||||||
PackagePart childPart = XSSFWorkbook.getTargetPart(thisPart.getPackage(), cRel);
|
|
||||||
ccm.generateChild(childPart, cRel.getId());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Save, with the default name
|
|
||||||
* @return The internal reference ID it was saved at, normally then used as an r:id
|
|
||||||
*/
|
|
||||||
protected String save(XSSFWritableModel model, PackagePart corePart) throws IOException {
|
|
||||||
return save(model, corePart, _defaultName);
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* Save, with the name generated by the given index
|
|
||||||
* @return The internal reference ID it was saved at, normally then used as an r:id
|
|
||||||
*/
|
|
||||||
protected String save(XSSFWritableModel model, PackagePart corePart, int index) throws IOException {
|
|
||||||
return save(model, corePart, getFileName(index));
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* Save, with the specified name
|
|
||||||
* @return The internal reference ID it was saved at, normally then used as an r:id
|
|
||||||
*/
|
|
||||||
protected String save(XSSFWritableModel model, PackagePart corePart, String name) throws IOException {
|
|
||||||
PackagePartName ppName = null;
|
|
||||||
try {
|
|
||||||
ppName = PackagingURIHelper.createPartName(name);
|
|
||||||
} catch(InvalidFormatException e) {
|
|
||||||
throw new IllegalStateException("Can't create part with name " + name + " for " + model, e);
|
|
||||||
}
|
|
||||||
PackageRelationship rel =
|
|
||||||
corePart.addRelationship(ppName, TargetMode.INTERNAL, _relation);
|
|
||||||
PackagePart part = corePart.getPackage().createPart(ppName, _type);
|
|
||||||
|
|
||||||
OutputStream out = part.getOutputStream();
|
|
||||||
model.writeTo(out);
|
|
||||||
out.close();
|
|
||||||
|
|
||||||
// Do children, if required
|
|
||||||
if(model instanceof XSSFChildContainingModel) {
|
|
||||||
XSSFChildContainingModel ccm =
|
|
||||||
(XSSFChildContainingModel)model;
|
|
||||||
// Loop over each child, writing it out
|
|
||||||
int numChildren = ccm.getNumberOfChildren();
|
|
||||||
for(int i=0; i<numChildren; i++) {
|
|
||||||
XSSFChildContainingModel.WritableChild child =
|
|
||||||
ccm.getChildForWriting(i);
|
|
||||||
child.getRelation().save(
|
|
||||||
child.getModel(),
|
|
||||||
part,
|
|
||||||
(i+1)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return rel.getId();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -22,13 +22,11 @@ import java.io.OutputStream;
|
|||||||
import java.util.*;
|
import java.util.*;
|
||||||
import javax.xml.namespace.QName;
|
import javax.xml.namespace.QName;
|
||||||
|
|
||||||
import org.apache.poi.hssf.usermodel.HSSFPrintSetup;
|
|
||||||
import org.apache.poi.hssf.util.PaneInformation;
|
import org.apache.poi.hssf.util.PaneInformation;
|
||||||
import org.apache.poi.ss.usermodel.CellStyle;
|
import org.apache.poi.ss.usermodel.CellStyle;
|
||||||
import org.apache.poi.ss.usermodel.CommentsSource;
|
import org.apache.poi.ss.usermodel.CommentsSource;
|
||||||
import org.apache.poi.ss.usermodel.Footer;
|
import org.apache.poi.ss.usermodel.Footer;
|
||||||
import org.apache.poi.ss.usermodel.Header;
|
import org.apache.poi.ss.usermodel.Header;
|
||||||
import org.apache.poi.ss.usermodel.PrintSetup;
|
|
||||||
import org.apache.poi.ss.usermodel.Row;
|
import org.apache.poi.ss.usermodel.Row;
|
||||||
import org.apache.poi.ss.usermodel.Sheet;
|
import org.apache.poi.ss.usermodel.Sheet;
|
||||||
import org.apache.poi.ss.util.CellRangeAddress;
|
import org.apache.poi.ss.util.CellRangeAddress;
|
||||||
@ -71,10 +69,6 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet {
|
|||||||
protected CommentsSource sheetComments;
|
protected CommentsSource sheetComments;
|
||||||
protected CTMergeCells ctMergeCells;
|
protected CTMergeCells ctMergeCells;
|
||||||
|
|
||||||
|
|
||||||
protected List<Control> controls;
|
|
||||||
|
|
||||||
|
|
||||||
public static final short LeftMargin = 0;
|
public static final short LeftMargin = 0;
|
||||||
public static final short RightMargin = 1;
|
public static final short RightMargin = 1;
|
||||||
public static final short TopMargin = 2;
|
public static final short TopMargin = 2;
|
||||||
@ -167,7 +161,7 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet {
|
|||||||
|
|
||||||
public List<Control> getControls()
|
public List<Control> getControls()
|
||||||
{
|
{
|
||||||
return controls;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -267,7 +261,7 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet {
|
|||||||
if(ctDrawing == null) {
|
if(ctDrawing == null) {
|
||||||
//drawingNumber = #drawings.size() + 1
|
//drawingNumber = #drawings.size() + 1
|
||||||
int drawingNumber = getPackagePart().getPackage().getPartsByRelationshipType(XSSFRelation.DRAWINGS.getRelation()).size() + 1;
|
int drawingNumber = getPackagePart().getPackage().getPartsByRelationshipType(XSSFRelation.DRAWINGS.getRelation()).size() + 1;
|
||||||
drawing = (XSSFDrawing)createRelationship(XSSFRelation.DRAWINGS, XSSFDrawing.class, drawingNumber);
|
drawing = (XSSFDrawing)createRelationship(XSSFRelation.DRAWINGS, XSSFFactory.getInstance(), drawingNumber);
|
||||||
String relId = drawing.getPackageRelationship().getId();
|
String relId = drawing.getPackageRelationship().getId();
|
||||||
|
|
||||||
//add CT_Drawing element which indicates that this sheet contains drawing components built on the drawingML platform.
|
//add CT_Drawing element which indicates that this sheet contains drawing components built on the drawingML platform.
|
||||||
@ -632,7 +626,7 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet {
|
|||||||
public short getLeftCol() {
|
public short getLeftCol() {
|
||||||
String cellRef = worksheet.getSheetViews().getSheetViewArray(0).getTopLeftCell();
|
String cellRef = worksheet.getSheetViews().getSheetViewArray(0).getTopLeftCell();
|
||||||
CellReference cellReference = new CellReference(cellRef);
|
CellReference cellReference = new CellReference(cellRef);
|
||||||
return (short)cellReference.getCol();
|
return cellReference.getCol();
|
||||||
}
|
}
|
||||||
|
|
||||||
public double getMargin(short margin) {
|
public double getMargin(short margin) {
|
||||||
@ -1220,8 +1214,8 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet {
|
|||||||
* @see #setZoom(int)
|
* @see #setZoom(int)
|
||||||
*/
|
*/
|
||||||
public void setZoom(int numerator, int denominator) {
|
public void setZoom(int numerator, int denominator) {
|
||||||
Float result = new Float(numerator)/new Float(denominator)*100;
|
int zoom = 100*numerator/denominator;
|
||||||
setZoom(result.intValue());
|
setZoom(zoom);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1368,7 +1362,7 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet {
|
|||||||
|
|
||||||
public void ungroupRow(int fromRow, int toRow) {
|
public void ungroupRow(int fromRow, int toRow) {
|
||||||
for(int i=fromRow;i<=toRow;i++){
|
for(int i=fromRow;i<=toRow;i++){
|
||||||
XSSFRow xrow=(XSSFRow)getRow(i-1);
|
XSSFRow xrow=getRow(i-1);
|
||||||
if(xrow!=null){
|
if(xrow!=null){
|
||||||
CTRow ctrow=xrow.getCTRow();
|
CTRow ctrow=xrow.getCTRow();
|
||||||
short outlinelevel=ctrow.getOutlineLevel();
|
short outlinelevel=ctrow.getOutlineLevel();
|
||||||
@ -1384,12 +1378,12 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet {
|
|||||||
|
|
||||||
private void setSheetFormatPrOutlineLevelRow(){
|
private void setSheetFormatPrOutlineLevelRow(){
|
||||||
short maxLevelRow=getMaxOutlineLevelRows();
|
short maxLevelRow=getMaxOutlineLevelRows();
|
||||||
getSheetTypeSheetFormatPr().setOutlineLevelRow((short)(maxLevelRow));
|
getSheetTypeSheetFormatPr().setOutlineLevelRow(maxLevelRow);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setSheetFormatPrOutlineLevelCol(){
|
private void setSheetFormatPrOutlineLevelCol(){
|
||||||
short maxLevelCol=getMaxOutlineLevelCols();
|
short maxLevelCol=getMaxOutlineLevelCols();
|
||||||
getSheetTypeSheetFormatPr().setOutlineLevelCol((short)(maxLevelCol));
|
getSheetTypeSheetFormatPr().setOutlineLevelCol(maxLevelCol);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected CTSheetViews getSheetTypeSheetViews() {
|
protected CTSheetViews getSheetTypeSheetViews() {
|
||||||
@ -1519,7 +1513,7 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet {
|
|||||||
|
|
||||||
private CommentsSource getComments() {
|
private CommentsSource getComments() {
|
||||||
if (sheetComments == null) {
|
if (sheetComments == null) {
|
||||||
sheetComments = (CommentsTable)createRelationship(XSSFRelation.SHEET_COMMENTS, CommentsTable.class, (int)sheet.getSheetId());
|
sheetComments = (CommentsTable)createRelationship(XSSFRelation.SHEET_COMMENTS, XSSFFactory.getInstance(), (int)sheet.getSheetId());
|
||||||
}
|
}
|
||||||
return sheetComments;
|
return sheetComments;
|
||||||
}
|
}
|
||||||
|
@ -19,14 +19,10 @@ package org.apache.poi.xssf.usermodel;
|
|||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
import java.io.InputStream;
|
|
||||||
import java.io.ByteArrayInputStream;
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import javax.xml.namespace.QName;
|
import javax.xml.namespace.QName;
|
||||||
import org.apache.poi.POIXMLDocument;
|
import org.apache.poi.POIXMLDocument;
|
||||||
import org.apache.poi.POIXMLDocumentPart;
|
import org.apache.poi.POIXMLDocumentPart;
|
||||||
import org.apache.poi.ss.usermodel.Palette;
|
|
||||||
import org.apache.poi.ss.usermodel.PictureData;
|
|
||||||
import org.apache.poi.ss.usermodel.Row;
|
import org.apache.poi.ss.usermodel.Row;
|
||||||
import org.apache.poi.ss.usermodel.Sheet;
|
import org.apache.poi.ss.usermodel.Sheet;
|
||||||
import org.apache.poi.ss.usermodel.Workbook;
|
import org.apache.poi.ss.usermodel.Workbook;
|
||||||
@ -34,12 +30,10 @@ import org.apache.poi.ss.usermodel.Row.MissingCellPolicy;
|
|||||||
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.util.PackageHelper;
|
import org.apache.poi.util.PackageHelper;
|
||||||
import org.apache.poi.util.IOUtils;
|
|
||||||
import org.apache.poi.xssf.model.*;
|
import org.apache.poi.xssf.model.*;
|
||||||
import org.apache.poi.POIXMLException;
|
import org.apache.poi.POIXMLException;
|
||||||
import org.apache.xmlbeans.XmlObject;
|
import org.apache.xmlbeans.XmlObject;
|
||||||
import org.apache.xmlbeans.XmlOptions;
|
import org.apache.xmlbeans.XmlOptions;
|
||||||
import org.openxml4j.exceptions.InvalidFormatException;
|
|
||||||
import org.openxml4j.exceptions.OpenXML4JException;
|
import org.openxml4j.exceptions.OpenXML4JException;
|
||||||
import org.openxml4j.opc.*;
|
import org.openxml4j.opc.*;
|
||||||
import org.openxml4j.opc.Package;
|
import org.openxml4j.opc.Package;
|
||||||
@ -131,7 +125,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
|
|||||||
public XSSFWorkbook(Package pkg) throws IOException {
|
public XSSFWorkbook(Package pkg) throws IOException {
|
||||||
super();
|
super();
|
||||||
if(pkg.getPackageAccess() == PackageAccess.READ){
|
if(pkg.getPackageAccess() == PackageAccess.READ){
|
||||||
//current implementation of OpenXML4J is funny.
|
//YK: current implementation of OpenXML4J is funny.
|
||||||
//Packages opened by Package.open(InputStream is) are read-only,
|
//Packages opened by Package.open(InputStream is) are read-only,
|
||||||
//there is no way to change or even save such an instance in a OutputStream.
|
//there is no way to change or even save such an instance in a OutputStream.
|
||||||
//The workaround is to create a copy via a temp file
|
//The workaround is to create a copy via a temp file
|
||||||
@ -155,7 +149,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
//build the POIXMLDocumentPart tree, this workbook is the root
|
//build the POIXMLDocumentPart tree, this workbook is the root
|
||||||
read(new XSSFFactory());
|
read(XSSFFactory.getInstance());
|
||||||
|
|
||||||
PackagePart corePart = getCorePart();
|
PackagePart corePart = getCorePart();
|
||||||
|
|
||||||
@ -202,7 +196,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
|
|||||||
|
|
||||||
if(sharedStringSource == null) {
|
if(sharedStringSource == null) {
|
||||||
//Create SST if it is missing
|
//Create SST if it is missing
|
||||||
sharedStringSource = (SharedStringsTable)createRelationship(XSSFRelation.SHARED_STRINGS, SharedStringsTable.class);
|
sharedStringSource = (SharedStringsTable)createRelationship(XSSFRelation.SHARED_STRINGS, XSSFFactory.getInstance());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Process the named ranges
|
// Process the named ranges
|
||||||
@ -240,8 +234,8 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
|
|||||||
bv.setActiveTab(0);
|
bv.setActiveTab(0);
|
||||||
workbook.addNewSheets();
|
workbook.addNewSheets();
|
||||||
|
|
||||||
sharedStringSource = (SharedStringsTable)createRelationship(XSSFRelation.SHARED_STRINGS, SharedStringsTable.class);
|
sharedStringSource = (SharedStringsTable)createRelationship(XSSFRelation.SHARED_STRINGS, XSSFFactory.getInstance());
|
||||||
stylesSource = (StylesTable)createRelationship(XSSFRelation.STYLES, StylesTable.class);
|
stylesSource = (StylesTable)createRelationship(XSSFRelation.STYLES, XSSFFactory.getInstance());
|
||||||
|
|
||||||
namedRanges = new LinkedList<XSSFName>();
|
namedRanges = new LinkedList<XSSFName>();
|
||||||
sheets = new LinkedList<XSSFSheet>();
|
sheets = new LinkedList<XSSFSheet>();
|
||||||
@ -273,7 +267,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
|
|||||||
*/
|
*/
|
||||||
public int addPicture(byte[] pictureData, int format) {
|
public int addPicture(byte[] pictureData, int format) {
|
||||||
int imageNumber = getAllPictures().size() + 1;
|
int imageNumber = getAllPictures().size() + 1;
|
||||||
XSSFPictureData img = (XSSFPictureData)createRelationship(XSSFPictureData.RELATIONS[format], XSSFPictureData.class, imageNumber, true);
|
XSSFPictureData img = (XSSFPictureData)createRelationship(XSSFPictureData.RELATIONS[format], XSSFFactory.getInstance(), imageNumber, true);
|
||||||
try {
|
try {
|
||||||
OutputStream out = img.getPackagePart().getOutputStream();
|
OutputStream out = img.getPackagePart().getOutputStream();
|
||||||
out.write(pictureData);
|
out.write(pictureData);
|
||||||
@ -392,7 +386,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
|
|||||||
throw new IllegalArgumentException( "The workbook already contains a sheet of this name" );
|
throw new IllegalArgumentException( "The workbook already contains a sheet of this name" );
|
||||||
|
|
||||||
int sheetNumber = getNumberOfSheets() + 1;
|
int sheetNumber = getNumberOfSheets() + 1;
|
||||||
XSSFSheet wrapper = (XSSFSheet)createRelationship(XSSFRelation.WORKSHEET, XSSFSheet.class, sheetNumber);
|
XSSFSheet wrapper = (XSSFSheet)createRelationship(XSSFRelation.WORKSHEET, XSSFFactory.getInstance(), sheetNumber);
|
||||||
|
|
||||||
CTSheet sheet = addSheet(sheetname);
|
CTSheet sheet = addSheet(sheetname);
|
||||||
wrapper.sheet = sheet;
|
wrapper.sheet = sheet;
|
||||||
@ -496,11 +490,6 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
|
|||||||
return stylesSource.getStyleAt(idx);
|
return stylesSource.getStyleAt(idx);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Palette getCustomPalette() {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the font at the given index number
|
* Get the font at the given index number
|
||||||
*
|
*
|
||||||
@ -508,7 +497,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
|
|||||||
* @return XSSFFont at the index
|
* @return XSSFFont at the index
|
||||||
*/
|
*/
|
||||||
public XSSFFont getFontAt(short idx) {
|
public XSSFFont getFontAt(short idx) {
|
||||||
return (XSSFFont)stylesSource.getFontAt(idx);
|
return stylesSource.getFontAt(idx);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user