浏览代码

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
tags/REL_3_5-FINAL
Yegor Kozlov 15 年前
父节点
当前提交
58f32a32b5

+ 0
- 31
src/documentation/content/xdocs/spreadsheet/index.xml 查看文件

@@ -74,36 +74,5 @@
older HSSF supported (.xls) binary files.
</p>
</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>
</document>

+ 1
- 0
src/ooxml/java/org/apache/poi/POIXMLDocument.java 查看文件

@@ -28,6 +28,7 @@ import org.apache.poi.openxml4j.exceptions.OpenXML4JException;
import org.apache.poi.openxml4j.opc.*;

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 EXTENDED_PROPERTIES_REL_TYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties";

+ 2
- 3
src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java 查看文件

@@ -229,9 +229,8 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
bv.setActiveTab(0);
workbook.addNewSheets();

//required by Excel 2008 Mac sp2, see Bugzilla #47559
POIXMLProperties.ExtendedProperties expProps = getProperties().getExtendedProperties();
expProps.getUnderlyingProperties().setApplication("Microsoft Excel");
expProps.getUnderlyingProperties().setApplication(DOCUMENT_CREATOR);

sharedStringSource = (SharedStringsTable)createRelationship(XSSFRelation.SHARED_STRINGS, 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
pkg.createPart(corePartName, XSSFRelation.WORKBOOK.getContentType());

pkg.getPackageProperties().setCreatorProperty("Apache POI");
pkg.getPackageProperties().setCreatorProperty(DOCUMENT_CREATOR);

return pkg;
} catch (Exception e){

+ 2
- 2
src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java 查看文件

@@ -169,7 +169,7 @@ public class XWPFDocument extends POIXMLDocument {
// Create main document part
pkg.createPart(corePartName, XWPFRelation.DOCUMENT.getContentType());

pkg.getPackageProperties().setCreatorProperty("Apache POI");
pkg.getPackageProperties().setCreatorProperty(DOCUMENT_CREATOR);

return pkg;
} catch (Exception e){
@@ -190,7 +190,7 @@ public class XWPFDocument extends POIXMLDocument {
ctDocument.addNewBody();

POIXMLProperties.ExtendedProperties expProps = getProperties().getExtendedProperties();
expProps.getUnderlyingProperties().setApplication("Microsoft Office Word");
expProps.getUnderlyingProperties().setApplication(DOCUMENT_CREATOR);
}

/**

+ 2
- 2
src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java 查看文件

@@ -261,7 +261,7 @@ public final class TestXSSFWorkbook extends BaseTestWorkbook {
POIXMLProperties props = workbook.getProperties();
assertNotNull(props);
//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();
assertNotNull(opcProps);
@@ -271,7 +271,7 @@ public final class TestXSSFWorkbook extends BaseTestWorkbook {
opcProps.setCreatorProperty("poi-dev@poi.apache.org");

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();
assertEquals("Testing Bugzilla #47460", opcProps.getTitleProperty().getValue());
assertEquals("poi-dev@poi.apache.org", opcProps.getCreatorProperty().getValue());

+ 1
- 1
src/ooxml/testcases/org/apache/poi/xwpf/TestXWPFDocument.java 查看文件

@@ -125,7 +125,7 @@ public class TestXWPFDocument extends TestCase {
XWPFDocument doc = new XWPFDocument();
POIXMLProperties props = doc.getProperties();
assertNotNull(props);
assertEquals("Microsoft Office Word", props.getExtendedProperties().getUnderlyingProperties().getApplication());
assertEquals("Apache POI", props.getExtendedProperties().getUnderlyingProperties().getApplication());
}

}

正在加载...
取消
保存