You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ni...@apache.org on 2008/07/30 00:02:09 UTC
svn commit: r680857 - in /poi/branches/ooxml/src/ooxml:
java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java
testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java
Author: nick
Date: Tue Jul 29 15:02:09 2008
New Revision: 680857
URL: http://svn.apache.org/viewvc?rev=680857&view=rev
Log:
Improved .xlsm support - still not quite there though
Modified:
poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java
poi/branches/ooxml/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java
Modified: poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java?rev=680857&r1=680856&r2=680857&view=diff
==============================================================================
--- poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java (original)
+++ poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java Tue Jul 29 15:02:09 2008
@@ -80,6 +80,12 @@
"/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 @@
return rel.getId();
}
}
+
+ /** Are we a normal workbook, or a macro enabled one? */
+ private boolean isMacroEnabled = false;
private CTWorkbook workbook;
@@ -288,6 +297,10 @@
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 @@
}
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 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 @@
}
}
- // 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
Modified: poi/branches/ooxml/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java?rev=680857&r1=680856&r2=680857&view=diff
==============================================================================
--- poi/branches/ooxml/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java (original)
+++ poi/branches/ooxml/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java Tue Jul 29 15:02:09 2008
@@ -20,6 +20,7 @@
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
+import java.io.FileOutputStream;
import junit.framework.TestCase;
@@ -85,6 +86,7 @@
Package pkg = Package.open(getFilePath("45431.xlsm"));
XSSFWorkbook wb = new XSSFWorkbook(pkg);
+ // Check the various macro related bits can be found
PackagePart vba = pkg.getPart(
PackagingURIHelper.createPartName("/xl/vbaProject.bin")
);
@@ -106,6 +108,10 @@
);
assertNotNull(vba);
+ FileOutputStream fout = new FileOutputStream("/tmp/foo.xlsm");
+ nwb.write(fout);
+ fout.close();
+
// For testing with excel
// FileOutputStream fout = new FileOutputStream("/tmp/foo.xlsm");
// nwb.write(fout);
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org