Browse Source

use workbook's xssf factory

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1894174 13f79535-47bb-0310-9956-ffa450edef68
tags/REL_5_2_0
PJ Fanning 2 years ago
parent
commit
88ebe095dc

+ 2
- 1
poi-ooxml/src/main/java/org/apache/poi/xssf/model/StylesTable.java View File

public void ensureThemesTable() { public void ensureThemesTable() {
if (theme != null) return; if (theme != null) return;


setTheme((ThemesTable)workbook.createRelationship(XSSFRelation.THEME, XSSFFactory.getInstance()));
XSSFFactory factory = workbook == null ? XSSFFactory.getInstance() : workbook.getXssfFactory();
setTheme((ThemesTable)workbook.createRelationship(XSSFRelation.THEME, factory));
} }


/** /**

+ 4
- 3
poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFDrawing.java View File

} }


protected RelationPart createChartRelationPart() { protected RelationPart createChartRelationPart() {
XSSFWorkbook wb = getSheet().getWorkbook();
XSSFFactory factory = wb == null ? XSSFFactory.getInstance() : wb.getXssfFactory();
int chartNumber = getPackagePart().getPackage().getPartsByContentType(XSSFRelation.CHART.getContentType()) int chartNumber = getPackagePart().getPackage().getPartsByContentType(XSSFRelation.CHART.getContentType())
.size() + 1; .size() + 1;


return createRelationship(XSSFRelation.CHART, XSSFFactory.getInstance(), chartNumber, false);
return createRelationship(XSSFRelation.CHART, factory, chartNumber, false);
} }


/** /**
* {@link XSSFWorkbook#getAllPictures()} . * {@link XSSFWorkbook#getAllPictures()} .
*/ */
protected PackageRelationship addPictureReference(int pictureIndex) { protected PackageRelationship addPictureReference(int pictureIndex) {
XSSFWorkbook wb = (XSSFWorkbook) getParent().getParent();
XSSFPictureData data = wb.getAllPictures().get(pictureIndex);
XSSFPictureData data = getSheet().getWorkbook().getAllPictures().get(pictureIndex);
XSSFPictureData pic = new XSSFPictureData(data.getPackagePart()); XSSFPictureData pic = new XSSFPictureData(data.getPackagePart());
RelationPart rp = addRelation(null, XSSFRelation.IMAGES, pic); RelationPart rp = addRelation(null, XSSFRelation.IMAGES, pic);
return rp.getRelationship(); return rp.getRelationship();

+ 8
- 8
poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFSheet.java View File

// Default drawingNumber = #drawings.size() + 1 // Default drawingNumber = #drawings.size() + 1
int drawingNumber = getPackagePart().getPackage().getPartsByContentType(XSSFRelation.DRAWINGS.getContentType()).size() + 1; int drawingNumber = getPackagePart().getPackage().getPartsByContentType(XSSFRelation.DRAWINGS.getContentType()).size() + 1;
drawingNumber = getNextPartNumber(XSSFRelation.DRAWINGS, drawingNumber); drawingNumber = getNextPartNumber(XSSFRelation.DRAWINGS, drawingNumber);
RelationPart rp = createRelationship(XSSFRelation.DRAWINGS, XSSFFactory.getInstance(), drawingNumber, false);
RelationPart rp = createRelationship(XSSFRelation.DRAWINGS, getWorkbook().getXssfFactory(), drawingNumber, false);
XSSFDrawing drawing = rp.getDocumentPart(); XSSFDrawing drawing = rp.getDocumentPart();
String relId = rp.getRelationship().getId(); String relId = rp.getRelationship().getId();


if(autoCreate) { if(autoCreate) {
int drawingNumber = getNextPartNumber(XSSFRelation.VML_DRAWINGS, int drawingNumber = getNextPartNumber(XSSFRelation.VML_DRAWINGS,
getPackagePart().getPackage().getPartsByContentType(XSSFRelation.VML_DRAWINGS.getContentType()).size()); getPackagePart().getPackage().getPartsByContentType(XSSFRelation.VML_DRAWINGS.getContentType()).size());
RelationPart rp = createRelationship(XSSFRelation.VML_DRAWINGS, XSSFFactory.getInstance(), drawingNumber, false);
RelationPart rp = createRelationship(XSSFRelation.VML_DRAWINGS, getWorkbook().getXssfFactory(), drawingNumber, false);
drawing = rp.getDocumentPart(); drawing = rp.getDocumentPart();
String relId = rp.getRelationship().getId(); String relId = rp.getRelationship().getId();


// the sheet has (i.e. sheet 1 -> comments 1) // the sheet has (i.e. sheet 1 -> comments 1)
try { try {
sheetComments = (CommentsTable)createRelationship( sheetComments = (CommentsTable)createRelationship(
XSSFRelation.SHEET_COMMENTS, XSSFFactory.getInstance(), Math.toIntExact(sheet.getSheetId()));
XSSFRelation.SHEET_COMMENTS, getWorkbook().getXssfFactory(), Math.toIntExact(sheet.getSheetId()));
} catch(PartAlreadyExistsException e) { } catch(PartAlreadyExistsException e) {
// Technically a sheet doesn't need the same number as // Technically a sheet doesn't need the same number as
// it's comments, and clearly someone has already pinched // it's comments, and clearly someone has already pinched
// our number! Go for the next available one instead // our number! Go for the next available one instead
sheetComments = (CommentsTable)createRelationship( sheetComments = (CommentsTable)createRelationship(
XSSFRelation.SHEET_COMMENTS, XSSFFactory.getInstance(), -1);
XSSFRelation.SHEET_COMMENTS, getWorkbook().getXssfFactory(), -1);
} }
} }
return sheetComments; return sheetComments;
} }
} }


RelationPart rp = createRelationship(XSSFRelation.TABLE, XSSFFactory.getInstance(), tableNumber, false);
RelationPart rp = createRelationship(XSSFRelation.TABLE, getWorkbook().getXssfFactory(), tableNumber, false);
XSSFTable table = rp.getDocumentPart(); XSSFTable table = rp.getDocumentPart();
tbl.setId(rp.getRelationship().getId()); tbl.setId(rp.getRelationship().getId());
table.getCTTable().setId(tableNumber); table.getCTTable().setId(tableNumber);
int tableId = getWorkbook().getPivotTables().size()+1; int tableId = getWorkbook().getPivotTables().size()+1;
//Create relationship between pivotTable and the worksheet //Create relationship between pivotTable and the worksheet
XSSFPivotTable pivotTable = (XSSFPivotTable) createRelationship(XSSFRelation.PIVOT_TABLE, XSSFPivotTable pivotTable = (XSSFPivotTable) createRelationship(XSSFRelation.PIVOT_TABLE,
XSSFFactory.getInstance(), tableId);
getWorkbook().getXssfFactory(), tableId);
pivotTable.setParentSheet(this); pivotTable.setParentSheet(this);
pivotTables.add(pivotTable); pivotTables.add(pivotTable);
XSSFWorkbook workbook = getWorkbook(); XSSFWorkbook workbook = getWorkbook();


//Create relationship between the pivot cache defintion and the workbook //Create relationship between the pivot cache defintion and the workbook
XSSFPivotCacheDefinition pivotCacheDefinition = (XSSFPivotCacheDefinition) workbook. XSSFPivotCacheDefinition pivotCacheDefinition = (XSSFPivotCacheDefinition) workbook.
createRelationship(XSSFRelation.PIVOT_CACHE_DEFINITION, XSSFFactory.getInstance(), tableId);
createRelationship(XSSFRelation.PIVOT_CACHE_DEFINITION, getWorkbook().getXssfFactory(), tableId);
String rId = workbook.getRelationId(pivotCacheDefinition); String rId = workbook.getRelationId(pivotCacheDefinition);
//Create relationship between pivotTable and pivotCacheDefinition without creating a new instance //Create relationship between pivotTable and pivotCacheDefinition without creating a new instance
PackagePart pivotPackagePart = pivotTable.getPackagePart(); PackagePart pivotPackagePart = pivotTable.getPackagePart();


//Create relationship between pivotcacherecord and pivotcachedefinition //Create relationship between pivotcacherecord and pivotcachedefinition
XSSFPivotCacheRecords pivotCacheRecords = (XSSFPivotCacheRecords) pivotCacheDefinition. XSSFPivotCacheRecords pivotCacheRecords = (XSSFPivotCacheRecords) pivotCacheDefinition.
createRelationship(XSSFRelation.PIVOT_CACHE_RECORDS, XSSFFactory.getInstance(), tableId);
createRelationship(XSSFRelation.PIVOT_CACHE_RECORDS, getWorkbook().getXssfFactory(), tableId);


//Set relationships id for pivotCacheDefinition to pivotCacheRecords //Set relationships id for pivotCacheDefinition to pivotCacheRecords
pivotTable.getPivotCacheDefinition().getCTPivotCacheDefinition().setId(pivotCacheDefinition.getRelationId(pivotCacheRecords)); pivotTable.getPivotCacheDefinition().getCTPivotCacheDefinition().setId(pivotCacheDefinition.getRelationId(pivotCacheRecords));

+ 1
- 1
poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFSignatureLine.java View File

XSSFVMLDrawing vml = sheet.getVMLDrawing(false); XSSFVMLDrawing vml = sheet.getVMLDrawing(false);
POIXMLRelation xtype = mapType(type); POIXMLRelation xtype = mapType(type);
int idx = wb.getNextPartNumber(xtype, -1); int idx = wb.getNextPartNumber(xtype, -1);
POIXMLDocumentPart.RelationPart rp = vml.createRelationship(xtype, XSSFFactory.getInstance(), idx, false);
POIXMLDocumentPart.RelationPart rp = vml.createRelationship(xtype, wb.getXssfFactory(), idx, false);
POIXMLDocumentPart dp = rp.getDocumentPart(); POIXMLDocumentPart dp = rp.getDocumentPart();
try (OutputStream out = dp.getPackagePart().getOutputStream()) { try (OutputStream out = dp.getPackagePart().getOutputStream()) {
out.write(image); out.write(image);

+ 9
- 1
poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java View File

this(part.getInputStream()); this(part.getInputStream());
} }


/**
* @return the XSSFFactory
* @since POI 5.1.0
*/
public XSSFFactory getXssfFactory() {
return xssfFactory;
}

protected void beforeDocumentRead() { protected void beforeDocumentRead() {
// Ensure it isn't a XLSB file, which we don't support // Ensure it isn't a XLSB file, which we don't support
if (getCorePart().getContentType().equals(XSSFRelation.XLSB_BINARY_WORKBOOK.getContentType())) { if (getCorePart().getContentType().equals(XSSFRelation.XLSB_BINARY_WORKBOOK.getContentType())) {
if (!getCreationHelper().getReferencedWorkbooks().containsKey(name)){ if (!getCreationHelper().getReferencedWorkbooks().containsKey(name)){
externalLinkIdx = this.getNextPartNumber(XSSFRelation.EXTERNAL_LINKS, externalLinkIdx = this.getNextPartNumber(XSSFRelation.EXTERNAL_LINKS,
this.getPackagePart().getPackage().getPartsByContentType(XSSFRelation.EXTERNAL_LINKS.getContentType()).size()); this.getPackagePart().getPackage().getPartsByContentType(XSSFRelation.EXTERNAL_LINKS.getContentType()).size());
POIXMLDocumentPart.RelationPart rp = this.createRelationship(XSSFRelation.EXTERNAL_LINKS, XSSFFactory.getInstance(), externalLinkIdx, false);
POIXMLDocumentPart.RelationPart rp = this.createRelationship(XSSFRelation.EXTERNAL_LINKS, xssfFactory, externalLinkIdx, false);
ExternalLinksTable linksTable = rp.getDocumentPart(); ExternalLinksTable linksTable = rp.getDocumentPart();
linksTable.setLinkedFileName(name); linksTable.setLinkedFileName(name);
this.getExternalLinksTable().add(linksTable); this.getExternalLinksTable().add(linksTable);

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

b1 = sheet.getRow(0).getCell(1); b1 = sheet.getRow(0).getCell(1);
assertEquals(2.0, a1.getNumericCellValue()); assertEquals(2.0, a1.getNumericCellValue());
assertEquals("#REF!+3*$A$1", b1.getCellFormula()); assertEquals("#REF!+3*$A$1", b1.getCellFormula());
try (FileOutputStream fos = new FileOutputStream("abc.xlsx")) {
wb1.write(fos);
}
} }
} }



Loading…
Cancel
Save