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 2011/02/11 11:03:26 UTC
svn commit: r1069730 - in /poi/trunk/src:
documentation/content/xdocs/status.xml
java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java
testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java
Author: yegor
Date: Fri Feb 11 10:03:25 2011
New Revision: 1069730
URL: http://svn.apache.org/viewvc?rev=1069730&view=rev
Log:
fixed HSSFWorkbook.createCellStyle to throw exception if the maximum number of cell styles was exceeded
Modified:
poi/trunk/src/documentation/content/xdocs/status.xml
poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java
poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java
Modified: poi/trunk/src/documentation/content/xdocs/status.xml
URL: http://svn.apache.org/viewvc/poi/trunk/src/documentation/content/xdocs/status.xml?rev=1069730&r1=1069729&r2=1069730&view=diff
==============================================================================
--- poi/trunk/src/documentation/content/xdocs/status.xml (original)
+++ poi/trunk/src/documentation/content/xdocs/status.xml Fri Feb 11 10:03:25 2011
@@ -34,6 +34,7 @@
<changes>
<release version="3.8-beta1" date="2010-??-??">
+ <action dev="poi-developers" type="fix">fixed HSSFWorkbook.createCellStyle to throw exception if the maximum number of cell styles was exceeded</action>
<action dev="poi-developers" type="fix">50539 - Better fix for html-style br tags (invalid XML) inside XSSF documents</action>
<action dev="poi-developers" type="add">49928 - allow overridden built-in formats in HSSFCellStyle</action>
<action dev="POI-DEVELOPERS" type="add">50607 - Added implementation for CLEAN(), CHAR() and ADDRESS()</action>
Modified: poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java?rev=1069730&r1=1069729&r2=1069730&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java Fri Feb 11 10:03:25 2011
@@ -57,7 +57,6 @@ import org.apache.poi.hssf.record.aggreg
import org.apache.poi.hssf.record.common.UnicodeString;
import org.apache.poi.ss.formula.ptg.Area3DPtg;
import org.apache.poi.ss.formula.ptg.MemFuncPtg;
-import org.apache.poi.ss.formula.ptg.NameXPtg;
import org.apache.poi.ss.formula.ptg.OperandPtg;
import org.apache.poi.ss.formula.ptg.Ptg;
import org.apache.poi.ss.formula.ptg.Ref3DPtg;
@@ -68,7 +67,6 @@ import org.apache.poi.poifs.filesystem.D
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.formula.udf.AggregatingUDFFinder;
import org.apache.poi.ss.formula.udf.UDFFinder;
-import org.apache.poi.ss.usermodel.CreationHelper;
import org.apache.poi.ss.usermodel.Row.MissingCellPolicy;
import org.apache.poi.ss.formula.FormulaType;
import org.apache.poi.ss.util.WorkbookUtil;
@@ -92,6 +90,16 @@ public final class HSSFWorkbook extends
private static final int MAX_ROW = 0xFFFF;
private static final short MAX_COLUMN = (short)0x00FF;
+ /**
+ * The maximum number of cell styles in a .xls workbook.
+ * The 'official' limit is 4,000, but POI allows a slightly larger number.
+ * This extra delta takes into account built-in styles that are automatically
+ * created for new workbooks
+ *
+ * See http://office.microsoft.com/en-us/excel-help/excel-specifications-and-limits-HP005199291.aspx
+ */
+ private static final int MAX_STYLES = 4030;
+
private static final int DEBUG = POILogger.DEBUG;
/**
@@ -1123,12 +1131,19 @@ public final class HSSFWorkbook extends
}
/**
- * 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.
+ * You can define up to 4000 unique styles in a .xls workbook.
+ *
* @return the new Cell Style object
+ * @throws IllegalStateException if the maximum number of cell styles exceeded the limit
*/
public HSSFCellStyle createCellStyle()
{
+ if(workbook.getNumExFormats() == MAX_STYLES) {
+ throw new IllegalStateException("The maximum number of cell styles was exceeded. " +
+ "You can define up to 4000 styles in a .xls workbook");
+ }
ExtendedFormatRecord xfr = workbook.createCellXF();
short index = (short) (getNumCellStyles() - 1);
HSSFCellStyle style = new HSSFCellStyle(index, xfr, this);
Modified: poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java?rev=1069730&r1=1069729&r2=1069730&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java Fri Feb 11 10:03:25 2011
@@ -559,4 +559,23 @@ public final class TestHSSFWorkbook exte
assertEquals("replaceMe", cell .getRichStringCellValue().getString());
}
}
+ public void testCellStylesLimit() {
+ HSSFWorkbook wb = new HSSFWorkbook();
+ int numBuiltInStyles = wb.getNumCellStyles();
+ int MAX_STYLES = 4030;
+ int limit = MAX_STYLES - numBuiltInStyles;
+ for(int i=0; i < limit; i++){
+ HSSFCellStyle style = wb.createCellStyle();
+ }
+
+ assertEquals(MAX_STYLES, wb.getNumCellStyles());
+ try {
+ HSSFCellStyle style = wb.createCellStyle();
+ fail("expected exception");
+ } catch (IllegalStateException e){
+ assertEquals("The maximum number of cell styles was exceeded. " +
+ "You can define up to 4000 styles in a .xls workbook", e.getMessage());
+ }
+ assertEquals(MAX_STYLES, wb.getNumCellStyles());
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org