Slight tweak for named ranges pointing at deleted sheets, related to bug #30978
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@668153 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
7cf39af9a2
commit
acfbb1648c
@ -603,6 +603,9 @@ public class Workbook implements Model
|
|||||||
boundsheets.remove(sheetnum);
|
boundsheets.remove(sheetnum);
|
||||||
fixTabIdRecord();
|
fixTabIdRecord();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If we decide that we need to fix up
|
||||||
|
// NameRecords, do it here
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -269,9 +269,16 @@ public class Area3DPtg extends OperandPtg implements AreaI {
|
|||||||
StringBuffer retval = new StringBuffer();
|
StringBuffer retval = new StringBuffer();
|
||||||
String sheetName = Ref3DPtg.getSheetName(book, field_1_index_extern_sheet);
|
String sheetName = Ref3DPtg.getSheetName(book, field_1_index_extern_sheet);
|
||||||
if(sheetName != null) {
|
if(sheetName != null) {
|
||||||
|
if(sheetName.length() == 0) {
|
||||||
|
// What excel does if sheet has been deleted
|
||||||
|
sheetName = "#REF";
|
||||||
|
retval.append(sheetName);
|
||||||
|
} else {
|
||||||
|
// Normal
|
||||||
SheetNameFormatter.appendFormat(retval, sheetName);
|
SheetNameFormatter.appendFormat(retval, sheetName);
|
||||||
retval.append( '!' );
|
retval.append( '!' );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Now the normal area bit
|
// Now the normal area bit
|
||||||
retval.append(AreaReference.formatAsString(this));
|
retval.append(AreaReference.formatAsString(this));
|
||||||
|
@ -18,7 +18,6 @@
|
|||||||
package org.apache.poi.hssf.usermodel;
|
package org.apache.poi.hssf.usermodel;
|
||||||
|
|
||||||
import org.apache.poi.hssf.model.Workbook;
|
import org.apache.poi.hssf.model.Workbook;
|
||||||
import org.apache.poi.hssf.record.BoundSheetRecord;
|
|
||||||
import org.apache.poi.hssf.record.NameRecord;
|
import org.apache.poi.hssf.record.NameRecord;
|
||||||
import org.apache.poi.hssf.util.RangeAddress;
|
import org.apache.poi.hssf.util.RangeAddress;
|
||||||
|
|
||||||
|
BIN
src/testcases/org/apache/poi/hssf/data/30978-deleted.xls
Executable file
BIN
src/testcases/org/apache/poi/hssf/data/30978-deleted.xls
Executable file
Binary file not shown.
@ -30,6 +30,7 @@ import org.apache.poi.hssf.model.Sheet;
|
|||||||
import org.apache.poi.hssf.record.NameRecord;
|
import org.apache.poi.hssf.record.NameRecord;
|
||||||
import org.apache.poi.hssf.record.Record;
|
import org.apache.poi.hssf.record.Record;
|
||||||
import org.apache.poi.hssf.record.RecordInputStream;
|
import org.apache.poi.hssf.record.RecordInputStream;
|
||||||
|
import org.apache.poi.hssf.record.formula.Area3DPtg;
|
||||||
import org.apache.poi.util.TempFile;
|
import org.apache.poi.util.TempFile;
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@ -402,6 +403,39 @@ public final class TestHSSFWorkbook extends TestCase {
|
|||||||
assertTrue(e.getMessage().startsWith("Actual serialized sheet size"));
|
assertTrue(e.getMessage().startsWith("Actual serialized sheet size"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks that us and HSSFName play nicely with named ranges
|
||||||
|
* that point to deleted sheets
|
||||||
|
*/
|
||||||
|
public void testNamesToDeleteSheets() throws Exception {
|
||||||
|
HSSFWorkbook b = openSample("30978-deleted.xls");
|
||||||
|
assertEquals(1, b.getNumberOfNames());
|
||||||
|
|
||||||
|
// Sheet 2 deleted
|
||||||
|
assertEquals("Sheet1", b.getSheetName(0));
|
||||||
|
assertEquals("Sheet3", b.getSheetName(1));
|
||||||
|
|
||||||
|
// First at low level
|
||||||
|
NameRecord nr = b.getWorkbook().getNameRecord(0);
|
||||||
|
assertEquals("On2", nr.getNameText());
|
||||||
|
assertEquals(1, nr.getExternSheetNumber());
|
||||||
|
assertEquals(1, nr.getNameDefinition().size());
|
||||||
|
|
||||||
|
Area3DPtg ptg = (Area3DPtg)nr.getNameDefinition().get(0);
|
||||||
|
assertEquals(1, ptg.getExternSheetIndex());
|
||||||
|
assertEquals(0, ptg.getFirstColumn());
|
||||||
|
assertEquals(0, ptg.getFirstRow());
|
||||||
|
assertEquals(0, ptg.getLastColumn());
|
||||||
|
assertEquals(2, ptg.getLastRow());
|
||||||
|
|
||||||
|
// Now at high level
|
||||||
|
HSSFName n = b.getNameAt(0);
|
||||||
|
assertEquals("On2", n.getNameName());
|
||||||
|
assertEquals("", n.getSheetName());
|
||||||
|
assertEquals("#REF$A$1:$A$3", n.getReference());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* result returned by getRecordSize() differs from result returned by serialize()
|
* result returned by getRecordSize() differs from result returned by serialize()
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user