You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@poi.apache.org by jh...@apache.org on 2006/01/05 08:30:06 UTC
svn commit: r366110 - in /jakarta/poi/trunk/src:
java/org/apache/poi/hssf/record/ java/org/apache/poi/hssf/record/aggregates/
java/org/apache/poi/hssf/usermodel/ testcases/org/apache/poi/hssf/usermodel/
Author: jheight
Date: Wed Jan 4 23:29:36 2006
New Revision: 366110
URL: http://svn.apache.org/viewcvs?rev=366110&view=rev
Log:
Multiple clone of same sheet now generates unique sheet name BUG 37416 fixed.
Modified:
jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/RecordFactory.java
jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/TextObjectRecord.java
jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/aggregates/ValueRecordsAggregate.java
jakarta/poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java
jakarta/poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java
jakarta/poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java
Modified: jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/RecordFactory.java
URL: http://svn.apache.org/viewcvs/jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/RecordFactory.java?rev=366110&r1=366109&r2=366110&view=diff
==============================================================================
--- jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/RecordFactory.java (original)
+++ jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/RecordFactory.java Wed Jan 4 23:29:36 2006
@@ -169,7 +169,7 @@
lastDGRecord.join((AbstractEscherHolderRecord) record);
}
else if (record.getSid() == ContinueRecord.sid &&
- (lastRecord instanceof ObjRecord)) {
+ ((lastRecord instanceof ObjRecord) || (lastRecord instanceof TextObjectRecord))) {
// Drawing records have a very strange continue behaviour.
//There can actually be OBJ records mixed between the continues.
lastDrawingRecord.processContinueRecord( ((ContinueRecord)record).getData() );
@@ -181,7 +181,8 @@
//Gracefully handle records that we dont know about,
//that happen to be continued
records.add(record);
- } else throw new RecordFormatException("Unhandled Continue Record");
+ } else
+ throw new RecordFormatException("Unhandled Continue Record");
}
else {
lastRecord = record;
Modified: jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/TextObjectRecord.java
URL: http://svn.apache.org/viewcvs/jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/TextObjectRecord.java?rev=366110&r1=366109&r2=366110&view=diff
==============================================================================
--- jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/TextObjectRecord.java (original)
+++ jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/TextObjectRecord.java Wed Jan 4 23:29:36 2006
@@ -24,7 +24,7 @@
public class TextObjectRecord
extends TextObjectBaseRecord
{
- HSSFRichTextString str = new HSSFRichTextString( "" );
+ HSSFRichTextString str;
public TextObjectRecord()
{
@@ -33,6 +33,8 @@
public TextObjectRecord( RecordInputStream in )
{
super( in );
+ if (str == null)
+ str = new HSSFRichTextString("");
}
protected void fillFields(RecordInputStream in)
Modified: jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/aggregates/ValueRecordsAggregate.java
URL: http://svn.apache.org/viewcvs/jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/aggregates/ValueRecordsAggregate.java?rev=366110&r1=366109&r2=366110&view=diff
==============================================================================
--- jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/aggregates/ValueRecordsAggregate.java (original)
+++ jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/aggregates/ValueRecordsAggregate.java Wed Jan 4 23:29:36 2006
@@ -190,6 +190,8 @@
/** Returns true if the row has cells attached to it */
public boolean rowHasCells(int row) {
+ if (row > records.length)
+ return false;
CellValueRecordInterface[] rowCells=records[row];
if(rowCells==null) return false;
for(int col=0;col<rowCells.length;col++) {
Modified: jakarta/poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java
URL: http://svn.apache.org/viewcvs/jakarta/poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java?rev=366110&r1=366109&r2=366110&view=diff
==============================================================================
--- jakarta/poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java (original)
+++ jakarta/poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java Wed Jan 4 23:29:36 2006
@@ -473,10 +473,20 @@
windowTwo.setPaged(sheets.size() == 1);
sheets.add(clonedSheet);
- if (srcName.length()<28) {
- workbook.setSheetName(sheets.size()-1, srcName+"(2)");
- }else {
- workbook.setSheetName(sheets.size()-1,srcName.substring(0,28)+"(2)");
+ int i=1;
+ while (true) {
+ //Try and find the next sheet name that is unique
+ String name = srcName;
+ String index = Integer.toString(i++);
+ if (name.length()+index.length()+2<31)
+ name = name + "("+index+")";
+ else name = name.substring(0, 31-index.length()-2)+"("+index+")";
+
+ //If the sheet name is unique, then set it otherwise move on to the next number.
+ if (workbook.getSheetIndex(name) == -1) {
+ workbook.setSheetName(sheets.size()-1, name);
+ break;
+ }
}
return clonedSheet;
}
Modified: jakarta/poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java
URL: http://svn.apache.org/viewcvs/jakarta/poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java?rev=366110&r1=366109&r2=366110&view=diff
==============================================================================
--- jakarta/poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java (original)
+++ jakarta/poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java Wed Jan 4 23:29:36 2006
@@ -204,6 +204,24 @@
cell.setCellValue("Difference Check");
assertEquals(cloned.getRow((short)0).getCell((short)0).getStringCellValue(), "clone_test");
}
+
+ /** tests that the sheet name for multiple clones of the same sheet is unique
+ * BUG 37416
+ */
+ public void testCloneSheetMultipleTimes() {
+ HSSFWorkbook workbook = new HSSFWorkbook();
+ HSSFSheet sheet = workbook.createSheet("Test Clone");
+ HSSFRow row = sheet.createRow((short) 0);
+ HSSFCell cell = row.createCell((short) 0);
+ cell.setCellValue("clone_test");
+ //Clone the sheet multiple times
+ workbook.cloneSheet(0);
+ workbook.cloneSheet(0);
+
+ assertNotNull(workbook.getSheet("Test Clone"));
+ assertNotNull(workbook.getSheet("Test Clone(1)"));
+ assertNotNull(workbook.getSheet("Test Clone(2)"));
+ }
/**
* Test that the ProtectRecord is included when creating or cloning a sheet
Modified: jakarta/poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java
URL: http://svn.apache.org/viewcvs/jakarta/poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java?rev=366110&r1=366109&r2=366110&view=diff
==============================================================================
--- jakarta/poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java (original)
+++ jakarta/poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java Wed Jan 4 23:29:36 2006
@@ -46,15 +46,15 @@
try
{
- b.setSheetName( 3, "name1"/*JMH, HSSFWorkbook.ENCODING_UTF_16*/ );
+ b.setSheetName( 3, "name1" );
fail();
}
catch ( IllegalArgumentException pass )
{
}
- b.setSheetName( 3, "name2"/*JMH, HSSFWorkbook.ENCODING_UTF_16*/ );
- b.setSheetName( 3, "name2"/*JMH, HSSFWorkbook.ENCODING_UTF_16*/ );
+ b.setSheetName( 3, "name2" );
+ b.setSheetName( 3, "name2" );
b.setSheetName( 3, "name2" );
HSSFWorkbook c = new HSSFWorkbook( );
---------------------------------------------------------------------
To unsubscribe, e-mail: poi-dev-unsubscribe@jakarta.apache.org
Mailing List: http://jakarta.apache.org/site/mail2.html#poi
The Apache Jakarta POI Project: http://jakarta.apache.org/poi/