Browse Source

[bug-66675] fix issue with writing xlsx (core properties being added twice)

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1910949 13f79535-47bb-0310-9956-ffa450edef68
tags/REL_5_2_4
PJ Fanning 10 months ago
parent
commit
e1bb2a73c8

+ 5
- 1
poi-ooxml/src/main/java/org/apache/poi/openxml4j/opc/OPCPackage.java View File

@@ -940,7 +940,7 @@ public abstract class OPCPackage implements RelationshipSource, Closeable {
throw new IllegalArgumentException("part");
}

if (partList.containsKey(part._partName)) {
if (hasPackagePart(part)) {
if (!partList.get(part._partName).isDeleted()) {
throw new InvalidOperationException(
"A part with the name '"
@@ -958,6 +958,10 @@ public abstract class OPCPackage implements RelationshipSource, Closeable {
return part;
}

protected boolean hasPackagePart(PackagePart part) {
return partList.containsKey(part._partName);
}

/**
* Remove the specified part in this package. If this part is relationship
* part, then delete all relationships in the source part.

+ 3
- 1
poi-ooxml/src/main/java/org/apache/poi/openxml4j/opc/ZipPackage.java View File

@@ -542,7 +542,9 @@ public final class ZipPackage extends OPCPackage {
// Ensure that core properties are added if missing
getPackageProperties();
// Add core properties to part list ...
addPackagePart(this.packageProperties);
if (!hasPackagePart(this.packageProperties)) {
addPackagePart(this.packageProperties);
}
// ... and to add its relationship ...
this.relationships.addRelationship(this.packageProperties
.getPartName().getURI(), TargetMode.INTERNAL,

+ 17
- 0
poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/TestXSSFBugs.java View File

@@ -3864,6 +3864,23 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
}
}

@Test
void testBug66675() throws Exception {
try (XSSFWorkbook wb = openSampleWorkbook("bug66675.xlsx")) {
POIXMLProperties.CoreProperties coreProperties = wb.getProperties().getCoreProperties();
assertNotNull(coreProperties);
wb.removeSheetAt(0);
try (UnsynchronizedByteArrayOutputStream bos = UnsynchronizedByteArrayOutputStream.builder().get()) {
wb.write(bos);
try (XSSFWorkbook wb2 = new XSSFWorkbook(bos.toInputStream())) {
XSSFSheet sheet = wb2.getSheetAt(0);
assertNotNull(sheet);
assertNotNull(wb2.getProperties().getCoreProperties());
}
}
}
}

private static void readByCommonsCompress(File temp_excel_poi) throws IOException {
/* read by commons-compress*/
try (ZipFile zipFile = new ZipFile(temp_excel_poi)) {

BIN
test-data/spreadsheet/bug66675.xlsx View File


Loading…
Cancel
Save