aboutsummaryrefslogtreecommitdiffstats
path: root/src/ooxml/java/org/apache
diff options
context:
space:
mode:
authorNick Burch <nick@apache.org>2008-07-29 22:02:09 +0000
committerNick Burch <nick@apache.org>2008-07-29 22:02:09 +0000
commitd7f86f111f19e5c02622a3e1b9ecfe1c7790c0d8 (patch)
tree84055b3eaf191b5225a8ea098e63b6c99f46ea79 /src/ooxml/java/org/apache
parentc033eb633a5604ac0b2fab9c805b05ba1f21c419 (diff)
downloadpoi-d7f86f111f19e5c02622a3e1b9ecfe1c7790c0d8.tar.gz
poi-d7f86f111f19e5c02622a3e1b9ecfe1c7790c0d8.zip
Improved .xlsm support - still not quite there though
git-svn-id: https://svn.apache.org/repos/asf/poi/branches/ooxml@680857 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/ooxml/java/org/apache')
-rw-r--r--src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java50
1 files changed, 39 insertions, 11 deletions
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 c98135d585..3c395264ec 100644
--- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java
+++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java
@@ -80,6 +80,12 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook {
"/xl/workbook.xml",
null
);
+ public static final XSSFRelation MACROS_WORKBOOK = new XSSFRelation(
+ "application/vnd.ms-excel.sheet.macroEnabled.main+xml",
+ "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument",
+ "/xl/workbook.xml",
+ null
+ );
public static final XSSFRelation WORKSHEET = new XSSFRelation(
"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml",
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet",
@@ -254,6 +260,9 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook {
return rel.getId();
}
}
+
+ /** Are we a normal workbook, or a macro enabled one? */
+ private boolean isMacroEnabled = false;
private CTWorkbook workbook;
@@ -288,6 +297,10 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook {
WorkbookDocument doc = WorkbookDocument.Factory.parse(getCorePart().getInputStream());
this.workbook = doc.getWorkbook();
+ // Are we macro enabled, or just normal?
+ isMacroEnabled =
+ getCorePart().getContentType().equals(MACROS_WORKBOOK.getContentType());
+
try {
// Load shared strings
this.sharedStringSource = (SharedStringSource)
@@ -659,6 +672,14 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook {
}
return sr;
}
+
+ /**
+ * Are we a normal workbook (.xlsx), or a
+ * macro enabled workbook (.xlsm)?
+ */
+ public boolean isMacroEnabled() {
+ return isMacroEnabled;
+ }
public void insertChartRecord() {
// TODO Auto-generated method stub
@@ -764,16 +785,21 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook {
}
public void write(OutputStream stream) throws IOException {
+ // What kind of workbook are we?
+ XSSFRelation workbookRelation = WORKBOOK;
+ if(isMacroEnabled) {
+ workbookRelation = MACROS_WORKBOOK;
+ }
try {
// Create a package referring the temp file.
Package pkg = Package.create(stream);
// Main part
- PackagePartName corePartName = PackagingURIHelper.createPartName("/xl/workbook.xml");
+ PackagePartName corePartName = PackagingURIHelper.createPartName(workbookRelation.getDefaultFileName());
// Create main part relationship
pkg.addRelationship(corePartName, TargetMode.INTERNAL, PackageRelationshipTypes.CORE_DOCUMENT, "rId1");
// Create main document part
- PackagePart corePart = pkg.createPart(corePartName, WORKBOOK.getContentType());
+ PackagePart corePart = pkg.createPart(corePartName, workbookRelation.getContentType());
OutputStream out;
XmlOptions xmlOptions = new XmlOptions();
@@ -840,15 +866,17 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook {
}
}
- // VBA Macros
- if(VBA_MACROS.exists( getCorePart() )) {
- // Copy over
- try {
- XSSFModel vba = VBA_MACROS.load(getCorePart());
- VBA_MACROS.save(vba, corePart);
- } catch(Exception e) {
- throw new RuntimeException("Unable to copy vba macros over", e);
- }
+ // Macro related bits
+ if(isMacroEnabled) {
+ // Copy VBA Macros if present
+ if(VBA_MACROS.exists( getCorePart() )) {
+ try {
+ XSSFModel vba = VBA_MACROS.load(getCorePart());
+ VBA_MACROS.save(vba, corePart);
+ } catch(Exception e) {
+ throw new RuntimeException("Unable to copy vba macros over", e);
+ }
+ }
}
// Now we can write out the main Workbook, with