git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1594721 13f79535-47bb-0310-9956-ffa450edef68pull/10/head
@@ -148,6 +148,9 @@ public class POIXMLProperties { | |||
xmlOptions.setSaveSuggestedPrefixes(map); | |||
OutputStream out = extPart.getOutputStream(); | |||
if (extPart.getSize() > 0) { | |||
extPart.clear(); | |||
} | |||
ext.props.save(out, xmlOptions); | |||
out.close(); | |||
} |
@@ -599,7 +599,10 @@ public abstract class OPCPackage implements RelationshipSource, Closeable { | |||
throw new IllegalArgumentException("relationshipType"); | |||
ArrayList<PackagePart> retArr = new ArrayList<PackagePart>(); | |||
for (PackageRelationship rel : getRelationshipsByType(relationshipType)) { | |||
retArr.add(getPart(rel)); | |||
PackagePart part = getPart(rel); | |||
if (part != null) { | |||
retArr.add(part); | |||
} | |||
} | |||
return retArr; | |||
} |
@@ -37,7 +37,6 @@ import org.apache.poi.openxml4j.opc.internal.MemoryPackagePart; | |||
import org.apache.poi.openxml4j.opc.internal.PartMarshaller; | |||
import org.apache.poi.openxml4j.opc.internal.ZipContentTypeManager; | |||
import org.apache.poi.openxml4j.opc.internal.ZipHelper; | |||
import org.apache.poi.openxml4j.opc.internal.marshallers.ZipPackagePropertiesMarshaller; | |||
import org.apache.poi.openxml4j.opc.internal.marshallers.ZipPartMarshaller; | |||
import org.apache.poi.openxml4j.util.ZipEntrySource; | |||
import org.apache.poi.openxml4j.util.ZipFileZipEntrySource; | |||
@@ -444,9 +443,8 @@ public final class ZipPackage extends Package { | |||
this.getPartsByRelationshipType(PackageRelationshipTypes.CORE_PROPERTIES_ECMA376).size() == 0 ) { | |||
logger.log(POILogger.DEBUG,"Save core properties part"); | |||
// We have to save the core properties part ... | |||
new ZipPackagePropertiesMarshaller().marshall( | |||
this.packageProperties, zos); | |||
// Add core properties to part list ... | |||
addPackagePart(this.packageProperties); | |||
// ... and to add its relationship ... | |||
this.relationships.addRelationship(this.packageProperties | |||
.getPartName().getURI(), TargetMode.INTERNAL, |
@@ -321,13 +321,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X | |||
} | |||
// Process the named ranges | |||
namedRanges = new ArrayList<XSSFName>(); | |||
if(workbook.isSetDefinedNames()) { | |||
for(CTDefinedName ctName : workbook.getDefinedNames().getDefinedNameArray()) { | |||
namedRanges.add(new XSSFName(ctName, this)); | |||
} | |||
} | |||
reprocessNamedRanges(); | |||
} catch (XmlException e) { | |||
throw new POIXMLException(e); | |||
} | |||
@@ -1307,13 +1301,28 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X | |||
i++; | |||
} | |||
names.setDefinedNameArray(nr); | |||
if(workbook.isSetDefinedNames()) { | |||
workbook.unsetDefinedNames(); | |||
} | |||
workbook.setDefinedNames(names); | |||
// Re-process the named ranges | |||
reprocessNamedRanges(); | |||
} else { | |||
if(workbook.isSetDefinedNames()) { | |||
workbook.unsetDefinedNames(); | |||
} | |||
} | |||
} | |||
private void reprocessNamedRanges() { | |||
namedRanges = new ArrayList<XSSFName>(); | |||
if(workbook.isSetDefinedNames()) { | |||
for(CTDefinedName ctName : workbook.getDefinedNames().getDefinedNameList()) { | |||
namedRanges.add(new XSSFName(ctName, this)); | |||
} | |||
} | |||
} | |||
private void saveCalculationChain(){ | |||
if(calcChain != null){ |
@@ -17,10 +17,12 @@ | |||
package org.apache.poi.xssf.usermodel; | |||
import static org.hamcrest.core.IsEqual.equalTo; | |||
import static org.junit.Assert.assertEquals; | |||
import static org.junit.Assert.assertFalse; | |||
import static org.junit.Assert.assertNotNull; | |||
import static org.junit.Assert.assertNull; | |||
import static org.junit.Assert.assertThat; | |||
import static org.junit.Assert.assertTrue; | |||
import static org.junit.Assert.fail; | |||
@@ -60,6 +62,7 @@ import org.apache.poi.ss.usermodel.Sheet; | |||
import org.apache.poi.ss.usermodel.Workbook; | |||
import org.apache.poi.ss.usermodel.WorkbookFactory; | |||
import org.apache.poi.ss.util.AreaReference; | |||
import org.apache.poi.ss.util.CellRangeAddress; | |||
import org.apache.poi.ss.util.CellReference; | |||
import org.apache.poi.xssf.XSSFITestDataProvider; | |||
import org.apache.poi.xssf.XSSFTestDataSamples; | |||
@@ -1464,4 +1467,23 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues { | |||
double rounded = cv.getNumberValue(); | |||
assertEquals(0.1, rounded, 0.0); | |||
} | |||
@Test | |||
public void bug56468() throws Exception { | |||
XSSFWorkbook wb = new XSSFWorkbook(); | |||
XSSFSheet sheet = wb.createSheet(); | |||
XSSFRow row = sheet.createRow(0); | |||
XSSFCell cell = row.createCell(0); | |||
cell.setCellValue("Hi"); | |||
sheet.setRepeatingRows(new CellRangeAddress(0, 0, 0, 0)); | |||
ByteArrayOutputStream bos = new ByteArrayOutputStream(8096); | |||
wb.write(bos); | |||
byte firstSave[] = bos.toByteArray(); | |||
bos.reset(); | |||
wb.write(bos); | |||
byte secondSave[] = bos.toByteArray(); | |||
assertThat(firstSave, equalTo(secondSave)); | |||
} | |||
} |