Author: nick
Date: Mon Jan 18 12:18:00 2010
New Revision: 900362
URL: http://svn.apache.org/viewvc?rev=900362&view=rev
Log:
records.UnicodeString isn't actually a Record, just a common part that exists
in many other records. As such, move it to records.common, which is where all
the other record components live
Added:
poi/trunk/src/java/org/apache/poi/hssf/record/common/UnicodeString.java
- copied, changed from r900347,
poi/trunk/src/java/org/apache/poi/hssf/record/UnicodeString.java
poi/trunk/src/testcases/org/apache/poi/hssf/record/common/TestUnicodeString.java
Removed:
poi/trunk/src/java/org/apache/poi/hssf/record/UnicodeString.java
poi/trunk/src/testcases/org/apache/poi/hssf/record/TestUnicodeString.java
Modified:
poi/trunk/src/java/org/apache/poi/hssf/model/InternalWorkbook.java
poi/trunk/src/java/org/apache/poi/hssf/record/DVRecord.java
poi/trunk/src/java/org/apache/poi/hssf/record/SSTDeserializer.java
poi/trunk/src/java/org/apache/poi/hssf/record/SSTRecord.java
poi/trunk/src/java/org/apache/poi/hssf/record/SSTSerializer.java
poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFCell.java
poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFOptimiser.java
poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFRichTextString.java
poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java
poi/trunk/src/testcases/org/apache/poi/hssf/model/TestFormulaParser.java
poi/trunk/src/testcases/org/apache/poi/hssf/record/AllRecordTests.java
poi/trunk/src/testcases/org/apache/poi/hssf/record/TestSSTRecord.java
poi/trunk/src/testcases/org/apache/poi/hssf/record/TestSSTRecordSizeCalculator.java
poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java
Modified: poi/trunk/src/java/org/apache/poi/hssf/model/InternalWorkbook.java
URL:
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/model/InternalWorkbook.java?rev=900362&r1=900361&r2=900362&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/model/InternalWorkbook.java
(original)
+++ poi/trunk/src/java/org/apache/poi/hssf/model/InternalWorkbook.java Mon Jan
18 12:18:00 2010
@@ -71,12 +71,12 @@
import org.apache.poi.hssf.record.StyleRecord;
import org.apache.poi.hssf.record.SupBookRecord;
import org.apache.poi.hssf.record.TabIdRecord;
-import org.apache.poi.hssf.record.UnicodeString;
import org.apache.poi.hssf.record.UseSelFSRecord;
import org.apache.poi.hssf.record.WindowOneRecord;
import org.apache.poi.hssf.record.WindowProtectRecord;
import org.apache.poi.hssf.record.WriteAccessRecord;
import org.apache.poi.hssf.record.WriteProtectRecord;
+import org.apache.poi.hssf.record.common.UnicodeString;
import org.apache.poi.hssf.record.formula.NameXPtg;
import org.apache.poi.hssf.record.formula.FormulaShifter;
import org.apache.poi.hssf.record.formula.Ptg;
Modified: poi/trunk/src/java/org/apache/poi/hssf/record/DVRecord.java
URL:
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/DVRecord.java?rev=900362&r1=900361&r2=900362&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/record/DVRecord.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/record/DVRecord.java Mon Jan 18
12:18:00 2010
@@ -17,6 +17,7 @@
package org.apache.poi.hssf.record;
+import org.apache.poi.hssf.record.common.UnicodeString;
import org.apache.poi.hssf.record.formula.Ptg;
import org.apache.poi.hssf.usermodel.HSSFDataValidation;
import org.apache.poi.ss.formula.Formula;
Modified: poi/trunk/src/java/org/apache/poi/hssf/record/SSTDeserializer.java
URL:
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/SSTDeserializer.java?rev=900362&r1=900361&r2=900362&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/record/SSTDeserializer.java
(original)
+++ poi/trunk/src/java/org/apache/poi/hssf/record/SSTDeserializer.java Mon Jan
18 12:18:00 2010
@@ -19,6 +19,7 @@
package org.apache.poi.hssf.record;
+import org.apache.poi.hssf.record.common.UnicodeString;
import org.apache.poi.util.IntMapper;
/**
Modified: poi/trunk/src/java/org/apache/poi/hssf/record/SSTRecord.java
URL:
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/SSTRecord.java?rev=900362&r1=900361&r2=900362&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/record/SSTRecord.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/record/SSTRecord.java Mon Jan 18
12:18:00 2010
@@ -19,6 +19,7 @@
import java.util.Iterator;
+import org.apache.poi.hssf.record.common.UnicodeString;
import org.apache.poi.hssf.record.cont.ContinuableRecord;
import org.apache.poi.hssf.record.cont.ContinuableRecordOutput;
import org.apache.poi.util.IntMapper;
Modified: poi/trunk/src/java/org/apache/poi/hssf/record/SSTSerializer.java
URL:
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/SSTSerializer.java?rev=900362&r1=900361&r2=900362&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/record/SSTSerializer.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/record/SSTSerializer.java Mon Jan 18
12:18:00 2010
@@ -17,6 +17,7 @@
package org.apache.poi.hssf.record;
+import org.apache.poi.hssf.record.common.UnicodeString;
import org.apache.poi.hssf.record.cont.ContinuableRecordOutput;
import org.apache.poi.util.IntMapper;
Copied: poi/trunk/src/java/org/apache/poi/hssf/record/common/UnicodeString.java
(from r900347, poi/trunk/src/java/org/apache/poi/hssf/record/UnicodeString.java)
URL:
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/common/UnicodeString.java?p2=poi/trunk/src/java/org/apache/poi/hssf/record/common/UnicodeString.java&p1=poi/trunk/src/java/org/apache/poi/hssf/record/UnicodeString.java&r1=900347&r2=900362&rev=900362&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/record/UnicodeString.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/record/common/UnicodeString.java Mon
Jan 18 12:18:00 2010
@@ -15,13 +15,14 @@
limitations under the License.
==================================================================== */
-package org.apache.poi.hssf.record;
+package org.apache.poi.hssf.record.common;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
+import org.apache.poi.hssf.record.RecordInputStream;
import org.apache.poi.hssf.record.cont.ContinuableRecordOutput;
import org.apache.poi.util.BitField;
import org.apache.poi.util.BitFieldFactory;
Modified: poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFCell.java
URL:
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFCell.java?rev=900362&r1=900361&r2=900362&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFCell.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFCell.java Mon Jan 18
12:18:00 2010
@@ -41,8 +41,8 @@
import org.apache.poi.hssf.record.RecordBase;
import org.apache.poi.hssf.record.SubRecord;
import org.apache.poi.hssf.record.TextObjectRecord;
-import org.apache.poi.hssf.record.UnicodeString;
import org.apache.poi.hssf.record.aggregates.FormulaRecordAggregate;
+import org.apache.poi.hssf.record.common.UnicodeString;
import org.apache.poi.hssf.record.formula.ExpPtg;
import org.apache.poi.hssf.record.formula.Ptg;
import org.apache.poi.hssf.record.formula.eval.ErrorEval;
Modified: poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFOptimiser.java
URL:
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFOptimiser.java?rev=900362&r1=900361&r2=900362&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFOptimiser.java
(original)
+++ poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFOptimiser.java Mon Jan
18 12:18:00 2010
@@ -21,7 +21,7 @@
import org.apache.poi.hssf.record.ExtendedFormatRecord;
import org.apache.poi.hssf.record.FontRecord;
-import org.apache.poi.hssf.record.UnicodeString;
+import org.apache.poi.hssf.record.common.UnicodeString;
/**
* Excel can get cranky if you give it files containing too
Modified:
poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFRichTextString.java
URL:
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFRichTextString.java?rev=900362&r1=900361&r2=900362&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFRichTextString.java
(original)
+++ poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFRichTextString.java
Mon Jan 18 12:18:00 2010
@@ -21,7 +21,7 @@
import org.apache.poi.hssf.model.InternalWorkbook;
import org.apache.poi.hssf.record.LabelSSTRecord;
-import org.apache.poi.hssf.record.UnicodeString;
+import org.apache.poi.hssf.record.common.UnicodeString;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.RichTextString;
/**
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=900362&r1=900361&r2=900362&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 Mon Jan
18 12:18:00 2010
@@ -52,9 +52,9 @@
import org.apache.poi.hssf.record.Record;
import org.apache.poi.hssf.record.RecordFactory;
import org.apache.poi.hssf.record.SSTRecord;
-import org.apache.poi.hssf.record.UnicodeString;
import org.apache.poi.hssf.record.UnknownRecord;
import org.apache.poi.hssf.record.aggregates.RecordAggregate.RecordVisitor;
+import org.apache.poi.hssf.record.common.UnicodeString;
import org.apache.poi.hssf.record.formula.Area3DPtg;
import org.apache.poi.hssf.record.formula.MemFuncPtg;
import org.apache.poi.hssf.record.formula.NameXPtg;
Modified:
poi/trunk/src/testcases/org/apache/poi/hssf/model/TestFormulaParser.java
URL:
http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/hssf/model/TestFormulaParser.java?rev=900362&r1=900361&r2=900362&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/hssf/model/TestFormulaParser.java
(original)
+++ poi/trunk/src/testcases/org/apache/poi/hssf/model/TestFormulaParser.java
Mon Jan 18 12:18:00 2010
@@ -24,7 +24,7 @@
import org.apache.poi.hssf.HSSFTestDataSamples;
import org.apache.poi.hssf.record.NameRecord;
-import org.apache.poi.hssf.record.UnicodeString;
+import org.apache.poi.hssf.record.common.UnicodeString;
import org.apache.poi.hssf.record.constant.ErrorConstant;
import org.apache.poi.hssf.record.formula.AbstractFunctionPtg;
import org.apache.poi.hssf.record.formula.AddPtg;
Modified: poi/trunk/src/testcases/org/apache/poi/hssf/record/AllRecordTests.java
URL:
http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/hssf/record/AllRecordTests.java?rev=900362&r1=900361&r2=900362&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/hssf/record/AllRecordTests.java
(original)
+++ poi/trunk/src/testcases/org/apache/poi/hssf/record/AllRecordTests.java Mon
Jan 18 12:18:00 2010
@@ -23,6 +23,7 @@
import org.apache.poi.hssf.record.aggregates.AllRecordAggregateTests;
import org.apache.poi.hssf.record.cf.TestCellRange;
import org.apache.poi.hssf.record.chart.AllChartRecordTests;
+import org.apache.poi.hssf.record.common.TestUnicodeString;
import org.apache.poi.hssf.record.constant.TestConstantValueParser;
import org.apache.poi.hssf.record.crypto.AllHSSFEncryptionTests;
import org.apache.poi.hssf.record.formula.AllFormulaTests;
Modified: poi/trunk/src/testcases/org/apache/poi/hssf/record/TestSSTRecord.java
URL:
http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/hssf/record/TestSSTRecord.java?rev=900362&r1=900361&r2=900362&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/hssf/record/TestSSTRecord.java
(original)
+++ poi/trunk/src/testcases/org/apache/poi/hssf/record/TestSSTRecord.java Mon
Jan 18 12:18:00 2010
@@ -30,6 +30,7 @@
import junit.framework.TestCase;
import org.apache.poi.hssf.HSSFTestDataSamples;
+import org.apache.poi.hssf.record.common.UnicodeString;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.util.HexRead;
Modified:
poi/trunk/src/testcases/org/apache/poi/hssf/record/TestSSTRecordSizeCalculator.java
URL:
http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/hssf/record/TestSSTRecordSizeCalculator.java?rev=900362&r1=900361&r2=900362&view=diff
==============================================================================
---
poi/trunk/src/testcases/org/apache/poi/hssf/record/TestSSTRecordSizeCalculator.java
(original)
+++
poi/trunk/src/testcases/org/apache/poi/hssf/record/TestSSTRecordSizeCalculator.java
Mon Jan 18 12:18:00 2010
@@ -19,6 +19,7 @@
import junit.framework.TestCase;
+import org.apache.poi.hssf.record.common.UnicodeString;
import org.apache.poi.hssf.record.cont.ContinuableRecordOutput;
import org.apache.poi.util.IntMapper;
Added:
poi/trunk/src/testcases/org/apache/poi/hssf/record/common/TestUnicodeString.java
URL:
http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/hssf/record/common/TestUnicodeString.java?rev=900362&view=auto
==============================================================================
---
poi/trunk/src/testcases/org/apache/poi/hssf/record/common/TestUnicodeString.java
(added)
+++
poi/trunk/src/testcases/org/apache/poi/hssf/record/common/TestUnicodeString.java
Mon Jan 18 12:18:00 2010
@@ -0,0 +1,171 @@
+/* ====================================================================
+ 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.hssf.record.common;
+
+import junit.framework.TestCase;
+
+import org.apache.poi.hssf.record.ContinueRecord;
+import org.apache.poi.hssf.record.RecordInputStream;
+import org.apache.poi.hssf.record.SSTRecord;
+import org.apache.poi.hssf.record.cont.ContinuableRecordOutput;
+
+/**
+ * Tests that {...@link UnicodeString} record size calculates correctly. The
record size
+ * is used when serializing {...@link SSTRecord}s.
+ *
+ * @author Jason Height (jheight at apache.org)
+ */
+public final class TestUnicodeString extends TestCase {
+ private static final int MAX_DATA_SIZE =
RecordInputStream.MAX_RECORD_DATA_SIZE;
+
+ /** a 4 character string requiring 16 bit encoding */
+ private static final String STR_16_BIT = "A\u591A\u8A00\u8A9E";
+
+ private static void confirmSize(int expectedSize, UnicodeString s) {
+ confirmSize(expectedSize, s, 0);
+ }
+ /**
+ * Note - a value of zero for <tt>amountUsedInCurrentRecord</tt> would
only ever occur just
+ * after a {...@link ContinueRecord} had been started. In the initial
{...@link SSTRecord} this
+ * value starts at 8 (for the first {...@link UnicodeString} written). In
general, it can be
+ * any value between 0 and {...@link #MAX_DATA_SIZE}
+ */
+ private static void confirmSize(int expectedSize, UnicodeString s, int
amountUsedInCurrentRecord) {
+ ContinuableRecordOutput out =
ContinuableRecordOutput.createForCountingOnly();
+ out.writeContinue();
+ for(int i=amountUsedInCurrentRecord; i>0; i--) {
+ out.writeByte(0);
+ }
+ int size0 = out.getTotalSize();
+ s.serialize(out);
+ int size1 = out.getTotalSize();
+ int actualSize = size1-size0;
+ assertEquals(expectedSize, actualSize);
+ }
+
+ public void testSmallStringSize() {
+ //Test a basic string
+ UnicodeString s = makeUnicodeString("Test");
+ confirmSize(7, s);
+
+ //Test a small string that is uncompressed
+ s = makeUnicodeString(STR_16_BIT);
+ s.setOptionFlags((byte)0x01);
+ confirmSize(11, s);
+
+ //Test a compressed small string that has rich text formatting
+ s.setString("Test");
+ s.setOptionFlags((byte)0x8);
+ UnicodeString.FormatRun r = new
UnicodeString.FormatRun((short)0,(short)1);
+ s.addFormatRun(r);
+ UnicodeString.FormatRun r2 = new
UnicodeString.FormatRun((short)2,(short)2);
+ s.addFormatRun(r2);
+ confirmSize(17, s);
+
+ //Test a uncompressed small string that has rich text formatting
+ s.setString(STR_16_BIT);
+ s.setOptionFlags((byte)0x9);
+ confirmSize(21, s);
+
+ //Test a compressed small string that has rich text and extended text
+ s.setString("Test");
+ s.setOptionFlags((byte)0xC);
+ s.setExtendedRst(new
byte[]{(byte)0x1,(byte)0x2,(byte)0x3,(byte)0x4,(byte)0x5});
+ confirmSize(26, s);
+
+ //Test a uncompressed small string that has rich text and extended text
+ s.setString(STR_16_BIT);
+ s.setOptionFlags((byte)0xD);
+ confirmSize(30, s);
+ }
+
+ public void testPerfectStringSize() {
+ //Test a basic string
+ UnicodeString s = makeUnicodeString(MAX_DATA_SIZE-2-1);
+ confirmSize(MAX_DATA_SIZE, s);
+
+ //Test an uncompressed string
+ //Note that we can only ever get to a maximim size of 8227 since an
uncompressed
+ //string is writing double bytes.
+ s = makeUnicodeString((MAX_DATA_SIZE-2-1)/2, true);
+ s.setOptionFlags((byte)0x1);
+ confirmSize(MAX_DATA_SIZE-1, s);
+ }
+
+ public void testPerfectRichStringSize() {
+ //Test a rich text string
+ UnicodeString s = makeUnicodeString(MAX_DATA_SIZE-2-1-8-2);
+ s.addFormatRun(new UnicodeString.FormatRun((short)1,(short)0));
+ s.addFormatRun(new UnicodeString.FormatRun((short)2,(short)1));
+ s.setOptionFlags((byte)0x8);
+ confirmSize(MAX_DATA_SIZE, s);
+
+ //Test an uncompressed rich text string
+ //Note that we can only ever get to a maximum size of 8227 since an
uncompressed
+ //string is writing double bytes.
+ s = makeUnicodeString((MAX_DATA_SIZE-2-1-8-2)/2, true);
+ s.addFormatRun(new UnicodeString.FormatRun((short)1,(short)0));
+ s.addFormatRun(new UnicodeString.FormatRun((short)2,(short)1));
+ s.setOptionFlags((byte)0x9);
+ confirmSize(MAX_DATA_SIZE-1, s);
+ }
+
+ public void testContinuedStringSize() {
+ //Test a basic string
+ UnicodeString s = makeUnicodeString(MAX_DATA_SIZE-2-1+20);
+ confirmSize(MAX_DATA_SIZE+4+1+20, s);
+ }
+
+ /** Tests that a string size calculation that fits neatly in two records,
the second being a continue*/
+ public void testPerfectContinuedStringSize() {
+ //Test a basic string
+ int strSize = MAX_DATA_SIZE*2;
+ //String overhead
+ strSize -= 3;
+ //Continue Record overhead
+ strSize -= 4;
+ //Continue Record additional byte overhead
+ strSize -= 1;
+ UnicodeString s = makeUnicodeString(strSize);
+ confirmSize(MAX_DATA_SIZE*2, s);
+ }
+
+
+ private static UnicodeString makeUnicodeString(String s) {
+ UnicodeString st = new UnicodeString(s);
+ st.setOptionFlags((byte)0);
+ return st;
+ }
+
+ private static UnicodeString makeUnicodeString(int numChars) {
+ return makeUnicodeString(numChars, false);
+ }
+ /**
+ * @param is16Bit if <code>true</code> the created string will have
characters > 0x00FF
+ * @return a string of the specified number of characters
+ */
+ private static UnicodeString makeUnicodeString(int numChars, boolean
is16Bit) {
+ StringBuffer b = new StringBuffer(numChars);
+ int charBase = is16Bit ? 0x8A00 : 'A';
+ for (int i=0;i<numChars;i++) {
+ char ch = (char) ((i%16)+charBase);
+ b.append(ch);
+ }
+ return makeUnicodeString(b.toString());
+ }
+}
Modified: poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java
URL:
http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java?rev=900362&r1=900361&r2=900362&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java
(original)
+++ poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java Mon Jan
18 12:18:00 2010
@@ -1536,4 +1536,14 @@
public void test47251() {
openSample("47251.xls");
}
+
+ /**
+ * Round trip a file with an unusual ExtRst record
+ */
+ public void test47847() {
+ HSSFWorkbook wb = openSample("47251.xls");
+ assertEquals(1, wb.getNumberOfSheets());
+ wb = writeOutAndReadBack(wb);
+ assertEquals(1, wb.getNumberOfSheets());
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]