mirror of https://github.com/apache/poi.git
added SpreadsheetVersion enum to hold version-specific properties such as maximum number of rows and columns, etc.
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@761723 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
0b3c4a8e74
commit
05c02a42af
|
@ -0,0 +1,122 @@
|
|||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.ss;
|
||||
|
||||
import org.apache.poi.ss.util.CellReference;
|
||||
|
||||
/**
|
||||
* This enum allows spreadsheets from multiple Excel versions to be handled by the common code.
|
||||
* Properties of this enum correspond to attributes of the <i>spreadsheet</i> that are easily
|
||||
* discernable to the user. It is not intended to deal with low-level issues like file formats.
|
||||
* <p/>
|
||||
*
|
||||
* For internal POI use only
|
||||
*
|
||||
* @author Josh Micich
|
||||
* @author Yegor Kozlov
|
||||
*/
|
||||
public enum SpreadsheetVersion {
|
||||
/**
|
||||
* Excel97 format aka BIFF8
|
||||
* <ul>
|
||||
* <li>The total number of available columns is 256 (2^8)</li>
|
||||
* <li>The total number of available rows is 64k (2^16)</li>
|
||||
* <li>The maximum number of arguments to a function is 30</li>
|
||||
* <li>Number of conditional format conditions on a cell is 3</li>
|
||||
* </ul>
|
||||
*/
|
||||
EXCEL97(0x10000, 0x0100, 30, 3),
|
||||
|
||||
/**
|
||||
* Excel2007
|
||||
*
|
||||
* <ul>
|
||||
* <li>The total number of available columns is 16K (2^14)</li>
|
||||
* <li>The total number of available rows is 1M (2^20)</li>
|
||||
* <li>The maximum number of arguments to a function is 255</li>
|
||||
* <li>Number of conditional format conditions on a cell is unlimited
|
||||
* (actually limited by available memory in Excel)</li>
|
||||
* <ul>
|
||||
*/
|
||||
EXCEL2007(0x100000, 0x4000, 255, Integer.MAX_VALUE);
|
||||
|
||||
private final int _maxRows;
|
||||
private final int _maxColumns;
|
||||
private final int _maxFunctionArgs;
|
||||
private final int _maxCondFormats;
|
||||
|
||||
private SpreadsheetVersion(int maxRows, int maxColumns, int maxFunctionArgs, int maxCondFormats) {
|
||||
_maxRows = maxRows;
|
||||
_maxColumns = maxColumns;
|
||||
_maxFunctionArgs = maxFunctionArgs;
|
||||
_maxCondFormats = maxCondFormats;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the maximum number of usable rows in each spreadsheet
|
||||
*/
|
||||
public int getMaxRows() {
|
||||
return _maxRows;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the last (maximum) valid row index, equals to <code> getMaxRows() - 1 </code>
|
||||
*/
|
||||
public int getLastRowIndex() {
|
||||
return _maxRows - 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the maximum number of usable columns in each spreadsheet
|
||||
*/
|
||||
public int getMaxColumns() {
|
||||
return _maxColumns;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the last (maximum) valid column index, equals to <code> getMaxColumns() - 1 </code>
|
||||
*/
|
||||
public int getLastColumnIndex() {
|
||||
return _maxColumns - 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the maximum number arguments that can be passed to a multi-arg
|
||||
* function (e.g. COUNTIF)
|
||||
*/
|
||||
public int getMaxFunctionArgs() {
|
||||
return _maxFunctionArgs;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return the maximum number of conditional format conditions on a cell
|
||||
*/
|
||||
public int getMaxConditionalFormats() {
|
||||
return _maxCondFormats;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return the last valid column index in a ALPHA-26 representation
|
||||
* ( <code>IV</code> or <code>XFD</code>).
|
||||
*/
|
||||
public String getLastColumnName() {
|
||||
return CellReference.convertNumToColString(getLastColumnIndex());
|
||||
}
|
||||
}
|
|
@ -388,7 +388,7 @@ public class CellReference {
|
|||
* representation.
|
||||
* eg column #3 -> D
|
||||
*/
|
||||
protected static String convertNumToColString(int col) {
|
||||
public static String convertNumToColString(int col) {
|
||||
// Excel counts column A as the 1st column, we
|
||||
// treat it as the 0th one
|
||||
int excelColNum = col + 1;
|
||||
|
|
|
@ -0,0 +1,49 @@
|
|||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
package org.apache.poi.ss;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
/**
|
||||
* Check that all enum values are properly set
|
||||
*
|
||||
* @author Yegor Kozlov
|
||||
*/
|
||||
public class TestSpreadsheetVersion extends TestCase {
|
||||
|
||||
public void testExcel97(){
|
||||
SpreadsheetVersion v = SpreadsheetVersion.EXCEL97;
|
||||
assertEquals(1 << 8, v.getMaxColumns());
|
||||
assertEquals(v.getMaxColumns() - 1, v.getLastColumnIndex());
|
||||
assertEquals(1 << 16, v.getMaxRows());
|
||||
assertEquals(v.getMaxRows() - 1, v.getLastRowIndex());
|
||||
assertEquals(30, v.getMaxFunctionArgs());
|
||||
assertEquals(3, v.getMaxConditionalFormats());
|
||||
assertEquals("IV", v.getLastColumnName());
|
||||
}
|
||||
|
||||
public void testExcel2007(){
|
||||
SpreadsheetVersion v = SpreadsheetVersion.EXCEL2007;
|
||||
assertEquals(1 << 14, v.getMaxColumns());
|
||||
assertEquals(v.getMaxColumns() - 1, v.getLastColumnIndex());
|
||||
assertEquals(1 << 20, v.getMaxRows());
|
||||
assertEquals(v.getMaxRows() - 1, v.getLastRowIndex());
|
||||
assertEquals(255, v.getMaxFunctionArgs());
|
||||
assertEquals(Integer.MAX_VALUE, v.getMaxConditionalFormats());
|
||||
assertEquals("XFD", v.getLastColumnName());
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue