From 6a8bb2c748b0cef876af602efb968e9f44a0d605 Mon Sep 17 00:00:00 2001
From: Yegor Kozlov
+ POI 3.5 and later requires the JDK version 1.5 or later.
+ Versions prior to 3.5 require JDK 1.4+
+
@@ -114,6 +121,22 @@
The main targets of interest to our users are:
diff --git a/src/documentation/content/xdocs/spreadsheet/examples.xml b/src/documentation/content/xdocs/spreadsheet/examples.xml
index f683738a3..966a1626b 100755
--- a/src/documentation/content/xdocs/spreadsheet/examples.xml
+++ b/src/documentation/content/xdocs/spreadsheet/examples.xml
@@ -38,7 +38,7 @@
All sample source is available in SVN The BusinessPlan
application creates a sample business plan with three phases, weekly iterations and time highlighting. Demonstrates advanced cell formatting
(number and date formats, alignmnets, fills, borders) and various settings for organizing data in a sheet (freezed panes, groupped rows).
@@ -48,14 +48,14 @@
The Calendar
+ The Calendar
demo creates a multi sheet calendar. Each month is on a separate sheet.
The LoanCalculator
demo creates a simple loan calculator. Demonstrates advance usage of cell formulas and named ranges.
/junit/jars/junit-3.8.1.jar
lib
+
+
+ /dom4j/jars/dom4j-1.6.1.jar
+ ooxml-lib
+
+
+ /org.apache.xmlbeans/jars/xmlbeans-2.3.0.jar
+ ooxml-lib
+
+
+ /xmlbeans/jars/jsr173_1.0_api.jar
+ ooxml-lib
+
+
/org.apache.poi/jars/ooxml-schemas-1.0.jar
+ ooxml-lib
+
The TimesheetDemo
+ The Timesheet
demo creates a weekly timesheet with automatic calculation of total hours. Demonstrates advance usage of cell formulas.
diff --git a/src/documentation/content/xdocs/spreadsheet/formula.xml b/src/documentation/content/xdocs/spreadsheet/formula.xml
index 3dda9f181..3f319fce4 100644
--- a/src/documentation/content/xdocs/spreadsheet/formula.xml
+++ b/src/documentation/content/xdocs/spreadsheet/formula.xml
@@ -30,7 +30,7 @@
This document describes the current state of formula support in POI.
- The information in this document currently applies to the 2.0 version of POI.
+ The information in this document currently applies to the 3.5 version of POI.
Since this area is a work in progress, this document will be updated with new features as and
when they are added.
- We aim to support the complete excel grammer for formulas. Thus, the string that you pass in
+ We aim to support the complete excel grammar for formulas. Thus, the string that you pass in
to the setCellFormula call should be what you expect to type into excel. Also, note
that you should NOT add a "=" to the front of the string.
-
-
-
-
The task of parsing a formula string into an array of RPN ordered tokens is done by the - org.apache.poi.hssf.record.formula.FormulaParser class. This class implements a hand + org.apache.poi.ss.formula.FormulaParser class. This class implements a hand written recursive descent parser.
++ Formula tokens in Excel are stored in one of three possible operand classes : + Reference, Value and Array. Based on the location of a token, its class can change + in complicated and undocumented ways. While we have support for most cases, we + are not sure if we have covered all bases (since there is no documentation for this area.) + We would therefore like you to report any + occurrence of #VALUE! in a cell upon opening a POI generated workbook in excel. (Check that + typing the formula into Excel directly gives a valid result.) +
Check out the javadocs for details.
+ * Cells can be numeric, formula-based or string-based (text). The cell type + * specifies this. String cells cannot conatin numbers and numeric cells cannot + * contain strings (at least according to our model). Client apps should do the + * conversions themselves. Formula cells have the formula string, as well as + * the formula result, which can be numeric or string. + *
+ *+ * Cells should have their number (0 based) before being added to a row. + *
+ */ public interface Cell { /** @@ -27,7 +40,6 @@ public interface Cell { * @see #setCellType(int) * @see #getCellType() */ - public final static int CELL_TYPE_NUMERIC = 0; /** @@ -35,7 +47,6 @@ public interface Cell { * @see #setCellType(int) * @see #getCellType() */ - public final static int CELL_TYPE_STRING = 1; /** @@ -43,7 +54,6 @@ public interface Cell { * @see #setCellType(int) * @see #getCellType() */ - public final static int CELL_TYPE_FORMULA = 2; /** @@ -51,7 +61,6 @@ public interface Cell { * @see #setCellType(int) * @see #getCellType() */ - public final static int CELL_TYPE_BLANK = 3; /** @@ -59,7 +68,6 @@ public interface Cell { * @see #setCellType(int) * @see #getCellType() */ - public final static int CELL_TYPE_BOOLEAN = 4; /** @@ -67,32 +75,33 @@ public interface Cell { * @see #setCellType(int) * @see #getCellType() */ - public final static int CELL_TYPE_ERROR = 5; /** - * set the cell's number within the row (0 based) - * @param num short the cell number - */ - - void setCellNum(short num); - - /** - * @deprecated (Oct 2008) use {@link #getColumnIndex()} - */ - short getCellNum(); - - /** - * @return the cell's column index (zero based) + * Returns column index of this cell + * + * @return zero-based column index of a column in a sheet. */ int getColumnIndex(); + /** + * Returns row index of a row in the sheet that contains this cell + * + * @return zero-based row index of a row in the sheet that contains this cell + */ int getRowIndex(); + /** + * Returns the sheet this cell belongs to + * + * @return the sheet this cell belongs to + */ Sheet getSheet(); /** - * set the cells type (numeric, formula or string) + * Set the cells type (numeric, formula or string) + * + * @throws IllegalArgumentException if the specified cell type is invalid * @see #CELL_TYPE_NUMERIC * @see #CELL_TYPE_STRING * @see #CELL_TYPE_FORMULA @@ -100,23 +109,23 @@ public interface Cell { * @see #CELL_TYPE_BOOLEAN * @see #CELL_TYPE_ERROR */ - void setCellType(int cellType); /** - * @return the cell's type (e.g. numeric, formula or string) - * @see #CELL_TYPE_STRING - * @see #CELL_TYPE_NUMERIC - * @see #CELL_TYPE_FORMULA - * @see #CELL_TYPE_BOOLEAN - * @see #CELL_TYPE_BLANK - * @see #CELL_TYPE_ERROR + * Return the cell type. + * + * @return the cell type + * @see Cell#CELL_TYPE_BLANK + * @see Cell#CELL_TYPE_NUMERIC + * @see Cell#CELL_TYPE_STRING + * @see Cell#CELL_TYPE_FORMULA + * @see Cell#CELL_TYPE_BOOLEAN + * @see Cell#CELL_TYPE_ERROR */ - int getCellType(); /** - * set a numeric value for the cell + * Set a numeric value for the cell * * @param value the numeric value to set this cell to. For formulas we'll set the * precalculated value, for numerics we'll set its value. For other types we @@ -125,18 +134,25 @@ public interface Cell { void setCellValue(double value); /** - * set a date value for the cell. Excel treats dates as numeric so you will need to format the cell as - * a date. + * Set a boolean value for the cell * - * @param value the date value to set this cell to. For formulas we'll set the - * precalculated value, for numerics we'll set its value. For other types we - * will change the cell to a numeric cell and set its value. + * @param value the boolean value to set this cell to. For formulas we'll set the + * precalculated value, for booleans we'll set its value. For other types we + * will change the cell to a boolean cell and set its value. */ void setCellValue(Date value); /** - * set a date value for the cell. Excel treats dates as numeric so you will need to format the cell as + * Set a date value for the cell. Excel treats dates as numeric so you will need to format the cell as * a date. + *
+ * This will set the cell value based on the Calendar's timezone. As Excel
+ * does not support timezones this means that both 20:00+03:00 and
+ * 20:00-03:00 will be reported as the same value (20:00) even that there
+ * are 6 hours difference between the two times. This difference can be
+ * preserved by using setCellValue(value.getTime())
which will
+ * automatically shift the times to the default timezone.
+ *
+ * Note, this method only sets the formula string and does not calculate the formula value. + * To set the precalculated value use {@link #setCellValue(double)} or {@link #setCellValue(String)} + *
+ * + * @param formula the formula to set, e.g.SUM(C4:E4)
.
+ * If the argument is null
then the current formula is removed.
*/
void setCellFormula(String formula);
/**
- * Get the formula value of the cell.
+ * Return a formula for the cell, for example, SUM(C4:E4)
+ *
+ * @return a formula for the cell
+ * @throws IllegalStateException if the cell type returned by {@link #getCellType()} is not CELL_TYPE_FORMULA
*/
String getCellFormula();
/**
- * get the value of the cell as a number. For strings we throw an exception.
- * For blank cells we return a 0.
+ * Get the value of the cell as a number.
+ * + * For strings we throw an exception. For blank cells we return a 0. + * For formulas or error cells we return the precalculated value; + *
+ * @return the value of the cell as a number + * @throws IllegalStateException if the cell type returned by {@link #getCellType()} is CELL_TYPE_STRING + * @exception NumberFormatException if the cell value isn't a parsabledouble
.
+ * @see DataFormatter for turning this number into a string similar to that which Excel would render this number as.
*/
-
double getNumericCellValue();
/**
- * get the value of the cell as a date. For strings we throw an exception.
- * For blank cells we return a null.
+ * Get the value of the cell as a date.
+ * + * For strings we throw an exception. For blank cells we return a null. + *
+ * @return the value of the cell as a date + * @throws IllegalStateException if the cell type returned by {@link #getCellType()} is CELL_TYPE_STRING + * @exception NumberFormatException if the cell value isn't a parsabledouble
.
+ * @see DataFormatter for formatting this date into a string similar to how excel does.
*/
Date getDateCellValue();
/**
- * get the value of the cell as a string - for numeric cells we throw an exception.
- * For blank cells we return an empty string.
- * For formulaCells that are not string Formulas, we return empty String
+ * Get the value of the cell as a XSSFRichTextString
+ * + * For numeric cells we throw an exception. For blank cells we return an empty string. + * For formula cells we return the pre-calculated value. + *
+ * @return the value of the cell as a XSSFRichTextString */ - RichTextString getRichStringCellValue(); /** - * Get the value of the cell as a string - for numeric cells we throw an exception + * Get the value of the cell as a string *- * For blank cells we return an empty string. - * For formulaCells that are not string Formulas, we return empty String + * For numeric cells we throw an exception. For blank cells we return an empty string. + * For formulaCells that are not string Formulas, we return empty String. *
+ * @return the value of the cell as a string */ String getStringCellValue(); /** - * set a boolean value for the cell + * Set a boolean value for the cell * * @param value the boolean value to set this cell to. For formulas we'll set the * precalculated value, for booleans we'll set its value. For other types we * will change the cell to a boolean cell and set its value. */ - - void setCellValue(boolean value); + void setCellValue(boolean value); /** - * set a error value for the cell + * Set a error value for the cell * * @param value the error value to set this cell to. For formulas we'll set the - * precalculated value ??? IS THIS RIGHT??? , for errors we'll set + * precalculated value , for errors we'll set * its value. For other types we will change the cell to an error * cell and set its value. + * @see FormulaError */ - void setCellErrorValue(byte value); /** - * get the value of the cell as a boolean. For strings, numbers, and errors, we throw an exception. - * For blank cells we return a false. + * Get the value of the cell as a boolean. + *+ * For strings, numbers, and errors, we throw an exception. For blank cells we return a false. + *
+ * @return the value of the cell as a boolean + * @throws IllegalStateException if the cell type returned by {@link #getCellType()} + * is not CELL_TYPE_BOOLEAN, CELL_TYPE_BLANK or CELL_TYPE_FORMULA */ - boolean getBooleanCellValue(); /** - * get the value of the cell as an error code. For strings, numbers, and booleans, we throw an exception. + * Get the value of the cell as an error code. + *+ * For strings, numbers, and booleans, we throw an exception. * For blank cells we return a 0. + *
+ * + * @return the value of the cell as an error code + * @throws IllegalStateException if the cell type returned by {@link #getCellType()} isn't CELL_TYPE_ERROR + * @see FormulaError for error codes */ - byte getErrorCellValue(); /** - * set the style for the cell. The style should be an CellStyle created/retreived from + * Set the style for the cell. The style should be an CellStyle created/retreived from * the Workbook. * - * @param style reference contained in the workbook - * @see Workbook#createCellStyle() - * @see Workbook#getCellStyleAt(short) + * @param style reference contained in the workbook. + * If the value is null then the style information is removed causing the cell to used the default workbook style. + * @see org.apache.poi.ss.usermodel.Workbook#createCellStyle() */ - void setCellStyle(CellStyle style); /** - * get the style for the cell. This is a reference to a cell style contained in the workbook - * object. + * Return the cell's style. + * + * @return the cell's style. Always not-null. Default cell style has zero index and can be obtained as + *workbook.getCellStyleAt(0)
* @see Workbook#getCellStyleAt(short)
*/
-
CellStyle getCellStyle();
/**
@@ -273,14 +323,14 @@ public interface Cell {
/**
* Returns comment associated with this cell
*
- * @return comment associated with this cell
+ * @return comment associated with this cell or null
if not found
*/
Comment getCellComment();
/**
* Returns hyperlink associated with this cell
*
- * @return hyperlink associated with this cell or null if not found
+ * @return hyperlink associated with this cell or null
if not found
*/
Hyperlink getHyperlink();
diff --git a/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Name.java b/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Name.java
index 7ff4cbcf8..a0061b951 100644
--- a/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Name.java
+++ b/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Name.java
@@ -22,36 +22,43 @@ public interface Name {
/** Get the sheets name which this named range is referenced to
* @return sheet name, which this named range refered to
*/
-
String getSheetName();
/**
* gets the name of the named range
* @return named range name
*/
-
String getNameName();
/**
* sets the name of the named range
* @param nameName named range name to set
*/
-
void setNameName(String nameName);
/**
* gets the reference of the named range
* @return reference of the named range
*/
-
String getReference();
/**
* sets the reference of this named range
* @param ref the reference to set
*/
+ void setReference(String ref);
- void setReference(String ref);
-
+ /**
+ * Checks if this name is a function name
+ *
+ * @return true if this name is a function name
+ */
boolean isFunctionName();
+
+ /**
+ * Checks if this name points to a cell that no longer exists
+ *
+ * @return true if the name refers to a deleted cell, false otherwise
+ */
+ boolean isDeleted();
}
diff --git a/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Row.java b/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Row.java
index f63ee010b..2cb7b8b6d 100644
--- a/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Row.java
+++ b/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Row.java
@@ -20,132 +20,159 @@ package org.apache.poi.ss.usermodel;
import java.lang.Iterable;
import java.util.Iterator;
+/**
+ * High level representation of a row of a spreadsheet.
+ */
public interface Row extends Iterable
- * The cell that is returned is a CELL_TYPE_BLANK. The type can be changed
+ * The cell that is returned is a {@link Cell#CELL_TYPE_BLANK}. The type can be changed
* either through calling setCellValue
or setCellType
.
*
* @param column - the column number this cell represents
- *
* @return Cell a high level representation of the created cell.
+ * @throws IllegalArgumentException if columnIndex < 0
*/
Cell createCell(int column);
/**
* Use this to create new cells within the row and return it.
*
- * The cell that is returned is a CELL_TYPE_BLANK. The type can be changed + * The cell that is returned is a {@link Cell#CELL_TYPE_BLANK}. The type can be changed * either through calling setCellValue or setCellType. * * @param column - the column number this cell represents - * * @return Cell a high level representation of the created cell. + * @throws IllegalArgumentException if columnIndex < 0 */ Cell createCell(int column, int type); /** - * remove the Cell from this row. - * @param cell to remove + * Remove the Cell from this row. + * + * @param cell the cell to remove */ void removeCell(Cell cell); /** - * set the row number of this row. + * Set the row number of this row. + * * @param rowNum the row number (0-based) - * @throws IndexOutOfBoundsException if the row number is not within the range 0-65535. + * @throws IllegalArgumentException if rowNum < 0 */ - void setRowNum(int rowNum); /** - * get row number this row represents + * Get row number this row represents + * * @return the row number (0 based) */ - int getRowNum(); /** - * get the cell representing a given column (logical cell) 0-based. If you + * Get the cell representing a given column (logical cell) 0-based. If you * ask for a cell that is not defined....you get a null. * * @param cellnum 0 based column number * @return Cell representing that column or null if undefined. + * @see #getCell(int, org.apache.poi.ss.usermodel.Row.MissingCellPolicy) */ Cell getCell(int cellnum); /** - * Get the cell representing a given column (logical cell) - * 0-based. If you ask for a cell that is not defined, then - * your supplied policy says what to do + * Returns the cell at the given (0 based) index, with the specified {@link org.apache.poi.ss.usermodel.Row.MissingCellPolicy} * - * @param cellnum 0 based column number - * @param policy Policy on blank / missing cells - * @return representing that column or null if undefined + policy allows. + * @return the cell at the given (0 based) index + * @throws IllegalArgumentException if cellnum < 0 or the specified MissingCellPolicy is invalid + * @see Row#RETURN_NULL_AND_BLANK + * @see Row#RETURN_BLANK_AS_NULL + * @see Row#CREATE_NULL_AS_BLANK */ - public Cell getCell(int cellnum, MissingCellPolicy policy); + Cell getCell(int cellnum, MissingCellPolicy policy); /** - * get the number of the first cell contained in this row. - * @return short representing the first logical cell in the row, or -1 if the row does not contain any cells. + * Get the number of the first cell contained in this row. + * + * @return short representing the first logical cell in the row, + * or -1 if the row does not contain any cells. */ short getFirstCellNum(); /** - * gets the number of the last cell contained in this row PLUS ONE. - * @return short representing the last logical cell in the row PLUS ONE, or -1 if the row does not contain any cells. + * Gets the index of the last cell contained in this row PLUS ONE. 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: + *
+ * short minColIx = row.getFirstCellNum(); + * short maxColIx = row.getLastCellNum(); + * for(short colIx=minColIx; colIx<maxColIx; colIx++) { + * Cell cell = row.getCell(colIx); + * if(cell == null) { + * continue; + * } + * //... do something with cell + * } + *+ * + * @return short representing the last logical cell in the row PLUS ONE, + * or -1 if the row does not contain any cells. */ - short getLastCellNum(); /** - * gets the number of defined cells (NOT number of cells in the actual row!). + * Gets the number of defined cells (NOT number of cells in the actual row!). * That is to say if only columns 0,4,5 have values then there would be 3. + * * @return int representing the number of defined cells in the row. */ - int getPhysicalNumberOfCells(); /** - * set the row's height or set to ff (-1) for undefined/default-height. Set the height in "twips" or + * Set the row's height or set to ff (-1) for undefined/default-height. Set the height in "twips" or * 1/20th of a point. + * * @param height rowheight or 0xff for undefined (use sheet default) */ - void setHeight(short height); /** - * set whether or not to display this row with 0 height + * Set whether or not to display this row with 0 height + * * @param zHeight height is zero or not. */ void setZeroHeight(boolean zHeight); /** - * get whether or not to display this row with 0 height + * Get whether or not to display this row with 0 height + * * @return - zHeight height is zero or not. */ boolean getZeroHeight(); /** - * set the row's height in points. - * @param height row height in points + * Set the row's height in points. + * + * @param height the height in points.
-1
resets to the default height
*/
-
void setHeightInPoints(float height);
/**
- * get the row's height or ff (-1) for undefined/default-height in twips (1/20th of a point)
- * @return rowheight or 0xff for undefined (use sheet default)
+ * Get the row's height measured in twips (1/20th of a point). If the height is not set, the default worksheet value is returned,
+ * See {@link Sheet#getDefaultRowHeightInPoints()}
+ *
+ * @return row height measured in twips (1/20th of a point)
*/
-
short getHeight();
/**
- * get the row's height or ff (-1) for undefined/default-height in points (20*getHeight())
- * @return rowheight or 0xff for undefined (use sheet default)
+ * Returns row height measured in point size. If the height is not set, the default worksheet value is returned,
+ * See {@link Sheet#getDefaultRowHeightInPoints()}
+ *
+ * @return row height measured in point size
+ * @see Sheet#getDefaultRowHeightInPoints()
*/
-
float getHeightInPoints();
/**
@@ -158,7 +185,7 @@ public interface Row extends Iterable+ * 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. + *
+ */ public interface Sheet extends Iterablefalse
if the column is visible
*/
boolean isColumnHidden(int columnIndex);
/**
- * set the width (in units of 1/256th of a character width)
+ * Set the width (in units of 1/256th of a character width)
+ *
* @param columnIndex - the column to set (0-based)
* @param width - the width in units of 1/256th of a character width
*/
@@ -119,72 +130,74 @@ public interface Sheet extends Iterabletrue
if the sheet displays Automatic Page Breaks.
*/
-
void setAutobreaks(boolean b);
/**
- * set whether to display the guts or not
+ * Set whether to display the guts or not
*
- * @param b guts or no guts (or glory)
+ * @param value - guts or no guts
*/
-
- void setDisplayGuts(boolean b);
+ void setDisplayGuts(boolean value);
/**
- * fit to page option is on
- * @param b fit or not
+ * Flag indicating whether the Fit to Page print option is enabled.
+ *
+ * @param value true
if the Fit to Page print option is enabled.
*/
-
- void setFitToPage(boolean b);
+ void setFitToPage(boolean value);
/**
- * set if row summaries appear below detail in the outline
- * @param b below or not
+ * Flag indicating whether summary rows appear below detail in an outline, when applying an outline.
+ *
+ * + * When true a summary row is inserted below the detailed data being summarized and a + * new outline level is established on that row. + *
+ *+ * When false a summary row is inserted above the detailed data being summarized and a new outline level + * is established on that row. + *
+ * @param valuetrue
if row summaries appear below detail in the outline
*/
-
- void setRowSumsBelow(boolean b);
+ void setRowSumsBelow(boolean value);
/**
- * set if col summaries appear right of the detail in the outline
- * @param b right or not
+ * Flag indicating whether summary columns appear to the right of detail in an outline, when applying an outline.
+ *
+ * + * 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. + *
+ *+ * 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. + *
+ * @param valuetrue
if col summaries appear right of the detail in the outline
*/
-
- void setRowSumsRight(boolean b);
+ void setRowSumsRight(boolean value);
/**
- * show automatic page breaks or not
- * @return whether to show auto page breaks
+ * Flag indicating whether the sheet displays Automatic Page Breaks.
+ *
+ * @return true
if the sheet displays Automatic Page Breaks.
*/
-
boolean getAutobreaks();
/**
- * get whether to display the guts or not
+ * Get whether to display the guts or not,
+ * default value is true
*
- * @return guts or no guts (or glory)
+ * @return boolean - guts or no guts
*/
-
boolean getDisplayGuts();
/**
- * fit to page option is on
- * @return fit or not
+ * Flag indicating whether the Fit to Page print option is enabled.
+ *
+ * @return true
if the Fit to Page print option is enabled.
*/
-
boolean getFitToPage();
/**
- * get if row summaries appear below detail in the outline
- * @return below or not
+ * Flag indicating whether summary rows appear below detail in an outline, when applying an outline.
+ *
+ * + * When true a summary row is inserted below the detailed data being summarized and a + * new outline level is established on that row. + *
+ *+ * When false a summary row is inserted above the detailed data being summarized and a new outline level + * is established on that row. + *
+ * @returntrue
if row summaries appear below detail in the outline
*/
-
boolean getRowSumsBelow();
/**
- * get if col summaries appear right of the detail in the outline
- * @return right or not
+ * Flag indicating whether summary columns appear to the right of detail in an outline, when applying an outline.
+ *
+ * + * 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. + *
+ *+ * 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. + *
+ * @returntrue
if col summaries appear right of the detail in the outline
*/
-
boolean getRowSumsRight();
/**
- * Returns whether gridlines are printed.
- * @return Gridlines are printed
+ * Gets the flag indicating whether this sheet displays the lines
+ * between rows and columns to make editing and reading easier.
+ *
+ * @return true
if this sheet displays gridlines.
+ * @see #isPrintGridlines() to check if printing of gridlines is turned on or off
*/
boolean isPrintGridlines();
/**
- * Turns on or off the printing of gridlines.
- * @param newPrintGridlines boolean to turn on or off the printing of
- * gridlines
+ * Sets the flag indicating whether this sheet should display the lines
+ * between rows and columns to make editing and reading easier.
+ * To turn printing of gridlines use {@link #setPrintGridlines(boolean)}
+ *
+ *
+ * @param show true
if this sheet should display gridlines.
+ * @see #setPrintGridlines(boolean)
*/
- void setPrintGridlines(boolean newPrintGridlines);
+ void setPrintGridlines(boolean show);
/**
* Gets the print setup object.
+ *
* @return The user model for the print setup object.
*/
PrintSetup getPrintSetup();
/**
* Gets the user model for the default document header.
- * Note that XSSF offers more kinds of document
- * headers than HSSF does
- * @return The Document header.
+ * + * Note that XSSF offers more kinds of document headers than HSSF does + *
+ * @return the document header. */ Header getHeader(); /** * Gets the user model for the default document footer. - * Note that XSSF offers more kinds of document - * footers than HSSF does. - * @return The Document footer. + * Note that XSSF offers more kinds of document footers than HSSF does. + * + * @return the document footer. */ Footer getFooter(); /** - * Sets whether sheet is selected. - * @param sel Whether to select the sheet or deselect the sheet. + * Sets a flag indicating whether this sheet is selected. + *+ * Note: multiple sheets can be selected, but only one sheet can be active at one time. + *
+ * @param valuetrue
if this sheet is selected
+ * @see Workbook#setActiveSheet(int)
*/
- void setSelected(boolean sel);
+ void setSelected(boolean value);
/**
* Gets the size of the margin in inches.
+ *
* @param margin which margin to get
* @return the size of the margin
*/
@@ -335,6 +395,7 @@ public interface Sheet extends Iterable* 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 */ - void autoSizeColumn(short column); + void autoSizeColumn(int column); + + /** + * 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 + */ + void autoSizeColumn(int column, boolean useMergedCells); /** * Returns cell comment for the specified row and column diff --git a/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Workbook.java b/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Workbook.java index 82ef89482..5023825b4 100644 --- a/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Workbook.java +++ b/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Workbook.java @@ -23,6 +23,11 @@ import java.util.List; import org.apache.poi.ss.usermodel.Row.MissingCellPolicy; +/** + * High level representation of a Excel workbook. This is the first object most users + * will construct whether they are reading or writing a workbook. It is also the + * top level object for creating new sheets/etc. + */ public interface Workbook { /** Extended windows meta file */ @@ -43,114 +48,143 @@ public interface Workbook { /** Device independent bitmap */ public static final int PICTURE_TYPE_DIB = 7; + /** + * Convenience method to get the active sheet. The active sheet is is the sheet + * which is currently displayed when the workbook is viewed in Excel. + * 'Selected' sheet(s) is a distinct concept. + * + * @return the index of the active sheet (0-based) + */ int getActiveSheetIndex(); + + /** + * Convenience method to set the active sheet. The active sheet is is the sheet + * which is currently displayed when the workbook is viewed in Excel. + * 'Selected' sheet(s) is a distinct concept. + * + * @param sheetIndex index of the active sheet (0-based) + */ void setActiveSheet(int sheetIndex); + /** + * Gets the first tab that is displayed in the list of tabs in excel. + * + * @return the first tab that to display in the list of tabs (0-based). + */ int getFirstVisibleTab(); + + /** + * Sets the first tab that is displayed in the list of tabs in excel. + * + * @param sheetIndex the first tab that to display in the list of tabs (0-based) + */ void setFirstVisibleTab(int sheetIndex); /** - * sets the order of appearance for a given sheet. + * Sets the order of appearance for a given sheet. * * @param sheetname the name of the sheet to reorder * @param pos the position that we want to insert the sheet into (0 based) */ - void setSheetOrder(String sheetname, int pos); /** - * sets the tab whose data is actually seen when the sheet is opened. + * Sets the tab whose data is actually seen when the sheet is opened. * This may be different from the "selected sheet" since excel seems to * allow you to show the data of one sheet when another is seen "selected" * in the tabs (at the bottom). + * * @see Sheet#setSelected(boolean) - * @param index + * @param index the index of the sheet to select (0 based) */ void setSelectedTab(short index); /** - * set the sheet name. - * Will throw IllegalArgumentException if the name is greater than 31 chars - * or contains /\?*[] + * Set the sheet name. + * * @param sheet number (0 based) + * @throws IllegalArgumentException if the name is greater than 31 chars or contains/\?*[]
*/
void setSheetName(int sheet, String name);
/**
- * get the sheet name
- * @param sheet Number
+ * Set the sheet name
+ *
+ * @param sheet sheet number (0 based)
* @return Sheet name
*/
-
String getSheetName(int sheet);
- /** Returns the index of the sheet by his name
+ /**
+ * Returns the index of the sheet by his name
+ *
* @param name the sheet name
* @return index of the sheet (0 based)
*/
int getSheetIndex(String name);
- /** Returns the index of the given sheet
+ /**
+ * Returns the index of the given sheet
+ *
* @param sheet the sheet to look up
* @return index of the sheet (0 based)
*/
int getSheetIndex(Sheet sheet);
/**
- * create an Sheet for this Workbook, adds it to the sheets and returns
+ * Sreate an Sheet for this Workbook, adds it to the sheets and returns
* the high level representation. Use this to create new sheets.
*
* @return Sheet representing the new sheet.
*/
-
Sheet createSheet();
/**
- * create an Sheet from an existing sheet in the Workbook.
- *
- * @return Sheet representing the cloned sheet.
- */
-
- Sheet cloneSheet(int sheetNum);
-
- /**
- * create an Sheet for this Workbook, adds it to the sheets and returns
+ * Create an Sheet for this Workbook, adds it to the sheets and returns
* the high level representation. Use this to create new sheets.
*
- * @param sheetname sheetname to set for the sheet.
+ * @param sheetname sheetname to set for the sheet.
* @return Sheet representing the new sheet.
+ * @throws IllegalArgumentException if the name is greater than 31 chars or contains /\?*[]
*/
-
Sheet createSheet(String sheetname);
/**
- * get the number of spreadsheets in the workbook (this will be three after serialization)
- * @return number of sheets
+ * Create an Sheet from an existing sheet in the Workbook.
+ *
+ * @return Sheet representing the cloned sheet.
*/
+ Sheet cloneSheet(int sheetNum);
+
+ /**
+ * Get the number of spreadsheets in the workbook
+ *
+ * @return the number of sheets
+ */
int getNumberOfSheets();
/**
* Get the Sheet object at the given index.
+ *
* @param index of the sheet number (0-based physical & logical)
* @return Sheet at the provided index
*/
-
Sheet getSheetAt(int index);
/**
* Get sheet with the given name
+ *
* @param name of the sheet
- * @return Sheet with the name provided or null if it does not exist
+ * @return Sheet with the name provided or null
if it does not exist
*/
-
Sheet getSheet(String name);
/**
- * removes sheet at the given index
- * @param index of the sheet (0-based)
+ * Removes sheet at the given index
+ *
+ * @param index of the sheet to remove (0-based)
*/
-
void removeSheetAt(int index);
/**
@@ -181,79 +215,111 @@ public interface Workbook {
void setRepeatingRowsAndColumns(int sheetIndex, int startColumn, int endColumn, int startRow, int endRow);
/**
- * create a new Font and add it to the workbook's font table
+ * Create a new Font and add it to the workbook's font table
+ *
* @return new font object
*/
-
Font createFont();
/**
* Finds a font that matches the one with the supplied attributes
+ *
+ * @return the font with the matched attributes or null
*/
Font findFont(short boldWeight, short color, short fontHeight, String name, boolean italic, boolean strikeout, short typeOffset, byte underline);
/**
- * get the number of fonts in the font table
+ * Get the number of fonts in the font table
+ *
* @return number of fonts
*/
-
short getNumberOfFonts();
/**
- * get the font at the given index number
- * @param idx index number
- * @return XSSFFont at the index
+ * Get the font at the given index number
+ *
+ * @param idx index number (0-based)
+ * @return font at the index
*/
-
Font getFontAt(short idx);
/**
- * create a new Cell style and add it to the workbook's style table
+ * Create a new Cell style and add it to the workbook's style table
+ *
* @return the new Cell Style object
*/
-
CellStyle createCellStyle();
/**
- * get the number of styles the workbook contains
+ * Get the number of styles the workbook contains
+ *
* @return count of cell styles
*/
-
short getNumCellStyles();
/**
- * get the cell style object at the given index
- * @param idx index within the set of styles
+ * Get the cell style object at the given index
+ *
+ * @param idx index within the set of styles (0-based)
* @return CellStyle object at the index
*/
-
CellStyle getCellStyleAt(short idx);
/**
- * Method write - write out this workbook to an Outputstream. Constructs
- * a new POI POIFSFileSystem, passes in the workbook binary representation and
- * writes it out.
- *
- * @param stream - the java OutputStream you wish to write the XLS to
+ * Write out this workbook to an Outputstream.
*
+ * @param stream - the java OutputStream you wish to write to
* @exception IOException if anything can't be written.
- * @see org.apache.poi.poifs.filesystem.POIFSFileSystem
*/
-
void write(OutputStream stream) throws IOException;
- /** gets the total number of named ranges in the workboko
+ /**
+ * Gets the total number of named ranges in the workbook
+ *
* @return number of named ranges
*/
int getNumberOfNames();
- /** gets the Named range
- * @param index position of the named range
+ /**
+ * Gets the Named range
+ *
+ * @param index position of the named range (0-based)
* @return named range high level
*/
Name getNameAt(int index);
/**
+ * Creates a new named range in this workbook
+ *
+ * @return new named range object
+ */
+ Name createName();
+
+ /**
+ * Gets the named range index by his name
+ * Note:Excel named ranges are case-insensitive and
+ * this method performs a case-insensitive search.
+ *
+ * @param name named range name
+ * @return named range index
+ */
+ int getNameIndex(String name);
+
+ /**
+ * Remove the named range by his index
+ *
+ * @param index named range index (0 based)
+ */
+ void removeName(int index);
+
+ /**
+ * Remove the named range by his name
+ *
+ * @param name named range name
+ */
+ void removeName(String name);
+
+ /**
* Sets the printarea for the sheet provided
* * i.e. Reference = $A$1:$B$2 @@ -274,7 +340,9 @@ public interface Workbook { void setPrintArea(int sheetIndex, int startColumn, int endColumn, int startRow, int endRow); /** - * Retrieves the reference for the printarea of the specified sheet, the sheet name is appended to the reference even if it was not specified. + * Retrieves the reference for the printarea of the specified sheet, + * the sheet name is appended to the reference even if it was not specified. + * * @param sheetIndex Zero-based sheet index (0 Represents the first sheet to keep consistent with java) * @return String Null if no print area has been defined */ @@ -282,6 +350,7 @@ public interface Workbook { /** * Delete the printarea for the sheet specified + * * @param sheetIndex Zero-based sheet index (0 = First Sheet) */ void removePrintArea(int sheetIndex); @@ -289,56 +358,43 @@ public interface Workbook { /** * Retrieves the current policy on what to do when * getting missing or blank cells from a row. + *
* The default is to return blank and null cells. * {@link MissingCellPolicy} + *
*/ MissingCellPolicy getMissingCellPolicy(); - /** + + /** * Sets the policy on what to do when * getting missing or blank cells from a row. + * * This will then apply to all calls to * {@link Row#getCell(int)} }. See * {@link MissingCellPolicy} */ void setMissingCellPolicy(MissingCellPolicy missingCellPolicy); - /** creates a new named range and add it to the model - * @return named range high level - */ - Name createName(); - - /** gets the named range index by his name - * Note:Excel named ranges are case-insensitive and - * this method performs a case-insensitive search. - * - * @param name named range name - * @return named range index - */ - int getNameIndex(String name); - - /** remove the named range by his index - * @param index named range index (0 based) - */ - void removeName(int index); - /** * Returns the instance of DataFormat for this workbook. + * * @return the DataFormat object */ DataFormat createDataFormat(); - /** remove the named range by his name - * @param name named range name - */ - void removeName(String name); - /** * Adds a picture to the workbook. * * @param pictureData The bytes of the picture - * @param format The format of the picture. One ofPICTURE_TYPE_*
+ * @param format The format of the picture.
*
* @return the index to this picture (1 based).
+ * @see #PICTURE_TYPE_EMF
+ * @see #PICTURE_TYPE_WMF
+ * @see #PICTURE_TYPE_PICT
+ * @see #PICTURE_TYPE_JPEG
+ * @see #PICTURE_TYPE_PNG
+ * @see #PICTURE_TYPE_DIB
*/
int addPicture(byte[] pictureData, int format);
@@ -351,51 +407,50 @@ public interface Workbook {
/**
* Returns an object that handles instantiating concrete
- * classes of the various instances one needs for
- * HSSF and XSSF.
- * Works around a major shortcoming in Java, where we
- * can't have static methods on interfaces or abstract
- * classes.
+ * classes of the various instances one needs for HSSF and XSSF.
*/
CreationHelper getCreationHelper();
/**
* Check whether a sheet is hidden.
- * Note that a sheet could instead be
- * set to be very hidden, which is different
+ * + * Note that a sheet could instead be set to be very hidden, which is different * ({@link #isSheetVeryHidden(int)}) + *
* @param sheetIx Number * @return True if sheet is hidden */ - public boolean isSheetHidden(int sheetIx) ; + boolean isSheetHidden(int sheetIx) ; /** * Check whether a sheet is very hidden. - * This is different from the normal - * hidden status + *+ * This is different from the normal hidden status * ({@link #isSheetHidden(int)}) - * @param sheetIx Number - * @return True if sheet is very hidden + *
+ * @param sheetIx sheet index to check + * @returntrue
if sheet is very hidden
*/
- public boolean isSheetVeryHidden(int sheetIx);
+ boolean isSheetVeryHidden(int sheetIx);
/**
* Hide or unhide a sheet
*
- * @param sheetIx The sheet index
+ * @param sheetIx the sheet index (0-based)
* @param hidden True to mark the sheet as hidden, false otherwise
*/
- public void setSheetHidden(int sheetIx, boolean hidden);
+ void setSheetHidden(int sheetIx, boolean hidden);
/**
* Hide or unhide a sheet.
+ * * 0 = not hidden * 1 = hidden * 2 = very hidden. - * + ** @param sheetIx The sheet number * @param hidden 0 for not hidden, 1 for hidden, 2 for very hidden */ - public void setSheetHidden(int sheetIx, int hidden); + void setSheetHidden(int sheetIx, int hidden); } 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 edbae8376..f3f9c17e1 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java @@ -343,13 +343,6 @@ public final class XSSFCell implements Cell { if(cell.isSetV()) cell.unsetV(); } - /** - * @deprecated use {@link #getColumnIndex()} - */ - public short getCellNum() { - return (short)getColumnIndex(); - } - /** * Returns column index of this cell * @@ -584,16 +577,7 @@ public final class XSSFCell implements Cell { * * @param num column index of this cell */ - public void setCellNum(int num) { - setCellNum((short)num); - } - - /** - * Sets column index of this cell - * - * @param num column index of this cell - */ - public void setCellNum(short num) { + protected void setCellNum(int num) { checkBounds(num); cellNum = num; cell.setR(formatPosition()); 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 7613c87cf..d2f781bb2 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java @@ -252,7 +252,7 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet { * * @param column the column index */ - public void autoSizeColumn(short column) { + public void autoSizeColumn(int column) { autoSizeColumn(column, false); } @@ -269,7 +269,7 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet { * @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) { + public void autoSizeColumn(int column, boolean useMergedCells) { double width = ColumnHelper.getColumnWidth(this, column, useMergedCells); if(width != -1){ columnHelper.setColBestFit(column, true); @@ -932,7 +932,7 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet { /** * Group between (0 based) columns */ - public void groupColumn(short fromColumn, short toColumn) { + public void groupColumn(int fromColumn, int toColumn) { groupColumn1Based(fromColumn+1, toColumn+1); } private void groupColumn1Based(int fromColumn, int toColumn) { @@ -1231,7 +1231,7 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet { } } - public void setColumnGroupCollapsed(short columnNumber, boolean collapsed) { + public void setColumnGroupCollapsed(int columnNumber, boolean collapsed) { // TODO Auto-generated method stub } @@ -1261,7 +1261,7 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet { columnHelper.setColWidth(columnIndex, (double)width/256); } - public void setDefaultColumnStyle(short column, CellStyle style) { + public void setDefaultColumnStyle(int column, CellStyle style) { columnHelper.setColDefaultStyle(column, style); } @@ -1465,7 +1465,7 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet { getSheetTypeSheetView().setTopLeftCell(cellRef); } - public void ungroupColumn(short fromColumn, short toColumn) { + public void ungroupColumn(int fromColumn, int toColumn) { CTCols cols = worksheet.getColsArray(0); for (int index = fromColumn; index <= toColumn; index++) { CTCol col = columnHelper.getColumn(index, false);