removed temporary fix for compatibility with Mac Excel 2008 Sp2
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@802539 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
4a1aba8ff8
commit
31161f94db
@ -74,36 +74,5 @@
|
|||||||
older HSSF supported (.xls) binary files.
|
older HSSF supported (.xls) binary files.
|
||||||
</p>
|
</p>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
|
||||||
<title>Compatibility of POI-generated .xlsx files with MS Office 2008 for Mac SP2</title>
|
|
||||||
<p>
|
|
||||||
Office 2008 for Mac SP2 version 12.2.0 introduced a serious bug causing some Open XML files to fail to open.
|
|
||||||
This bug is affecting Open XML files from a variety of sources including the Apache POI project.
|
|
||||||
The Apache POI project adjusted the XSSF module to produce "MS-compatible OOXML" by setting the Application extended property to "Microsoft Excel". This will allow users to produce OOXML documents that will work with Office 2008 for Mac SP2.
|
|
||||||
Please see <link href="https://issues.apache.org/bugzilla/show_bug.cgi?id=47559">Bugzilla 47559</link> for more information.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Users are advised to patch existing .xlsx files by the following code:
|
|
||||||
</p>
|
|
||||||
<source>
|
|
||||||
XSSFWorkbook wb = new XSSFWorkbook(path);
|
|
||||||
|
|
||||||
POIXMLProperties.ExtendedProperties ext = wb.getProperties().getExtendedProperties();
|
|
||||||
expProps.getUnderlyingProperties().setApplication("Microsoft Excel");
|
|
||||||
|
|
||||||
FileOutputStream out = new FileOutputStream(path);
|
|
||||||
wb.write(out);
|
|
||||||
out.close();
|
|
||||||
</source>
|
|
||||||
<p>To unset the Application property use the following code:</p>
|
|
||||||
<source>
|
|
||||||
POIXMLProperties.ExtendedProperties ext = workbook.getProperties().getExtendedProperties();
|
|
||||||
expProps.getUnderlyingProperties().unsetApplication();
|
|
||||||
</source>
|
|
||||||
<warning>
|
|
||||||
This is an effective workaround for a short-term bug which is likely to be removed in future versions of POI,
|
|
||||||
when Microsoft returns to compliance with the standard. The proper value for Apache POI created documents would to be "Apache POI" and not "Microsoft Excel".
|
|
||||||
</warning>
|
|
||||||
</section>
|
|
||||||
</body>
|
</body>
|
||||||
</document>
|
</document>
|
||||||
|
@ -28,6 +28,7 @@ import org.apache.poi.openxml4j.exceptions.OpenXML4JException;
|
|||||||
import org.apache.poi.openxml4j.opc.*;
|
import org.apache.poi.openxml4j.opc.*;
|
||||||
|
|
||||||
public abstract class POIXMLDocument extends POIXMLDocumentPart{
|
public abstract class POIXMLDocument extends POIXMLDocumentPart{
|
||||||
|
public static final String DOCUMENT_CREATOR = "Apache POI";
|
||||||
|
|
||||||
public static final String CORE_PROPERTIES_REL_TYPE = "http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties";
|
public static final String CORE_PROPERTIES_REL_TYPE = "http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties";
|
||||||
public static final String EXTENDED_PROPERTIES_REL_TYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties";
|
public static final String EXTENDED_PROPERTIES_REL_TYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties";
|
||||||
|
@ -229,9 +229,8 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
|
|||||||
bv.setActiveTab(0);
|
bv.setActiveTab(0);
|
||||||
workbook.addNewSheets();
|
workbook.addNewSheets();
|
||||||
|
|
||||||
//required by Excel 2008 Mac sp2, see Bugzilla #47559
|
|
||||||
POIXMLProperties.ExtendedProperties expProps = getProperties().getExtendedProperties();
|
POIXMLProperties.ExtendedProperties expProps = getProperties().getExtendedProperties();
|
||||||
expProps.getUnderlyingProperties().setApplication("Microsoft Excel");
|
expProps.getUnderlyingProperties().setApplication(DOCUMENT_CREATOR);
|
||||||
|
|
||||||
sharedStringSource = (SharedStringsTable)createRelationship(XSSFRelation.SHARED_STRINGS, XSSFFactory.getInstance());
|
sharedStringSource = (SharedStringsTable)createRelationship(XSSFRelation.SHARED_STRINGS, XSSFFactory.getInstance());
|
||||||
stylesSource = (StylesTable)createRelationship(XSSFRelation.STYLES, XSSFFactory.getInstance());
|
stylesSource = (StylesTable)createRelationship(XSSFRelation.STYLES, XSSFFactory.getInstance());
|
||||||
@ -253,7 +252,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
|
|||||||
// Create main document part
|
// Create main document part
|
||||||
pkg.createPart(corePartName, XSSFRelation.WORKBOOK.getContentType());
|
pkg.createPart(corePartName, XSSFRelation.WORKBOOK.getContentType());
|
||||||
|
|
||||||
pkg.getPackageProperties().setCreatorProperty("Apache POI");
|
pkg.getPackageProperties().setCreatorProperty(DOCUMENT_CREATOR);
|
||||||
|
|
||||||
return pkg;
|
return pkg;
|
||||||
} catch (Exception e){
|
} catch (Exception e){
|
||||||
|
@ -169,7 +169,7 @@ public class XWPFDocument extends POIXMLDocument {
|
|||||||
// Create main document part
|
// Create main document part
|
||||||
pkg.createPart(corePartName, XWPFRelation.DOCUMENT.getContentType());
|
pkg.createPart(corePartName, XWPFRelation.DOCUMENT.getContentType());
|
||||||
|
|
||||||
pkg.getPackageProperties().setCreatorProperty("Apache POI");
|
pkg.getPackageProperties().setCreatorProperty(DOCUMENT_CREATOR);
|
||||||
|
|
||||||
return pkg;
|
return pkg;
|
||||||
} catch (Exception e){
|
} catch (Exception e){
|
||||||
@ -190,7 +190,7 @@ public class XWPFDocument extends POIXMLDocument {
|
|||||||
ctDocument.addNewBody();
|
ctDocument.addNewBody();
|
||||||
|
|
||||||
POIXMLProperties.ExtendedProperties expProps = getProperties().getExtendedProperties();
|
POIXMLProperties.ExtendedProperties expProps = getProperties().getExtendedProperties();
|
||||||
expProps.getUnderlyingProperties().setApplication("Microsoft Office Word");
|
expProps.getUnderlyingProperties().setApplication(DOCUMENT_CREATOR);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -261,7 +261,7 @@ public final class TestXSSFWorkbook extends BaseTestWorkbook {
|
|||||||
POIXMLProperties props = workbook.getProperties();
|
POIXMLProperties props = workbook.getProperties();
|
||||||
assertNotNull(props);
|
assertNotNull(props);
|
||||||
//the Application property must be set for new workbooks, see Bugzilla #47559
|
//the Application property must be set for new workbooks, see Bugzilla #47559
|
||||||
assertEquals("Microsoft Excel", props.getExtendedProperties().getUnderlyingProperties().getApplication());
|
assertEquals("Apache POI", props.getExtendedProperties().getUnderlyingProperties().getApplication());
|
||||||
|
|
||||||
PackagePropertiesPart opcProps = props.getCoreProperties().getUnderlyingProperties();
|
PackagePropertiesPart opcProps = props.getCoreProperties().getUnderlyingProperties();
|
||||||
assertNotNull(opcProps);
|
assertNotNull(opcProps);
|
||||||
@ -271,7 +271,7 @@ public final class TestXSSFWorkbook extends BaseTestWorkbook {
|
|||||||
opcProps.setCreatorProperty("poi-dev@poi.apache.org");
|
opcProps.setCreatorProperty("poi-dev@poi.apache.org");
|
||||||
|
|
||||||
workbook = XSSFTestDataSamples.writeOutAndReadBack(workbook);
|
workbook = XSSFTestDataSamples.writeOutAndReadBack(workbook);
|
||||||
assertEquals("Microsoft Excel", workbook.getProperties().getExtendedProperties().getUnderlyingProperties().getApplication());
|
assertEquals("Apache POI", workbook.getProperties().getExtendedProperties().getUnderlyingProperties().getApplication());
|
||||||
opcProps = workbook.getProperties().getCoreProperties().getUnderlyingProperties();
|
opcProps = workbook.getProperties().getCoreProperties().getUnderlyingProperties();
|
||||||
assertEquals("Testing Bugzilla #47460", opcProps.getTitleProperty().getValue());
|
assertEquals("Testing Bugzilla #47460", opcProps.getTitleProperty().getValue());
|
||||||
assertEquals("poi-dev@poi.apache.org", opcProps.getCreatorProperty().getValue());
|
assertEquals("poi-dev@poi.apache.org", opcProps.getCreatorProperty().getValue());
|
||||||
|
@ -125,7 +125,7 @@ public class TestXWPFDocument extends TestCase {
|
|||||||
XWPFDocument doc = new XWPFDocument();
|
XWPFDocument doc = new XWPFDocument();
|
||||||
POIXMLProperties props = doc.getProperties();
|
POIXMLProperties props = doc.getProperties();
|
||||||
assertNotNull(props);
|
assertNotNull(props);
|
||||||
assertEquals("Microsoft Office Word", props.getExtendedProperties().getUnderlyingProperties().getApplication());
|
assertEquals("Apache POI", props.getExtendedProperties().getUnderlyingProperties().getApplication());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user