You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ye...@apache.org on 2008/09/26 08:02:39 UTC
svn commit: r699185 - in /poi/branches/ooxml/src:
examples/src/org/apache/poi/xssf/usermodel/examples/
java/org/apache/poi/hssf/usermodel/
ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/
ooxml/java/org/apache/poi/xssf/model/ ooxml/java/org/apache/p...
Author: yegor
Date: Thu Sep 25 23:02:38 2008
New Revision: 699185
URL: http://svn.apache.org/viewvc?rev=699185&view=rev
Log:
applied patches #45894 and #45892, also major cleanup of XSSFSheet and related classes
Modified:
poi/branches/ooxml/src/examples/src/org/apache/poi/xssf/usermodel/examples/CreateNewSpreadsheet.java
poi/branches/ooxml/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java
poi/branches/ooxml/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Sheet.java
poi/branches/ooxml/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Workbook.java
poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/model/CommentsTable.java
poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/model/Drawing.java
poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java
poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRow.java
poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java
poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java
poi/branches/ooxml/src/ooxml/testcases/org/apache/poi/xssf/model/TestCommentsTable.java
poi/branches/ooxml/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFRow.java
poi/branches/ooxml/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java
poi/branches/ooxml/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java
Modified: poi/branches/ooxml/src/examples/src/org/apache/poi/xssf/usermodel/examples/CreateNewSpreadsheet.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/examples/src/org/apache/poi/xssf/usermodel/examples/CreateNewSpreadsheet.java?rev=699185&r1=699184&r2=699185&view=diff
==============================================================================
--- poi/branches/ooxml/src/examples/src/org/apache/poi/xssf/usermodel/examples/CreateNewSpreadsheet.java (original)
+++ poi/branches/ooxml/src/examples/src/org/apache/poi/xssf/usermodel/examples/CreateNewSpreadsheet.java Thu Sep 25 23:02:38 2008
@@ -25,11 +25,11 @@
public class CreateNewSpreadsheet {
public static void main(String[] args) throws Exception {
- Workbook wb = new XSSFWorkbook();
+ XSSFWorkbook wb = new XSSFWorkbook();
CreationHelper createHelper = wb.getCreationHelper();
- Sheet s1 = wb.createSheet("Sheet One");
- Sheet s2 = wb.createSheet("2nd Sheet");
+ XSSFSheet s1 = wb.createSheet("Sheet One");
+ XSSFSheet s2 = wb.createSheet("Sheet One");
// Create a few cells
s1.createRow(0);
@@ -46,24 +46,13 @@
s2.getRow(2).createCell(1).setCellValue(createHelper.createRichTextString("Sheet 2"));
-/*
- // Comment
- Comment comment = ((XSSFSheet)s1).createComment();
-// HSSFPatriarch patriach = (HSSFPatriarch)s1.createDrawingPatriarch();
-// Comment comment = patriach.createComment(new HSSFClientAnchor(0, 0, 0, 0, (short)4, 2, (short) 6, 5));
-
- comment.setAuthor("Apache POI");
- comment.setString(createHelper.createRichTextString("I am a comment"));
- s1.getRow(0).getCell(0).setCellComment(comment);
-
- // Hyperlink
- Hyperlink hyperlink = createHelper.createHyperlink(Hyperlink.LINK_URL);
- hyperlink.setAddress("http://poi.apache.org/");
- hyperlink.setLabel("Link to POI");
- s1.getRow(1).createCell(1).setHyperlink(hyperlink);
- s1.getRow(1).getCell(1).setCellValue(createHelper.createRichTextString("Link to POI"));
-*/
- // Save
+ s1.groupRow(0, 3);
+
+ s1.getRow(1).setHeight(10.4);
+ //s1.setActiveCell("A2");
+ //s2.setSelected(true);
+
+ // Save
FileOutputStream fout = new FileOutputStream("NewFile.xlsx");
wb.write(fout);
fout.close();
Modified: poi/branches/ooxml/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java?rev=699185&r1=699184&r2=699185&view=diff
==============================================================================
--- poi/branches/ooxml/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java (original)
+++ poi/branches/ooxml/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java Thu Sep 25 23:02:38 2008
@@ -659,8 +659,6 @@
/**
-=======
->>>>>>> .merge-right.r696898
* create an HSSFSheet for this HSSFWorkbook, adds it to the sheets and returns
* the high level representation. Use this to create new sheets.
*
Modified: poi/branches/ooxml/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Sheet.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Sheet.java?rev=699185&r1=699184&r2=699185&view=diff
==============================================================================
--- poi/branches/ooxml/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Sheet.java (original)
+++ poi/branches/ooxml/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Sheet.java Thu Sep 25 23:02:38 2008
@@ -233,12 +233,6 @@
void setVerticallyCenter(boolean value);
/**
- * Determine whether printed output for this sheet will be vertically centered.
- */
-
- boolean getVerticallyCenter(boolean value);
-
- /**
* determines whether the output is horizontally centered on the page.
* @param value true to horizontally center, false otherwise.
*/
@@ -673,12 +667,6 @@
void removeColumnBreak(short column);
/**
- * Aggregates the drawing records and dumps the escher record hierarchy
- * to the standard output.
- */
- void dumpDrawingRecords(boolean fat);
-
- /**
* Creates the toplevel drawing patriarch. This will have the effect of
* removing any existing drawings on this sheet.
*
Modified: poi/branches/ooxml/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Workbook.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Workbook.java?rev=699185&r1=699184&r2=699185&view=diff
==============================================================================
--- poi/branches/ooxml/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Workbook.java (original)
+++ poi/branches/ooxml/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Workbook.java Thu Sep 25 23:02:38 2008
@@ -283,20 +283,6 @@
void write(OutputStream stream) throws IOException;
- /**
- * Method getBytes - get the bytes of just the HSSF portions of the XLS file.
- * Use this to construct a POI POIFSFileSystem yourself.
- *
- *
- * @return byte[] array containing the binary representation of this workbook and all contained
- * sheets, rows, cells, etc.
- *
- * @see org.apache.poi.hssf.model.Workbook
- * @see org.apache.poi.hssf.model.Sheet
- */
-
- byte[] getBytes();
-
/** gets the total number of named ranges in the workboko
* @return number of named ranges
*/
@@ -401,11 +387,6 @@
void insertChartRecord();
/**
- * Spits out a list of all the drawing records in the workbook.
- */
- void dumpDrawingGroupRecords(boolean fat);
-
- /**
* Adds a picture to the workbook.
*
* @param pictureData The bytes of the picture
Modified: poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/model/CommentsTable.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/model/CommentsTable.java?rev=699185&r1=699184&r2=699185&view=diff
==============================================================================
--- poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/model/CommentsTable.java (original)
+++ poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/model/CommentsTable.java Thu Sep 25 23:02:38 2008
@@ -61,7 +61,7 @@
options.setUseDefaultNamespace();
// Requests use of whitespace for easier reading
- options.setSavePrettyPrint();
+ //options.setSavePrettyPrint();
CommentsDocument doc = CommentsDocument.Factory.newInstance(options);
doc.setComments(comments);
Modified: poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/model/Drawing.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/model/Drawing.java?rev=699185&r1=699184&r2=699185&view=diff
==============================================================================
--- poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/model/Drawing.java (original)
+++ poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/model/Drawing.java Thu Sep 25 23:02:38 2008
@@ -56,7 +56,7 @@
options.setSaveOuter();
options.setUseDefaultNamespace();
// Requests use of whitespace for easier reading
- options.setSavePrettyPrint();
+ //options.setSavePrettyPrint();
drawing.save(out, options);
}
Modified: poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java?rev=699185&r1=699184&r2=699185&view=diff
==============================================================================
--- poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java (original)
+++ poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java Thu Sep 25 23:02:38 2008
@@ -297,10 +297,6 @@
public void setCellFormula(String formula) {
- if (this.cell.getT() != STCellType.STR)
- {
- this.cell.setT(STCellType.STR);
- }
CTCellFormula f = CTCellFormula.Factory.newInstance();
f.setStringValue(formula);
this.cell.setF(f);
Modified: poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRow.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRow.java?rev=699185&r1=699184&r2=699185&view=diff
==============================================================================
--- poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRow.java (original)
+++ poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRow.java Thu Sep 25 23:02:38 2008
@@ -186,7 +186,7 @@
public short getHeight() {
if (this.row.getHt() > 0) {
- return (short) (this.row.getHt() * 20);
+ return (short) (this.row.getHt());
}
return -1;
}
@@ -198,12 +198,31 @@
return -1;
}
+ /**
+ * Gets the index of the last cell contained in this row <b>PLUS ONE</b>. The result also
+ * happens to be the 1-based column number of the last cell. This value can be used as a
+ * standard upper bound when iterating over cells:
+ * <pre>
+ * short minColIx = row.getFirstCellNum();
+ * short maxColIx = row.getLastCellNum();
+ * for(short colIx=minColIx; colIx<maxColIx; colIx++) {
+ * XSSFCell cell = row.getCell(colIx);
+ * if(cell == null) {
+ * continue;
+ * }
+ * //... do something with cell
+ * }
+ * </pre>
+ *
+ * @return short representing the last logical cell in the row <b>PLUS ONE</b>, or -1 if the
+ * row does not contain any cells.
+ */
public short getLastCellNum() {
short lastCellNum = -1;
for (Iterator<Cell> it = cellIterator() ; it.hasNext() ; ) {
Cell cell = it.next();
if (cell != null) {
- lastCellNum = cell.getCellNum();
+ lastCellNum = (short)(cell.getCellNum() + 1);
}
}
return lastCellNum;
@@ -241,11 +260,17 @@
}
public void setHeight(short height) {
- this.row.setHt((double) height / 20);
+ this.row.setHt((double) height);
+ this.row.setCustomHeight(true);
}
- public void setHeightInPoints(float height) {
+ public void setHeight(double height) {
this.row.setHt((double) height);
+ this.row.setCustomHeight(true);
+ }
+
+ public void setHeightInPoints(float height) {
+ setHeight((short)height);
}
public void setRowNum(int rowNum) {
Modified: poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java?rev=699185&r1=699184&r2=699185&view=diff
==============================================================================
--- poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java (original)
+++ poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java Thu Sep 25 23:02:38 2008
@@ -19,10 +19,7 @@
import java.io.IOException;
import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
+import java.util.*;
import org.apache.poi.hssf.util.PaneInformation;
import org.apache.poi.ss.usermodel.CellStyle;
@@ -80,6 +77,15 @@
import org.openxmlformats.schemas.spreadsheetml.x2006.main.STSheetState;
+/**
+ * High level representation of a worksheet.
+ *
+ * <p>
+ * Sheets are the central structures within a workbook, and are where a user does most of his spreadsheet work.
+ * The most common type of sheet is the worksheet, which is represented as a grid of cells. Worksheet cells can
+ * contain text, numbers, dates, and formulas. Cells can also be formatted. A workbook usually contains more than one sheet.
+ * </p>
+ */
public class XSSFSheet implements Sheet {
protected CTSheet sheet;
protected CTWorksheet worksheet;
@@ -139,12 +145,17 @@
hyperlinks = new ArrayList<XSSFHyperlink>();
}
- public XSSFSheet(XSSFWorkbook workbook) {
+ protected XSSFSheet(XSSFWorkbook workbook) {
this.workbook = workbook;
hyperlinks = new ArrayList<XSSFHyperlink>();
}
+ /**
+ * Returns the parent XSSFWorkbook
+ *
+ * @return the parent XSSFWorkbook
+ */
public XSSFWorkbook getWorkbook() {
return this.workbook;
}
@@ -154,7 +165,7 @@
*
* @return a new instance
*/
- protected static CTWorksheet newSheetInstance(){
+ protected static CTWorksheet newInstance(){
CTWorksheet worksheet = CTWorksheet.Factory.newInstance();
CTSheetFormatPr ctFormat = worksheet.addNewSheetFormatPr();
ctFormat.setDefaultRowHeight(15.0);
@@ -214,8 +225,13 @@
worksheet.save(out, xmlOptions);
out.close();
}
-
- protected CTWorksheet getWorksheet() {
+
+ /**
+ * Provide access to the underlying XML bean
+ *
+ * @return the underlying CTWorksheet bean
+ */
+ public CTWorksheet getWorksheet() {
return this.worksheet;
}
@@ -265,8 +281,35 @@
return ctMergeCells.sizeOfMergeCellArray();
}
- public void autoSizeColumn(short column) {
- columnHelper.setColBestFit(column, true);
+ /**
+ * Adjusts the column width to fit the contents.
+ *
+ * This process can be relatively slow on large sheets, so this should
+ * normally only be called once per column, at the end of your
+ * processing.
+ *
+ * @param column the column index
+ */
+ public void autoSizeColumn(short column) {
+ autoSizeColumn(column, false);
+ }
+
+ /**
+ * Adjusts the column width to fit the contents.
+ *
+ * This process can be relatively slow on large sheets, so this should
+ * normally only be called once per column, at the end of your
+ * processing.
+ *
+ * You can specify whether the content of merged cells should be considered or ignored.
+ * Default is to ignore merged cells.
+ *
+ * @param column the column index
+ * @param useMergedCells whether to use the contents of merged cells when calculating the width of the column
+ */
+ public void autoSizeColumn(short column, boolean useMergedCells) {
+ //TODO:
+ columnHelper.setColBestFit(column, true);
}
public Patriarch createDrawingPatriarch() {
@@ -274,11 +317,23 @@
return null;
}
+ /**
+ * Creates a split (freezepane). Any existing freezepane or split pane is overwritten.
+ * @param colSplit Horizonatal position of split.
+ * @param rowSplit Vertical position of split.
+ * @param topRow Top row visible in bottom pane
+ * @param leftmostColumn Left column visible in right pane.
+ */
public void createFreezePane(int colSplit, int rowSplit, int leftmostColumn, int topRow) {
this.createFreezePane(colSplit, rowSplit);
this.showInPane((short)topRow, (short)leftmostColumn);
}
+ /**
+ * Creates a split (freezepane). Any existing freezepane or split pane is overwritten.
+ * @param colSplit Horizonatal position of split.
+ * @param rowSplit Vertical position of split.
+ */
public void createFreezePane(int colSplit, int rowSplit) {
getPane().setXSplit(colSplit);
getPane().setYSplit(rowSplit);
@@ -290,8 +345,8 @@
* Creates a new comment for this sheet. You still
* need to assign it to a cell though
*/
- public Comment createComment() {
- return getComments().addComment();
+ public XSSFComment createComment() {
+ return (XSSFComment)getComments().addComment();
}
protected XSSFRow addRow(int index, int rownum) {
@@ -301,37 +356,52 @@
return xrow;
}
+ /**
+ * Create a new row within the sheet and return the high level representation
+ *
+ * @param rownum row number
+ * @return High level {@link XSSFRow} object representing a row in the sheet
+ * @see #removeRow(org.apache.poi.ss.usermodel.Row)
+ */
public XSSFRow createRow(int rownum) {
int index = 0;
for (Row r : this.rows) {
- if (r.getRowNum() == rownum) {
- // Replace r with new row
+ if (r.getRowNum() == rownum) {
+ // Replace r with new row
+ XSSFRow xrow = addRow(index, rownum);
+ rows.set(index, xrow);
+ return xrow;
+ }
+ if (r.getRowNum() > rownum) {
XSSFRow xrow = addRow(index, rownum);
- rows.set(index, xrow);
- return xrow;
- }
- if (r.getRowNum() > rownum) {
- XSSFRow xrow = addRow(index, rownum);
- rows.add(index, xrow);
- return xrow;
- }
- ++index;
+ rows.add(index, xrow);
+ return xrow;
+ }
+ ++index;
}
XSSFRow xrow = addRow(index, rownum);
rows.add(xrow);
return xrow;
}
+ /**
+ * Creates a split pane. Any existing freezepane or split pane is overwritten.
+ * @param xSplitPos Horizonatal position of split (in 1/20th of a point).
+ * @param ySplitPos Vertical position of split (in 1/20th of a point).
+ * @param topRow Top row visible in bottom pane
+ * @param leftmostColumn Left column visible in right pane.
+ * @param activePane Active pane. One of: PANE_LOWER_RIGHT,
+ * PANE_UPPER_RIGHT, PANE_LOWER_LEFT, PANE_UPPER_LEFT
+ * @see #PANE_LOWER_LEFT
+ * @see #PANE_LOWER_RIGHT
+ * @see #PANE_UPPER_LEFT
+ * @see #PANE_UPPER_RIGHT
+ */
public void createSplitPane(int xSplitPos, int ySplitPos, int leftmostColumn, int topRow, int activePane) {
createFreezePane(xSplitPos, ySplitPos, leftmostColumn, topRow);
getPane().setActivePane(STPane.Enum.forInt(activePane));
}
- public void dumpDrawingRecords(boolean fat) {
- // TODO Auto-generated method stub
-
- }
-
public boolean getAlternateExpression() {
// TODO Auto-generated method stub
return false;
@@ -342,15 +412,11 @@
return false;
}
- public boolean getAutobreaks() {
- return getSheetTypePageSetUpPr().getAutoPageBreaks();
- }
-
- public Comment getCellComment(int row, int column) {
- return getComments().findCellComment(row, column);
+ public XSSFComment getCellComment(int row, int column) {
+ return (XSSFComment)getComments().findCellComment(row, column);
}
- public Hyperlink getHyperlink(int row, int column) {
+ public XSSFHyperlink getHyperlink(int row, int column) {
String ref = new CellReference(row, column).formatAsString();
for(XSSFHyperlink hyperlink : hyperlinks) {
if(hyperlink.getCellRef().equals(ref)) {
@@ -360,11 +426,18 @@
return null;
}
+ /**
+ * Vertical page break information used for print layout view, page layout view, drawing print breaks
+ * in normal view, and for printing the worksheet.
+ *
+ * @return column indexes of all the vertical page breaks, never <code>null</code>
+ */
public int[] getColumnBreaks() {
- CTBreak[] brkArray = getSheetTypeColumnBreaks().getBrkArray();
- if (brkArray.length == 0) {
- return null;
+ if (!worksheet.isSetColBreaks() || worksheet.getColBreaks().sizeOfBrkArray() == 0) {
+ return new int[0];
}
+
+ CTBreak[] brkArray = worksheet.getColBreaks().getBrkArray();
int[] breaks = new int[brkArray.length];
for (int i = 0 ; i < brkArray.length ; i++) {
CTBreak brk = brkArray[i];
@@ -418,6 +491,11 @@
return false;
}
+ /**
+ * Gets the first row on the sheet
+ *
+ * @return the number of the first logical row on the sheet, zero based
+ */
public int getFirstRowNum() {
for (Iterator<Row> it = rowIterator() ; it.hasNext() ; ) {
Row row = it.next();
@@ -428,18 +506,34 @@
return -1;
}
+ /**
+ * Flag indicating whether the Fit to Page print option is enabled.
+ *
+ * @return <code>true</code>
+ */
public boolean getFitToPage() {
- return getSheetTypePageSetUpPr().getFitToPage();
+ CTSheetPr sheetPr = getSheetTypeSheetPr();
+ CTPageSetUpPr psSetup = (sheetPr == null || !sheetPr.isSetPageSetUpPr()) ?
+ CTPageSetUpPr.Factory.newInstance() : sheetPr.getPageSetUpPr();
+ return psSetup.getFitToPage();
+ }
+
+ protected CTSheetPr getSheetTypeSheetPr() {
+ if (worksheet.getSheetPr() == null) {
+ worksheet.setSheetPr(CTSheetPr.Factory.newInstance());
+ }
+ return worksheet.getSheetPr();
}
-
protected CTHeaderFooter getSheetTypeHeaderFooter() {
if (worksheet.getHeaderFooter() == null) {
worksheet.setHeaderFooter(CTHeaderFooter.Factory.newInstance());
}
return worksheet.getHeaderFooter();
}
-
+
+
+
/**
* Returns the default footer for the sheet,
* creating one as needed.
@@ -617,49 +711,133 @@
return false;
}
+ /**
+ * Returns the logical row ( 0-based). If you ask for a row that is not
+ * defined you get a null. This is to say row 4 represents the fifth row on a sheet.
+ *
+ * @param rownum row to get
+ * @return <code>XSSFRow</code> representing the rownumber or <code>null</code> if its not defined on the sheet
+ */
public XSSFRow getRow(int rownum) {
+ //TODO current implemenation is expensive, it should take O(1), not O(N)
for (Iterator<Row> it = rowIterator() ; it.hasNext() ; ) {
- Row row = it.next();
- if (row.getRowNum() == rownum) {
- return (XSSFRow)row;
- }
+ Row row = it.next();
+ if (row.getRowNum() == rownum) {
+ return (XSSFRow)row;
+ }
}
return null;
}
+ /**
+ * Horizontal page break information used for print layout view, page layout view, drawing print breaks in normal
+ * view, and for printing the worksheet.
+ *
+ * @return row indexes of all the horizontal page breaks, never <code>null</code>
+ */
public int[] getRowBreaks() {
- CTPageBreak rowBreaks = getSheetTypeRowBreaks();
- int breaksCount = rowBreaks.getBrkArray().length;
- if (breaksCount == 0) {
- return null;
+ if (!worksheet.isSetRowBreaks() || worksheet.getRowBreaks().sizeOfBrkArray() == 0) {
+ return new int[0];
}
- int[] breaks = new int[breaksCount];
- for (int i = 0 ; i < breaksCount ; i++) {
- CTBreak brk = rowBreaks.getBrkArray(i);
- breaks[i] = (int) brk.getId();
+
+ CTBreak[] brkArray = worksheet.getRowBreaks().getBrkArray();
+ int[] breaks = new int[brkArray.length];
+ for (int i = 0 ; i < brkArray.length ; i++) {
+ CTBreak brk = brkArray[i];
+ breaks[i] = (int)brk.getId();
}
return breaks;
}
- protected CTPageBreak getSheetTypeRowBreaks() {
- if (worksheet.getRowBreaks() == null) {
- worksheet.setRowBreaks(CTPageBreak.Factory.newInstance());
- }
- return worksheet.getRowBreaks();
- }
-
+ /**
+ * Flag indicating whether summary rows appear below detail in an outline, when applying an outline.
+ *
+ * <p>
+ * When true a summary row is inserted below the detailed data being summarized and a
+ * new outline level is established on that row.
+ * </p>
+ * <p>
+ * When false a summary row is inserted above the detailed data being summarized and a new outline level
+ * is established on that row.
+ * </p>
+ * @return <code>true</code> if row summaries appear below detail in the outline
+ */
public boolean getRowSumsBelow() {
- CTSheetPr sheetPr = getSheetTypeSheetPr();
- CTOutlinePr outLinePr = sheetPr.getOutlinePr();
- return outLinePr.getSummaryBelow();
+ CTSheetPr sheetPr = worksheet.getSheetPr();
+ CTOutlinePr outlinePr = (sheetPr != null && sheetPr.isSetOutlinePr())
+ ? sheetPr.getOutlinePr() : CTOutlinePr.Factory.newInstance();
+ return outlinePr.getSummaryBelow();
}
+ /**
+ * Flag indicating whether summary rows appear below detail in an outline, when applying an outline.
+ *
+ * <p>
+ * When true a summary row is inserted below the detailed data being summarized and a
+ * new outline level is established on that row.
+ * </p>
+ * <p>
+ * When false a summary row is inserted above the detailed data being summarized and a new outline level
+ * is established on that row.
+ * </p>
+ * @param value <code>true</code> if row summaries appear below detail in the outline
+ */
+ public void setRowSumsBelow(boolean value) {
+ ensureOutlinePr().setSummaryBelow(value);
+ }
+
+ /**
+ * Flag indicating whether summary columns appear to the right of detail in an outline, when applying an outline.
+ *
+ * <p>
+ * When true a summary column is inserted to the right of the detailed data being summarized
+ * and a new outline level is established on that column.
+ * </p>
+ * <p>
+ * When false a summary column is inserted to the left of the detailed data being
+ * summarized and a new outline level is established on that column.
+ * </p>
+ * @return <code>true</code> if col summaries appear right of the detail in the outline
+ */
public boolean getRowSumsRight() {
- CTSheetPr sheetPr = getSheetTypeSheetPr();
- CTOutlinePr outLinePr = sheetPr.getOutlinePr();
- return outLinePr.getSummaryRight();
+ CTSheetPr sheetPr = worksheet.getSheetPr();
+ CTOutlinePr outlinePr = (sheetPr != null && sheetPr.isSetOutlinePr())
+ ? sheetPr.getOutlinePr() : CTOutlinePr.Factory.newInstance();
+ return outlinePr.getSummaryRight();
+ }
+
+ /**
+ * Flag indicating whether summary columns appear to the right of detail in an outline, when applying an outline.
+ *
+ * <p>
+ * When true a summary column is inserted to the right of the detailed data being summarized
+ * and a new outline level is established on that column.
+ * </p>
+ * <p>
+ * When false a summary column is inserted to the left of the detailed data being
+ * summarized and a new outline level is established on that column.
+ * </p>
+ * @param value <code>true</code> if col summaries appear right of the detail in the outline
+ */
+ public void setRowSumsRight(boolean value) {
+ ensureOutlinePr().setSummaryRight(value);
}
+
+ /**
+ * Ensure CTWorksheet.CTSheetPr.CTOutlinePr
+ */
+ private CTOutlinePr ensureOutlinePr(){
+ CTSheetPr sheetPr = worksheet.isSetSheetPr() ? worksheet.getSheetPr() : worksheet.addNewSheetPr();
+ CTOutlinePr outlinePr = sheetPr.isSetOutlinePr() ? sheetPr.getOutlinePr() : sheetPr.addNewOutlinePr();
+ return outlinePr;
+ }
+
+ /**
+ * A flag indicating whether scenarios are locked when the sheet is protected.
+ *
+ * @return true => protection enabled; false => protection disabled
+ */
public boolean getScenarioProtect() {
return getSheetTypeProtection().getScenarios();
}
@@ -671,19 +849,25 @@
return worksheet.getSheetProtection();
}
+ /**
+ * The top row in the visible view when the sheet is
+ * first viewed after opening it in a viewer
+ *
+ * @return integer indicating the rownum (0 based) of the top row
+ */
public short getTopRow() {
String cellRef = getSheetTypeSheetView().getTopLeftCell();
CellReference cellReference = new CellReference(cellRef);
return (short) cellReference.getRow();
}
- // Right signature method. Remove the wrong one when it will be removed in HSSFSheet (and interface)
+ /**
+ * Determine whether printed output for this sheet will be vertically centered.
+ *
+ * @return whether printed output for this sheet will be vertically centered.
+ */
public boolean getVerticallyCenter() {
- return getVerticallyCenter(true);
- }
-
- public boolean getVerticallyCenter(boolean value) {
- return getSheetTypePrintOptions().getVerticalCentered();
+ return getSheetTypePrintOptions().getVerticalCentered();
}
/**
@@ -711,9 +895,9 @@
public void groupRow(int fromRow, int toRow) {
for(int i=fromRow;i<=toRow;i++){
- XSSFRow xrow=(XSSFRow)getRow(i-1);
- if(xrow==null){//create a new Row
- xrow=(XSSFRow)createRow(i-1);
+ XSSFRow xrow = getRow(i-1);
+ if(xrow == null){//create a new Row
+ xrow = createRow(i-1);
}
CTRow ctrow=xrow.getCTRow();
short outlineLevel=ctrow.getOutlineLevel();
@@ -742,10 +926,13 @@
return outlineLevel;
}
+ /**
+ * Determines if there is a page break at the indicated column
+ */
public boolean isColumnBroken(short column) {
- CTBreak[] brkArray = getSheetTypeColumnBreaks().getBrkArray();
- for (int i = 0 ; i < brkArray.length ; i++) {
- if (brkArray[i].getId() == column) {
+ int[] colBreaks = getColumnBreaks();
+ for (int i = 0 ; i < colBreaks.length ; i++) {
+ if (colBreaks[i] == column) {
return true;
}
}
@@ -779,11 +966,14 @@
return getSheetTypePrintOptions().getGridLines();
}
+ /**
+ * Tests if there is a page break at the indicated row
+ *
+ * @param row index of the row to test
+ * @return <code>true</code> if there is a page break at the indicated row
+ */
public boolean isRowBroken(int row) {
int[] rowBreaks = getRowBreaks();
- if (rowBreaks == null) {
- return false;
- }
for (int i = 0 ; i < rowBreaks.length ; i++) {
if (rowBreaks[i] == row) {
return true;
@@ -792,21 +982,34 @@
return false;
}
- public void protectSheet(String password) {
- // TODO Auto-generated method stub
-
+ /**
+ * Sets a page break at the indicated row
+ */
+ public void setRowBreak(int row) {
+ CTPageBreak pgBreak = worksheet.isSetRowBreaks() ? worksheet.getRowBreaks() : worksheet.addNewRowBreaks();
+ if (! isRowBroken(row)) {
+ CTBreak brk = pgBreak.addNewBrk();
+ brk.setId(row);
+ }
}
+ /**
+ * Removes a page break at the indicated column
+ */
public void removeColumnBreak(short column) {
CTBreak[] brkArray = getSheetTypeColumnBreaks().getBrkArray();
for (int i = 0 ; i < brkArray.length ; i++) {
if (brkArray[i].getId() == column) {
getSheetTypeColumnBreaks().removeBrk(i);
- continue;
}
}
}
+ public void protectSheet(String password) {
+ // TODO Auto-generated method stub
+
+ }
+
public void removeMergedRegion(int index) {
CTMergeCell[] mergeCellsArray = new CTMergeCell[getMergedCells().sizeOfMergeCellArray() - 1];
for (int i = 0 ; i < getMergedCells().sizeOfMergeCellArray() ; i++) {
@@ -833,12 +1036,15 @@
}
}
+ /**
+ * Removes the page break at the indicated row
+ */
public void removeRowBreak(int row) {
- CTBreak[] brkArray = getSheetTypeRowBreaks().getBrkArray();
+ CTPageBreak pgBreak = worksheet.isSetRowBreaks() ? worksheet.getRowBreaks() : worksheet.addNewRowBreaks();
+ CTBreak[] brkArray = pgBreak.getBrkArray();
for (int i = 0 ; i < brkArray.length ; i++) {
if (brkArray[i].getId() == row) {
- getSheetTypeRowBreaks().removeBrk(i);
- continue;
+ pgBreak.removeBrk(i);
}
}
}
@@ -846,6 +1052,7 @@
public Iterator<Row> rowIterator() {
return rows.iterator();
}
+
/**
* Alias for {@link #rowIterator()} to
* allow foreach loops
@@ -864,8 +1071,27 @@
}
- public void setAutobreaks(boolean b) {
- getSheetTypePageSetUpPr().setAutoPageBreaks(b);
+ /**
+ * Flag indicating whether the sheet displays Automatic Page Breaks.
+ *
+ * @return <code>true</code> if the sheet displays Automatic Page Breaks.
+ */
+ public boolean getAutobreaks() {
+ CTSheetPr sheetPr = getSheetTypeSheetPr();
+ CTPageSetUpPr psSetup = (sheetPr == null || !sheetPr.isSetPageSetUpPr()) ?
+ CTPageSetUpPr.Factory.newInstance() : sheetPr.getPageSetUpPr();
+ return psSetup.getAutoPageBreaks();
+ }
+
+ /**
+ * Flag indicating whether the sheet displays Automatic Page Breaks.
+ *
+ * @param value <code>true</code> if the sheet displays Automatic Page Breaks.
+ */
+ public void setAutobreaks(boolean value) {
+ CTSheetPr sheetPr = getSheetTypeSheetPr();
+ CTPageSetUpPr psSetup = sheetPr.isSetPageSetUpPr() ? sheetPr.getPageSetUpPr() : sheetPr.addNewPageSetUpPr();
+ psSetup.setAutoPageBreaks(value);
}
public void setColumnBreak(short column) {
@@ -982,36 +1208,15 @@
getSheetTypePrintOptions().setGridLines(newPrintGridlines);
}
- public void setRowBreak(int row) {
- CTPageBreak pageBreak = getSheetTypeRowBreaks();
- if (! isRowBroken(row)) {
- CTBreak brk = pageBreak.addNewBrk();
- brk.setId(row);
- }
- }
-
public void setRowGroupCollapsed(int row, boolean collapse) {
// TODO Auto-generated method stub
}
- public void setRowSumsBelow(boolean b) {
- CTSheetPr sheetPr = getSheetTypeSheetPr();
- CTOutlinePr outLinePr = sheetPr.getOutlinePr();
- outLinePr.setSummaryBelow(b);
- }
-
- public void setRowSumsRight(boolean b) {
- CTSheetPr sheetPr = getSheetTypeSheetPr();
- CTOutlinePr outLinePr = sheetPr.getOutlinePr();
- outLinePr.setSummaryRight(b);
- }
-
public void setVerticallyCenter(boolean value) {
getSheetTypePrintOptions().setVerticalCentered(value);
}
- // HSSFSheet compatibility methods. See also the following zoom related methods
/**
* Sets the zoom magnication for the sheet. The zoom is expressed as a
* fraction. For example to express a zoom of 75% use 3 for the numerator
@@ -1019,25 +1224,98 @@
*
* @param numerator The numerator for the zoom magnification.
* @param denominator The denominator for the zoom magnification.
+ * @see #setZoom(int)
*/
public void setZoom(int numerator, int denominator) {
Float result = new Float(numerator)/new Float(denominator)*100;
setZoom(result.intValue());
}
- public void setZoom(long scale) {
+ /**
+ * Window zoom magnification for current view representing percent values.
+ * Valid values range from 10 to 400. Horizontal & Vertical scale together.
+ *
+ * For example:
+ * <pre>
+ * 10 - 10%
+ * 20 - 20%
+ *
+ * 100 - 100%
+ *
+ * 400 - 400%
+ * </pre>
+ *
+ * Current view can be Normal, Page Layout, or Page Break Preview.
+ *
+ * @param scale window zoom magnification
+ */
+ public void setZoom(int scale) {
getSheetTypeSheetView().setZoomScale(scale);
}
- public void setZoomNormal(long scale) {
+ /**
+ * Zoom magnification to use when in normal view, representing percent values.
+ * Valid values range from 10 to 400. Horizontal & Vertical scale together.
+ *
+ * For example:
+ * <pre>
+ * 10 - 10%
+ * 20 - 20%
+ *
+ * 100 - 100%
+ *
+ * 400 - 400%
+ * </pre>
+ *
+ * Applies for worksheet sheet type only; zero implies the automatic setting.
+ *
+ * @param scale window zoom magnification
+ */
+ public void setZoomNormal(int scale) {
getSheetTypeSheetView().setZoomScaleNormal(scale);
}
- public void setZoomPageLayoutView(long scale) {
+ /**
+ * Zoom magnification to use when in page layout view, representing percent values.
+ * Valid values range from 10 to 400. Horizontal & Vertical scale together.
+ *
+ * For example:
+ * <pre>
+ * 10 - 10%
+ * 20 - 20%
+ *
+ * 100 - 100%
+ *
+ * 400 - 400%
+ * </pre>
+ *
+ * Applies for worksheet sheet type only; zero implies the automatic setting.
+ *
+ * @param scale
+ */
+ public void setZoomPageLayoutView(int scale) {
getSheetTypeSheetView().setZoomScalePageLayoutView(scale);
}
- public void setZoomSheetLayoutView(long scale) {
+ /**
+ * Zoom magnification to use when in page break preview, representing percent values.
+ * Valid values range from 10 to 400. Horizontal & Vertical scale together.
+ *
+ * For example:
+ * <pre>
+ * 10 - 10%
+ * 20 - 20%
+ *
+ * 100 - 100%
+ *
+ * 400 - 400%
+ * </pre>
+ *
+ * Applies for worksheet only; zero implies the automatic setting.
+ *
+ * @param scale
+ */
+ public void setZoomSheetLayoutView(int scale) {
getSheetTypeSheetView().setZoomScaleSheetLayoutView(scale);
}
@@ -1063,13 +1341,20 @@
}
}
+ /**
+ * Location of the top left visible cell Location of the top left visible cell in the bottom right
+ * pane (when in Left-to-Right mode).
+ *
+ * @param toprow the top row to show in desktop window pane
+ * @param leftcol the left column to show in desktop window pane
+ */
public void showInPane(short toprow, short leftcol) {
CellReference cellReference = new CellReference(toprow, leftcol);
String cellRef = cellReference.formatAsString();
getSheetTypeSheetView().setTopLeftCell(cellRef);
}
-public void ungroupColumn(short fromColumn, short toColumn) {
+ public void ungroupColumn(short fromColumn, short toColumn) {
CTCols cols=worksheet.getColsArray(0);
for(int index=fromColumn;index<=toColumn;index++){
CTCol col=columnHelper.getColumn(index, false);
@@ -1114,13 +1399,6 @@
getSheetTypeSheetFormatPr().setOutlineLevelCol((short)(maxLevelCol));
}
- public void setSelected(boolean flag) {
- CTSheetViews views = getSheetTypeSheetViews();
- for (CTSheetView view : views.getSheetViewArray()) {
- view.setTabSelected(flag);
- }
- }
-
protected CTSheetViews getSheetTypeSheetViews() {
if (worksheet.getSheetViews() == null) {
worksheet.setSheetViews(CTSheetViews.Factory.newInstance());
@@ -1128,30 +1406,76 @@
}
return worksheet.getSheetViews();
}
-
+
+ /**
+ * Returns a flag indicating whether this sheet is selected.
+ * <p>
+ * When only 1 sheet is selected and active, this value should be in synch with the activeTab value.
+ * In case of a conflict, the Start Part setting wins and sets the active sheet tab.
+ * </p>
+ * Note: multiple sheets can be selected, but only one sheet can be active at one time.
+ *
+ * @return <code>true</code> if this sheet is selected
+ */
public boolean isSelected() {
CTSheetView view = getDefaultSheetView();
return view != null && view.getTabSelected();
}
+ /**
+ * Sets a flag indicating whether this sheet is selected.
+ *
+ * <p>
+ * When only 1 sheet is selected and active, this value should be in synch with the activeTab value.
+ * In case of a conflict, the Start Part setting wins and sets the active sheet tab.
+ * </p>
+ * Note: multiple sheets can be selected, but only one sheet can be active at one time.
+ *
+ * @param value <code>true</code> if this sheet is selected
+ */
+ public void setSelected(boolean value) {
+ CTSheetViews views = getSheetTypeSheetViews();
+ for (CTSheetView view : views.getSheetViewArray()) {
+ view.setTabSelected(value);
+ }
+ }
+
+ /**
+ * Assign a cell comment to a cell region in this worksheet
+ *
+ * @param cellRef cell region
+ * @param comment the comment to assign
+ */
public void setCellComment(String cellRef, XSSFComment comment) {
CellReference cellReference = new CellReference(cellRef);
comment.setRow(cellReference.getRow());
- comment.setColumn((short)cellReference.getCol());
+ comment.setColumn(cellReference.getCol());
}
- public void setCellHyperlink(XSSFHyperlink hyperlink) {
+ protected void setCellHyperlink(XSSFHyperlink hyperlink) {
hyperlinks.add(hyperlink);
}
-
+
+ /**
+ * Return location of the active cell, e.g. <code>A1</code>.
+ *
+ * @return the location of the active cell.
+ */
public String getActiveCell() {
return getSheetTypeSelection().getActiveCell();
}
+ /**
+ * Sets location of the active cell
+ *
+ * @param cellRef the location of the active cell, e.g. <code>A1</code>..
+ */
public void setActiveCell(String cellRef) {
- getSheetTypeSelection().setActiveCell(cellRef);
- }
+ CTSelection ctsel = getSheetTypeSelection();
+ ctsel.setActiveCell(cellRef);
+ ctsel.setSqref(Arrays.asList(cellRef));
+ }
/**
* Does this sheet have any comments on it? We need to know,
@@ -1228,19 +1552,10 @@
}
private CTPageSetUpPr getSheetTypePageSetUpPr() {
- if (getSheetTypeSheetPr().getPageSetUpPr() == null) {
- getSheetTypeSheetPr().setPageSetUpPr(CTPageSetUpPr.Factory.newInstance());
- }
- return getSheetTypeSheetPr().getPageSetUpPr();
+ CTSheetPr sheetPr = getSheetTypeSheetPr();
+ return sheetPr.isSetPageSetUpPr() ? sheetPr.getPageSetUpPr() : sheetPr.addNewPageSetUpPr();
}
- protected CTSheetPr getSheetTypeSheetPr() {
- if (worksheet.getSheetPr() == null) {
- worksheet.setSheetPr(CTSheetPr.Factory.newInstance());
- }
- return worksheet.getSheetPr();
- }
-
private boolean removeRow(int startRow, int endRow, int n, int rownum) {
if (rownum >= (startRow + n) && rownum <= (endRow + n)) {
if (n > 0 && rownum > endRow) {
Modified: poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java?rev=699185&r1=699184&r2=699185&view=diff
==============================================================================
--- poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java (original)
+++ poi/branches/ooxml/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java Thu Sep 25 23:02:38 2008
@@ -129,7 +129,7 @@
throw new IOException("Unable to load styles - " + e.toString());
}
try {
- // Load shared strings
+ // Load themes
this.themes = XSSFRelation.THEME.loadAll(getCorePart());
} catch(Exception e) {
throw new IOException("Unable to load shared strings - " + e.toString());
@@ -195,7 +195,12 @@
}
}
- protected CTWorkbook getWorkbook() {
+ /**
+ * Return the underlying XML bean
+ *
+ * @return the underlying CTWorkbook bean
+ */
+ public CTWorkbook getWorkbook() {
return this.workbook;
}
@@ -265,8 +270,8 @@
return style;
}
- public DataFormat createDataFormat() {
- return getCreationHelper().createDataFormat();
+ public XSSFDataFormat createDataFormat() {
+ return (XSSFDataFormat)getCreationHelper().createDataFormat();
}
public XSSFFont createFont() {
@@ -287,7 +292,9 @@
}
public XSSFSheet createSheet(String sheetname) {
- return createSheet(sheetname, XSSFSheet.newSheetInstance());
+ if (doesContainsSheetName( sheetname, sheets.size() ))
+ throw new IllegalArgumentException( "The workbook already contains a sheet of this name" );
+ return createSheet(sheetname, XSSFSheet.newInstance());
}
public XSSFSheet createSheet(String sheetname, CTWorksheet worksheet) {
@@ -298,25 +305,18 @@
}
public XSSFSheet createDialogsheet(String sheetname, CTDialogsheet dialogsheet) {
- CTSheet sheet = addSheet(sheetname);
- XSSFDialogsheet wrapper = new XSSFDialogsheet(sheet, dialogsheet, this);
- this.sheets.add(wrapper);
- return wrapper;
+ CTSheet sheet = addSheet(sheetname);
+ XSSFDialogsheet wrapper = new XSSFDialogsheet(sheet, dialogsheet, this);
+ this.sheets.add(wrapper);
+ return wrapper;
}
private CTSheet addSheet(String sheetname) {
CTSheet sheet = workbook.getSheets().addNewSheet();
- if (sheetname != null) {
- sheet.setName(sheetname);
- }
+ sheet.setName(sheetname);
return sheet;
}
- public void dumpDrawingGroupRecords(boolean fat) {
- // TODO Auto-generated method stub
-
- }
-
public XSSFFont findFont(short boldWeight, short color, short fontHeight, String name, boolean italic, boolean strikeout, short typeOffset, byte underline) {
short fontNum=getNumberOfFonts();
for (short i = 0; i < fontNum; i++) {
@@ -373,13 +373,8 @@
return false;
}
- public byte[] getBytes() {
- // TODO Auto-generated method stub
- return null;
- }
-
- public CellStyle getCellStyleAt(short idx) {
- return stylesSource.getStyleAt(idx);
+ public XSSFCellStyle getCellStyleAt(short idx) {
+ return (XSSFCellStyle)stylesSource.getStyleAt(idx);
}
public Palette getCustomPalette() {
@@ -387,22 +382,6 @@
return null;
}
- /**
- * get the first tab that is displayed in the list of tabs in excel.
- */
- public int getFirstVisibleTab() {
- CTBookViews bookViews = workbook.getBookViews();
- CTBookView bookView = bookViews.getWorkbookViewArray(0);
- return (short) bookView.getActiveTab();
- }
- /**
- * deprecated Aug 2008
- * @deprecated - Misleading name - use getFirstVisibleTab()
- */
- public short getDisplayedTab() {
- return (short) getFirstVisibleTab();
- }
-
public XSSFFont getFontAt(short idx) {
return (XSSFFont)stylesSource.getFontAt(idx);
}
@@ -545,18 +524,44 @@
}
/**
- * sets the first tab that is displayed in the list of tabs
- * in excel.
- * @param index
+ * Gets the first tab that is displayed in the list of tabs in excel.
+ *
+ * @return integer that contains the index to the active sheet in this book view.
+ */
+ public int getFirstVisibleTab() {
+ CTBookViews bookViews = workbook.getBookViews();
+ CTBookView bookView = bookViews.getWorkbookViewArray(0);
+ return (short) bookView.getActiveTab();
+ }
+
+ /**
+ * Sets the first tab that is displayed in the list of tabs in excel.
+ *
+ * @param index integer that contains the index to the active sheet in this book view.
*/
public void setFirstVisibleTab(short index) {
CTBookViews bookViews = workbook.getBookViews();
CTBookView bookView= bookViews.getWorkbookViewArray(0);
bookView.setActiveTab(index);
}
+
/**
- * deprecated Aug 2008
- * @deprecated - Misleading name - use setFirstVisibleTab()
+ * Gets the first tab that is displayed in the list of tabs
+ * in excel.
+ * @return an integer that contains the index to the active sheet in this book view.
+ *
+ * @deprecated Aug 2008 - Misleading name - use #getFirstVisibleTab()
+ */
+ public short getDisplayedTab() {
+ return (short) getFirstVisibleTab();
+ }
+
+ /**
+ * sets the first tab that is displayed in the list of tabs
+ * in excel.
+ * @param index integer that contains the index to the active sheet in this book view.
+ *
+ * @deprecated Aug 2008 - Misleading name - use #setFirstVisibleTab()
*/
public void setDisplayedTab(short index) {
setFirstVisibleTab(index);
@@ -588,6 +593,8 @@
}
public void setSheetName(int sheet, String name) {
+ if (doesContainsSheetName(name, sheet ))
+ throw new IllegalArgumentException( "The workbook already contains a sheet of this name" );
this.workbook.getSheets().getSheetArray(sheet).setName(name);
}
@@ -765,4 +772,14 @@
public CreationHelper getCreationHelper() {
return new XSSFCreationHelper(this);
}
+
+ private boolean doesContainsSheetName(String name, int excludeSheetIdx) {
+ CTSheet[] ctSheetArray = workbook.getSheets().getSheetArray();
+ for (int i = 0; i < ctSheetArray.length; i++) {
+ if (excludeSheetIdx != i && name.equalsIgnoreCase(ctSheetArray[i].getName()))
+ return true;
+ }
+ return false;
+ }
+
}
Modified: poi/branches/ooxml/src/ooxml/testcases/org/apache/poi/xssf/model/TestCommentsTable.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/ooxml/testcases/org/apache/poi/xssf/model/TestCommentsTable.java?rev=699185&r1=699184&r2=699185&view=diff
==============================================================================
--- poi/branches/ooxml/src/ooxml/testcases/org/apache/poi/xssf/model/TestCommentsTable.java (original)
+++ poi/branches/ooxml/src/ooxml/testcases/org/apache/poi/xssf/model/TestCommentsTable.java Thu Sep 25 23:02:38 2008
@@ -233,8 +233,7 @@
assertEquals("Also POI",
sheet2.getRow(2).getCell(1).getCellComment().getAuthor());
- // TODO: fix xmlbeans so it doesn't eat newlines
- assertEquals("Nick Burch:This is a comment",
+ assertEquals("Nick Burch:\nThis is a comment",
sheet1.getRow(4).getCell(2).getCellComment().getString().getString());
}
Modified: poi/branches/ooxml/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFRow.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFRow.java?rev=699185&r1=699184&r2=699185&view=diff
==============================================================================
--- poi/branches/ooxml/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFRow.java (original)
+++ poi/branches/ooxml/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFRow.java Thu Sep 25 23:02:38 2008
@@ -17,14 +17,20 @@
package org.apache.poi.xssf.usermodel;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
import java.util.Iterator;
import junit.framework.TestCase;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
-import org.apache.poi.xssf.usermodel.TestXSSFCell.DummySharedStringSource;
import org.apache.poi.xssf.model.SharedStringsTable;
+import org.apache.poi.xssf.XSSFTestDataSamples;
+import org.apache.poi.hssf.usermodel.HSSFSheet;
+import org.apache.poi.hssf.usermodel.HSSFRow;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.hssf.usermodel.HSSFCell;
/**
* Tests for XSSFRow
@@ -121,45 +127,19 @@
assertEquals(-1, emptyRow.getFirstCellNum());
}
- public void testLastCellNum() {
- XSSFRow row = getSampleRow();
- assertEquals(100, row.getLastCellNum());
-
- Cell cell = row.getCell((short) 100);
- row.removeCell(cell);
- assertFalse(row.getLastCellNum() == (short) 100);
- }
-
- public void testRemoveCell() {
- XSSFRow row = getSampleRow();
-
- // Test removing the first cell
- Cell firstCell = row.getCell((short) 2);
- assertNotNull(firstCell);
- assertEquals(7, row.getPhysicalNumberOfCells());
- row.removeCell(firstCell);
- assertEquals(6, row.getPhysicalNumberOfCells());
- firstCell = row.getCell((short) 2);
- assertNull(firstCell);
-
- // Test removing the last cell
- Cell lastCell = row.getCell((short) 100);
- row.removeCell(lastCell);
- }
-
public void testGetSetHeight() {
XSSFRow row = getSampleRow();
// I assume that "ht" attribute value is in 'points', please verify that
// Test that no rowHeight is set
assertEquals((short) -1, row.getHeight());
- // Set a rowHeight in twips (1/20th of a point) and test the new value
+ // Set a rowHeight and test the new value
row.setHeight((short) 240);
- assertEquals((short) 240, row.getHeight());
- assertEquals(12F, row.getHeightInPoints());
+ assertEquals((short) 240.0, row.getHeight());
+ assertEquals((float)240.0, row.getHeightInPoints());
// Set a new rowHeight in points and test the new value
- row.setHeightInPoints(13F);
- assertEquals((float) 13, row.getHeightInPoints());
- assertEquals((short) 260, row.getHeight());
+ row.setHeightInPoints(13);
+ assertEquals((float) 13.0, row.getHeightInPoints());
+ assertEquals((short) 13.0, row.getHeight());
}
public void testGetSetZeroHeight() throws Exception {
@@ -248,4 +228,74 @@
wb.setSharedStringSource(new SharedStringsTable());
return new XSSFSheet(wb);
}
+
+ /**
+ * Test that XSSFRow.getLastCellNum is consistent with HSSFRow.getLastCellNum
+ */
+ public void testLastCellNum() {
+ HSSFWorkbook wb1 = new HSSFWorkbook();
+ XSSFWorkbook wb2 = new XSSFWorkbook();
+
+ HSSFSheet sheet1 = wb1.createSheet();
+ XSSFSheet sheet2 = wb2.createSheet();
+
+ for (int i = 0; i < 10; i++) {
+ HSSFRow row1 = sheet1.createRow(i);
+ XSSFRow row2 = sheet2.createRow(i);
+
+ for (int j = 0; j < 5; j++) {
+ //before adding a cell
+ assertEquals(row1.getLastCellNum(), row2.getLastCellNum());
+
+ HSSFCell cell1 = row1.createCell(j);
+ XSSFCell cell2 = row2.createCell(j);
+
+ //after adding a cell
+ assertEquals(row1.getLastCellNum(), row2.getLastCellNum());
+ }
+ }
+ }
+
+ public void testRemoveCell() {
+ XSSFRow row = getSampleRow();
+
+ // Test removing the first cell
+ Cell firstCell = row.getCell((short) 2);
+ assertNotNull(firstCell);
+ assertEquals(7, row.getPhysicalNumberOfCells());
+ row.removeCell(firstCell);
+ assertEquals(6, row.getPhysicalNumberOfCells());
+ firstCell = row.getCell((short) 2);
+ assertNull(firstCell);
+
+ // Test removing the last cell
+ Cell lastCell = row.getCell((short) 100);
+ row.removeCell(lastCell);
+ }
+
+ public void testFirstLastCellNum() {
+ XSSFWorkbook workbook = new XSSFWorkbook();
+ XSSFSheet sheet = workbook.createSheet();
+ XSSFRow row = sheet.createRow(0);
+ assertEquals(-1, row.getLastCellNum());
+ assertEquals(-1, row.getFirstCellNum());
+ row.createCell(1);
+ assertEquals(2, row.getLastCellNum());
+ assertEquals(1, row.getFirstCellNum());
+ row.createCell(3);
+ assertEquals(4, row.getLastCellNum());
+ assertEquals(1, row.getFirstCellNum());
+ row.removeCell(row.getCell(3));
+ assertEquals(2, row.getLastCellNum());
+ assertEquals(1, row.getFirstCellNum());
+ row.removeCell(row.getCell(1));
+ assertEquals(-1, row.getLastCellNum());
+ assertEquals(-1, row.getFirstCellNum());
+
+ workbook = XSSFTestDataSamples.writeOutAndReadBack(workbook);
+ sheet = workbook.getSheetAt(0);
+
+ assertEquals(-1, sheet.getRow(0).getLastCellNum());
+ assertEquals(-1, sheet.getRow(0).getFirstCellNum());
+ }
}
Modified: poi/branches/ooxml/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java?rev=699185&r1=699184&r2=699185&view=diff
==============================================================================
--- poi/branches/ooxml/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java (original)
+++ poi/branches/ooxml/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java Thu Sep 25 23:02:38 2008
@@ -30,6 +30,10 @@
import org.apache.poi.xssf.model.CommentsTable;
import org.apache.poi.xssf.model.StylesTable;
import org.apache.poi.xssf.usermodel.helpers.ColumnHelper;
+import org.apache.poi.hssf.usermodel.HSSFSheet;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.hssf.usermodel.HSSFRow;
+import org.apache.poi.hssf.usermodel.HSSFCell;
import org.openxml4j.opc.Package;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCol;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCols;
@@ -166,7 +170,7 @@
public void testGetSetRowBreaks() {
XSSFWorkbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("Sheet 1");
- assertNull(sheet.getRowBreaks());
+ assertEquals(0, sheet.getRowBreaks().length);
sheet.setRowBreak(1);
sheet.setRowBreak(15);
assertNotNull(sheet.getRowBreaks());
@@ -190,7 +194,7 @@
public void testGetSetColumnBreaks() {
XSSFWorkbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("Sheet 1");
- assertNull(sheet.getColumnBreaks());
+ assertEquals(0, sheet.getColumnBreaks().length);
sheet.setColumnBreak((short) 11);
assertNotNull(sheet.getColumnBreaks());
assertEquals(11, sheet.getColumnBreaks()[0]);
@@ -201,7 +205,7 @@
public void testRemoveColumnBreak() {
XSSFWorkbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("Sheet 1");
- assertNull(sheet.getColumnBreaks());
+ assertEquals(0, sheet.getColumnBreaks().length);
sheet.setColumnBreak((short) 11);
assertNotNull(sheet.getColumnBreaks());
sheet.setColumnBreak((short) 12);
@@ -858,4 +862,19 @@
assertEquals(zoom, 75);
}
+ public void testOutlineProperties() {
+ XSSFWorkbook wb = new XSSFWorkbook();
+
+ XSSFSheet sheet = wb.createSheet();
+
+ assertTrue(sheet.getRowSumsBelow());
+ assertTrue(sheet.getRowSumsRight());
+
+ sheet.setRowSumsBelow(false);
+ sheet.setRowSumsRight(false);
+
+ assertFalse(sheet.getRowSumsBelow());
+ assertFalse(sheet.getRowSumsRight());
+ }
+
}
Modified: poi/branches/ooxml/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java?rev=699185&r1=699184&r2=699185&view=diff
==============================================================================
--- poi/branches/ooxml/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java (original)
+++ poi/branches/ooxml/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java Thu Sep 25 23:02:38 2008
@@ -240,10 +240,10 @@
}
public void testFindFont(){
- //get dafault font and check against default value
+ //get default font and check against default value
XSSFWorkbook workbook = new XSSFWorkbook();
Font fontFind=workbook.findFont(Font.BOLDWEIGHT_NORMAL, IndexedColors.BLACK.getIndex(), (short)11, "Calibri", false, false, Font.SS_NONE, Font.U_NONE);
- assertNotNull(fontFind);
+ assertNotNull(fontFind);
//get default font, then change 2 values and check against different values (height changes)
Font font=workbook.createFont();
@@ -251,6 +251,7 @@
font.setUnderline(Font.U_DOUBLE);
StylesSource styleSource=new StylesTable();
long index=styleSource.putFont(font);
+ System.out.println("index="+index);
workbook.setStylesSource(styleSource);
fontFind=workbook.findFont(Font.BOLDWEIGHT_BOLD, IndexedColors.BLACK.getIndex(), (short)15, "Calibri", false, false, Font.SS_NONE, Font.U_DOUBLE);
assertNull(fontFind);
@@ -290,7 +291,6 @@
assertNotNull(fontAt);
}
-
public void testGetNumberOfFonts(){
XSSFWorkbook wb = new XSSFWorkbook();
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org