aboutsummaryrefslogtreecommitdiffstats
path: root/src/ooxml
diff options
context:
space:
mode:
authorYegor Kozlov <yegor@apache.org>2008-09-25 06:51:18 +0000
committerYegor Kozlov <yegor@apache.org>2008-09-25 06:51:18 +0000
commit75b8b893e520dc6c32f3bca1298841531abf3f25 (patch)
tree18fde0ca3372775dd9959367603dadb7964281e6 /src/ooxml
parent2c8ea83f9d76f579bdd13e05d6342bfcd5ffe9c1 (diff)
downloadpoi-75b8b893e520dc6c32f3bca1298841531abf3f25.tar.gz
poi-75b8b893e520dc6c32f3bca1298841531abf3f25.zip
misc ooxml improvements:"
1. preserve themes across read-write 2. properly set default properties of a new worksheet git-svn-id: https://svn.apache.org/repos/asf/poi/branches/ooxml@698838 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/ooxml')
-rw-r--r--src/ooxml/java/org/apache/poi/xssf/model/StylesTable.java8
-rwxr-xr-xsrc/ooxml/java/org/apache/poi/xssf/model/ThemeTable.java67
-rw-r--r--src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java2
-rw-r--r--src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFDialogsheet.java155
-rw-r--r--src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRelation.java16
-rw-r--r--src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRow.java10
-rw-r--r--src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java44
-rw-r--r--src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java77
-rw-r--r--src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java10
-rw-r--r--src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java2
10 files changed, 239 insertions, 152 deletions
diff --git a/src/ooxml/java/org/apache/poi/xssf/model/StylesTable.java b/src/ooxml/java/org/apache/poi/xssf/model/StylesTable.java
index b0afb9b705..2e8dc12b79 100644
--- a/src/ooxml/java/org/apache/poi/xssf/model/StylesTable.java
+++ b/src/ooxml/java/org/apache/poi/xssf/model/StylesTable.java
@@ -178,7 +178,7 @@ public class StylesTable implements StylesSource, XSSFModel {
return putFont((XSSFFont)font, fonts);
}
- public CellStyle getStyleAt(long idx) {
+ public XSSFCellStyle getStyleAt(long idx) {
int styleXfId = 0;
// 0 is the empty default
@@ -378,15 +378,16 @@ public class StylesTable implements StylesSource, XSSFModel {
}
+
private void initialize() {
+ //CTFont ctFont = createDefaultFont();
XSSFFont xssfFont = createDefaultFont();
fonts.add(xssfFont.getCTFont());
CTFill[] ctFill = createDefaultFills();
fills.add(ctFill[0]);
-/*
fills.add(ctFill[1]);
-*/
+
CTBorder ctBorder = createDefaultBorder();
borders.add(ctBorder);
@@ -415,6 +416,7 @@ public class StylesTable implements StylesSource, XSSFModel {
return ctBorder;
}
+
private CTFill[] createDefaultFills() {
CTFill[] ctFill = new CTFill[]{CTFill.Factory.newInstance(),CTFill.Factory.newInstance()};
ctFill[0].addNewPatternFill().setPatternType(STPatternType.NONE);
diff --git a/src/ooxml/java/org/apache/poi/xssf/model/ThemeTable.java b/src/ooxml/java/org/apache/poi/xssf/model/ThemeTable.java
new file mode 100755
index 0000000000..1a641d8fe1
--- /dev/null
+++ b/src/ooxml/java/org/apache/poi/xssf/model/ThemeTable.java
@@ -0,0 +1,67 @@
+package org.apache.poi.xssf.model;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+/* ====================================================================
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+==================================================================== */
+import org.apache.xmlbeans.XmlException;
+import org.apache.xmlbeans.XmlOptions;
+import org.openxmlformats.schemas.drawingml.x2006.main.*;
+
+/**
+ * An instance of this part type contains information about a document's theme, which is a combination of color
+ * scheme, font scheme, and format scheme (the latter also being referred to as effects).
+ * For a SpreadsheetML document, the choice of theme affects the color and style of cell contents and charts,
+ * among other things.
+ *
+ * @author Yegor Kozlov
+ */
+public class ThemeTable implements XSSFModel {
+ private ThemeDocument doc;
+ private String originalId;
+
+ public ThemeTable(InputStream is, String originalId) throws IOException {
+ readFrom(is);
+ this.originalId = originalId;
+ }
+
+ public String getOriginalId() {
+ return this.originalId;
+ }
+
+ public ThemeTable() {
+ this.doc = ThemeDocument.Factory.newInstance();
+ }
+
+ public void readFrom(InputStream is) throws IOException {
+ try {
+ doc = ThemeDocument.Factory.parse(is);
+ } catch (XmlException e) {
+ throw new IOException(e.getLocalizedMessage());
+ }
+ }
+
+ public void writeTo(OutputStream out) throws IOException {
+ XmlOptions options = new XmlOptions();
+ options.setSaveOuter();
+ options.setUseDefaultNamespace();
+
+ doc.save(out, options);
+ }
+
+} \ No newline at end of file
diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java
index 29e2f0876a..a027686621 100644
--- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java
+++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java
@@ -110,7 +110,7 @@ public final class XSSFCell implements Cell {
return row.getRowNum();
}
- public CellStyle getCellStyle() {
+ public XSSFCellStyle getCellStyle() {
// Zero is the empty default
if(this.cell.getS() > 0) {
return stylesSource.getStyleAt(this.cell.getS());
diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFDialogsheet.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFDialogsheet.java
index a211d93b57..7ce6c000e2 100644
--- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFDialogsheet.java
+++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFDialogsheet.java
@@ -19,89 +19,80 @@ package org.apache.poi.xssf.usermodel;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTDialogsheet;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTHeaderFooter;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTPageBreak;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTPageMargins;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTPrintOptions;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheet;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheetFormatPr;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheetPr;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheetProtection;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheetViews;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.*;
public class XSSFDialogsheet extends XSSFSheet implements Sheet{
- public XSSFDialogsheet(CTSheet sheet, CTDialogsheet dialogsheet,
- XSSFWorkbook workbook) {
- super(sheet, null, workbook);
- this.worksheet = null;
- this.dialogsheet = dialogsheet;
- if (this.dialogsheet == null) {
- this.dialogsheet = CTDialogsheet.Factory.newInstance();
- }
- }
-
- public XSSFRow createRow(int rowNum) {
- return null;
- }
-
- protected CTHeaderFooter getSheetTypeHeaderFooter() {
- if (dialogsheet.getHeaderFooter() == null) {
- dialogsheet.setHeaderFooter(CTHeaderFooter.Factory.newInstance());
- }
- return dialogsheet.getHeaderFooter();
- }
-
- protected CTSheetPr getSheetTypeSheetPr() {
- if (dialogsheet.getSheetPr() == null) {
- dialogsheet.setSheetPr(CTSheetPr.Factory.newInstance());
- }
- return dialogsheet.getSheetPr();
- }
-
- protected CTPageBreak getSheetTypeColumnBreaks() {
- return null;
- }
-
- protected CTSheetFormatPr getSheetTypeSheetFormatPr() {
- if (dialogsheet.getSheetFormatPr() == null) {
- dialogsheet.setSheetFormatPr(CTSheetFormatPr.Factory.newInstance());
- }
- return dialogsheet.getSheetFormatPr();
- }
-
- protected CTPageMargins getSheetTypePageMargins() {
- if (dialogsheet.getPageMargins() == null) {
- dialogsheet.setPageMargins(CTPageMargins.Factory.newInstance());
- }
- return dialogsheet.getPageMargins();
- }
-
- protected CTPageBreak getSheetTypeRowBreaks() {
- return null;
- }
-
- protected CTSheetViews getSheetTypeSheetViews() {
- if (dialogsheet.getSheetViews() == null) {
- dialogsheet.setSheetViews(CTSheetViews.Factory.newInstance());
- dialogsheet.getSheetViews().addNewSheetView();
- }
- return dialogsheet.getSheetViews();
- }
-
- protected CTPrintOptions getSheetTypePrintOptions() {
- if (dialogsheet.getPrintOptions() == null) {
- dialogsheet.setPrintOptions(CTPrintOptions.Factory.newInstance());
- }
- return dialogsheet.getPrintOptions();
- }
-
- protected CTSheetProtection getSheetTypeProtection() {
- if (dialogsheet.getSheetProtection() == null) {
- dialogsheet.setSheetProtection(CTSheetProtection.Factory.newInstance());
- }
- return dialogsheet.getSheetProtection();
- }
-
+ public XSSFDialogsheet(CTSheet sheet, CTDialogsheet dialogsheet,
+ XSSFWorkbook workbook) {
+ super(sheet, CTWorksheet.Factory.newInstance(), workbook);
+ this.worksheet = null;
+ this.dialogsheet = dialogsheet;
+ if (this.dialogsheet == null) {
+ this.dialogsheet = CTDialogsheet.Factory.newInstance();
+ }
+ }
+
+ public XSSFRow createRow(int rowNum) {
+ return null;
+ }
+
+ protected CTHeaderFooter getSheetTypeHeaderFooter() {
+ if (dialogsheet.getHeaderFooter() == null) {
+ dialogsheet.setHeaderFooter(CTHeaderFooter.Factory.newInstance());
+ }
+ return dialogsheet.getHeaderFooter();
+ }
+
+ protected CTSheetPr getSheetTypeSheetPr() {
+ if (dialogsheet.getSheetPr() == null) {
+ dialogsheet.setSheetPr(CTSheetPr.Factory.newInstance());
+ }
+ return dialogsheet.getSheetPr();
+ }
+
+ protected CTPageBreak getSheetTypeColumnBreaks() {
+ return null;
+ }
+
+ protected CTSheetFormatPr getSheetTypeSheetFormatPr() {
+ if (dialogsheet.getSheetFormatPr() == null) {
+ dialogsheet.setSheetFormatPr(CTSheetFormatPr.Factory.newInstance());
+ }
+ return dialogsheet.getSheetFormatPr();
+ }
+
+ protected CTPageMargins getSheetTypePageMargins() {
+ if (dialogsheet.getPageMargins() == null) {
+ dialogsheet.setPageMargins(CTPageMargins.Factory.newInstance());
+ }
+ return dialogsheet.getPageMargins();
+ }
+
+ protected CTPageBreak getSheetTypeRowBreaks() {
+ return null;
+ }
+
+ protected CTSheetViews getSheetTypeSheetViews() {
+ if (dialogsheet.getSheetViews() == null) {
+ dialogsheet.setSheetViews(CTSheetViews.Factory.newInstance());
+ dialogsheet.getSheetViews().addNewSheetView();
+ }
+ return dialogsheet.getSheetViews();
+ }
+
+ protected CTPrintOptions getSheetTypePrintOptions() {
+ if (dialogsheet.getPrintOptions() == null) {
+ dialogsheet.setPrintOptions(CTPrintOptions.Factory.newInstance());
+ }
+ return dialogsheet.getPrintOptions();
+ }
+
+ protected CTSheetProtection getSheetTypeProtection() {
+ if (dialogsheet.getSheetProtection() == null) {
+ dialogsheet.setSheetProtection(CTSheetProtection.Factory.newInstance());
+ }
+ return dialogsheet.getSheetProtection();
+ }
+
}
diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRelation.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRelation.java
index a638c85af6..2a1ca52ad3 100644
--- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRelation.java
+++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRelation.java
@@ -13,15 +13,7 @@ import java.util.Iterator;
import org.apache.poi.POIXMLDocument;
import org.apache.poi.util.POILogFactory;
import org.apache.poi.util.POILogger;
-import org.apache.poi.xssf.model.BinaryPart;
-import org.apache.poi.xssf.model.CommentsTable;
-import org.apache.poi.xssf.model.Control;
-import org.apache.poi.xssf.model.Drawing;
-import org.apache.poi.xssf.model.SharedStringsTable;
-import org.apache.poi.xssf.model.StylesTable;
-import org.apache.poi.xssf.model.XSSFChildContainingModel;
-import org.apache.poi.xssf.model.XSSFModel;
-import org.apache.poi.xssf.model.XSSFWritableModel;
+import org.apache.poi.xssf.model.*;
import org.openxml4j.exceptions.InvalidFormatException;
import org.openxml4j.opc.PackagePart;
import org.openxml4j.opc.PackagePartName;
@@ -122,6 +114,12 @@ public class XSSFRelation {
"/xl/activeX/activeX#.bin",
BinaryPart.class
);
+ public static final XSSFRelation THEME = new XSSFRelation(
+ "application/vnd.openxmlformats-officedocument.theme+xml",
+ "http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme",
+ "/xl/theme/theme#.xml",
+ ThemeTable.class
+ );
private static POILogger log = POILogFactory.getLogger(XSSFRelation.class);
diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRow.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRow.java
index ba97b8e083..ebe69964b9 100644
--- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRow.java
+++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRow.java
@@ -129,12 +129,12 @@ public class XSSFRow implements Row {
return xcell;
}
- private Cell retrieveCell(int cellnum) {
+ private XSSFCell retrieveCell(int cellnum) {
Iterator<Cell> it = cellIterator();
for ( ; it.hasNext() ; ) {
Cell cell = it.next();
if (cell.getCellNum() == cellnum) {
- return cell;
+ return (XSSFCell)cell;
}
}
return null;
@@ -145,7 +145,7 @@ public class XSSFRow implements Row {
* with the {@link MissingCellPolicy} from the
* parent Workbook.
*/
- public Cell getCell(int cellnum) {
+ public XSSFCell getCell(int cellnum) {
return getCell(cellnum, sheet.getWorkbook().getMissingCellPolicy());
}
@@ -153,8 +153,8 @@ public class XSSFRow implements Row {
* Returns the cell at the given (0 based) index,
* with the specified {@link MissingCellPolicy}
*/
- public Cell getCell(int cellnum, MissingCellPolicy policy) {
- Cell cell = retrieveCell(cellnum);
+ public XSSFCell getCell(int cellnum, MissingCellPolicy policy) {
+ XSSFCell cell = retrieveCell(cellnum);
if(policy == RETURN_NULL_AND_BLANK) {
return cell;
}
diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java
index 5165a4d630..dc95e74175 100644
--- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java
+++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java
@@ -128,23 +128,20 @@ public class XSSFSheet implements Sheet {
this.workbook = workbook;
this.sheet = sheet;
this.worksheet = worksheet;
- if (this.worksheet == null) {
- this.worksheet = CTWorksheet.Factory.newInstance();
- }
+
if (this.worksheet.getSheetData() == null) {
this.worksheet.addNewSheetData();
}
- //CTSheetView sheetView = getSheetTypeSheetView();
- //sheetView.setWorkbookViewId(0);
+
initRows(this.worksheet);
initColumns(this.worksheet);
-
+
hyperlinks = new ArrayList<XSSFHyperlink>();
}
public XSSFSheet(XSSFWorkbook workbook) {
this.workbook = workbook;
-
+
hyperlinks = new ArrayList<XSSFHyperlink>();
}
@@ -153,6 +150,35 @@ public class XSSFSheet implements Sheet {
}
/**
+ * Create a new CTWorksheet instance and setup default values
+ *
+ * @return a new instance
+ */
+ protected static CTWorksheet newSheetInstance(){
+ CTWorksheet worksheet = CTWorksheet.Factory.newInstance();
+ CTSheetFormatPr ctFormat = worksheet.addNewSheetFormatPr();
+ ctFormat.setDefaultRowHeight(15.0);
+
+ CTSheetView ctView = worksheet.addNewSheetViews().addNewSheetView();
+ ctView.setTabSelected(true);
+ ctView.setWorkbookViewId(0);
+
+ worksheet.addNewDimension().setRef("A1");
+
+ worksheet.addNewSheetData();
+
+ CTPageMargins ctMargins = worksheet.addNewPageMargins();
+ ctMargins.setBottom(0.75);
+ ctMargins.setFooter(0.3);
+ ctMargins.setHeader(0.3);
+ ctMargins.setLeft(0.7);
+ ctMargins.setRight(0.7);
+ ctMargins.setTop(0.75);
+
+ return worksheet;
+ }
+
+ /**
* Tweaks the CTWorksheet to fit with what Excel
* will accept without a massive huff, and write into
* the OutputStream supplied.
@@ -591,11 +617,11 @@ public class XSSFSheet implements Sheet {
return false;
}
- public Row getRow(int rownum) {
+ public XSSFRow getRow(int rownum) {
for (Iterator<Row> it = rowIterator() ; it.hasNext() ; ) {
Row row = it.next();
if (row.getRowNum() == rownum) {
- return row;
+ return (XSSFRow)row;
}
}
return null;
diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java
index 8d82574108..7ff8be2538 100644
--- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java
+++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java
@@ -40,13 +40,7 @@ import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.Row.MissingCellPolicy;
import org.apache.poi.util.POILogFactory;
import org.apache.poi.util.POILogger;
-import org.apache.poi.xssf.model.CommentsTable;
-import org.apache.poi.xssf.model.Control;
-import org.apache.poi.xssf.model.Drawing;
-import org.apache.poi.xssf.model.SharedStringSource;
-import org.apache.poi.xssf.model.SharedStringsTable;
-import org.apache.poi.xssf.model.StylesTable;
-import org.apache.poi.xssf.model.XSSFModel;
+import org.apache.poi.xssf.model.*;
import org.apache.xmlbeans.XmlException;
import org.apache.xmlbeans.XmlObject;
import org.apache.xmlbeans.XmlOptions;
@@ -84,6 +78,8 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook {
private SharedStringSource sharedStringSource;
private StylesSource stylesSource;
+ private List<? extends XSSFModel> themes = new LinkedList<ThemeTable>();
+
private MissingCellPolicy missingCellPolicy = Row.RETURN_NULL_AND_BLANK;
private static POILogger log = POILogFactory.getLogger(XSSFWorkbook.class);
@@ -132,6 +128,12 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook {
e.printStackTrace();
throw new IOException("Unable to load styles - " + e.toString());
}
+ try {
+ // Load shared strings
+ this.themes = XSSFRelation.THEME.loadAll(getCorePart());
+ } catch(Exception e) {
+ throw new IOException("Unable to load shared strings - " + e.toString());
+ }
// Load individual sheets
for (CTSheet ctSheet : this.workbook.getSheets().getSheetArray()) {
@@ -251,23 +253,17 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook {
}
public XSSFCellStyle createCellStyle() {
- CTXf xf=CTXf.Factory.newInstance();
- xf.setNumFmtId(0);
- xf.setFontId(0);
- xf.setFillId(0);
- xf.setBorderId(0);
- xf.setXfId(0);
- int xfSize=((StylesTable)stylesSource)._getStyleXfsSize();
- long indexXf=((StylesTable)stylesSource).putCellXf(xf);
- XSSFCellStyle style = new XSSFCellStyle(new Long(indexXf-1).intValue(), xfSize-1, (StylesTable)stylesSource);
- return style;
- }
-
- /*
- public XSSFCellStyle createCellStyle() {
- return new XSSFCellStyle(stylesSource);
+ CTXf xf=CTXf.Factory.newInstance();
+ xf.setNumFmtId(0);
+ xf.setFontId(0);
+ xf.setFillId(0);
+ xf.setBorderId(0);
+ xf.setXfId(0);
+ int xfSize=((StylesTable)stylesSource)._getStyleXfsSize();
+ long indexXf=((StylesTable)stylesSource).putCellXf(xf);
+ XSSFCellStyle style = new XSSFCellStyle(new Long(indexXf-1).intValue(), xfSize-1, (StylesTable)stylesSource);
+ return style;
}
-*/
public DataFormat createDataFormat() {
return getCreationHelper().createDataFormat();
@@ -291,12 +287,12 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook {
}
public XSSFSheet createSheet(String sheetname) {
- return createSheet(sheetname, null);
+ return createSheet(sheetname, XSSFSheet.newSheetInstance());
}
public XSSFSheet createSheet(String sheetname, CTWorksheet worksheet) {
CTSheet sheet = addSheet(sheetname);
- XSSFWorksheet wrapper = new XSSFWorksheet(sheet, worksheet, this);
+ XSSFSheet wrapper = new XSSFSheet(sheet, worksheet, this);
this.sheets.add(wrapper);
return wrapper;
}
@@ -468,7 +464,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook {
return null;
}
- public Sheet getSheetAt(int index) {
+ public XSSFSheet getSheetAt(int index) {
return this.sheets.get(index);
}
@@ -623,7 +619,9 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook {
// Main part
PackagePartName corePartName = PackagingURIHelper.createPartName(workbookRelation.getDefaultFileName());
// Create main part relationship
- pkg.addRelationship(corePartName, TargetMode.INTERNAL, PackageRelationshipTypes.CORE_DOCUMENT, "rId1");
+ int rId = 1;
+ pkg.addRelationship(corePartName, TargetMode.INTERNAL, PackageRelationshipTypes.CORE_DOCUMENT, "rId" + (rId++));
+
// Create main document part
PackagePart corePart = pkg.createPart(corePartName, workbookRelation.getContentType());
OutputStream out;
@@ -636,13 +634,14 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook {
// Write out our sheets, updating the references
// to them in the main workbook as we go
+ int drawingIndex = 1;
for (int i=0 ; i < this.getNumberOfSheets(); i++) {
int sheetNumber = (i+1);
- XSSFSheet sheet = (XSSFSheet) this.getSheetAt(i);
+ XSSFSheet sheet = this.getSheetAt(i);
PackagePartName partName = PackagingURIHelper.createPartName(
XSSFRelation.WORKSHEET.getFileName(sheetNumber));
PackageRelationship rel =
- corePart.addRelationship(partName, TargetMode.INTERNAL, XSSFRelation.WORKSHEET.getRelation(), "rSheet" + sheetNumber);
+ corePart.addRelationship(partName, TargetMode.INTERNAL, XSSFRelation.WORKSHEET.getRelation(), "rId" + sheetNumber);
PackagePart part = pkg.createPart(partName, XSSFRelation.WORKSHEET.getContentType());
// XXX This should not be needed, but apparently the setSaveOuter call above does not work in XMLBeans 2.2
@@ -653,15 +652,8 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook {
workbook.getSheets().getSheetArray(i).setId(rel.getId());
workbook.getSheets().getSheetArray(i).setSheetId(sheetNumber);
- // If our sheet has comments, then write out those
- if(sheet.hasComments()) {
- CommentsTable ct = (CommentsTable)sheet.getCommentsSourceIfExists();
- XSSFRelation.SHEET_COMMENTS.save(ct, part, sheetNumber);
- }
-
// If our sheet has drawings, then write out those
if(sheet.getDrawings() != null) {
- int drawingIndex = 1;
for(Drawing drawing : sheet.getDrawings()) {
XSSFRelation.VML_DRAWINGS.save(
drawing,
@@ -672,6 +664,12 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook {
}
}
+ // If our sheet has comments, then write out those
+ if(sheet.hasComments()) {
+ CommentsTable ct = (CommentsTable)sheet.getCommentsSourceIfExists();
+ XSSFRelation.SHEET_COMMENTS.save(ct, part, sheetNumber);
+ }
+
// If our sheet has controls, then write out those
if(sheet.getControls() != null) {
int controlIndex = 1;
@@ -695,6 +693,11 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook {
StylesTable st = (StylesTable)stylesSource;
XSSFRelation.STYLES.save(st, corePart);
}
+ if(themes.size() > 0) {
+ for(int i=0; i< themes.size(); i++) {
+ XSSFRelation.THEME.save(themes.get(i), corePart, i+1);
+ }
+ }
// Named ranges
if(namedRanges.size() > 0) {
@@ -751,7 +754,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook {
protected void setSharedStringSource(SharedStringSource sharedStringSource) {
this.sharedStringSource = sharedStringSource;
}
-
+
public StylesSource getStylesSource() {
return this.stylesSource;
}
diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java
index e06340db05..4ed205feaa 100644
--- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java
+++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java
@@ -121,8 +121,8 @@ public class TestXSSFSheet extends TestCase {
XSSFWorkbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("Sheet 1");
// Test that default height set by the constructor
- assertEquals((short) 0, sheet.getDefaultRowHeight());
- assertEquals((float) 0, sheet.getDefaultRowHeightInPoints());
+ assertEquals((short) 300, sheet.getDefaultRowHeight());
+ assertEquals((float) 15, sheet.getDefaultRowHeightInPoints());
// Set a new default row height in twips and test getting the value in points
sheet.setDefaultRowHeight((short) 360);
assertEquals((float) 18, sheet.getDefaultRowHeightInPoints());
@@ -244,7 +244,7 @@ public class TestXSSFSheet extends TestCase {
public void testGetSetMargin() {
XSSFWorkbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("Sheet 1");
- assertEquals((double) 0, sheet.getMargin((short) 0));
+ assertEquals(0.7, sheet.getMargin((short) 0));
sheet.setMargin((short) 0, 10);
assertEquals((double) 10, sheet.getMargin((short) 0));
assertEquals((double) 10, sheet.getMargin((short) 1));
@@ -465,9 +465,9 @@ public class TestXSSFSheet extends TestCase {
public void testGetDialog() {
XSSFWorkbook workbook = new XSSFWorkbook();
- XSSFSheet sheet = (XSSFSheet) workbook.createSheet("Sheet 1");
+ XSSFSheet sheet = workbook.createSheet("Sheet 1");
assertFalse(sheet.getDialog());
- XSSFSheet dialogsheet = (XSSFSheet) workbook.createDialogsheet("Dialogsheet 1", null);
+ XSSFSheet dialogsheet = workbook.createDialogsheet("Dialogsheet 1", null);
assertTrue(dialogsheet.getDialog());
}
diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java
index 087d200115..39e1646315 100644
--- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java
+++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java
@@ -88,7 +88,7 @@ public class TestXSSFWorkbook extends TestCase {
XSSFWorkbook workbook = new XSSFWorkbook();
Sheet sheet1 = workbook.createSheet("sheet1");
Sheet sheet2 = workbook.createSheet("sheet2");
- assertEquals(-1, workbook.getSelectedTab());
+ assertEquals(0, workbook.getSelectedTab());
workbook.setSelectedTab((short) 0);
assertEquals(0, workbook.getSelectedTab());
workbook.setSelectedTab((short) 1);