* @author Josh Micich
*/
final class ExternSheetNameResolver {
+ private ExternSheetNameResolver() {
+ // no instances of this class
+ }
- private ExternSheetNameResolver() {
- // no instances of this class
- }
-
- public static String prependSheetName(FormulaRenderingWorkbook book, int field_1_index_extern_sheet, String cellRefText) {
- ExternalSheet externalSheet = book.getExternalSheet(field_1_index_extern_sheet);
- StringBuffer sb;
- if (externalSheet != null) {
- String wbName = externalSheet.getWorkbookName();
- String sheetName = externalSheet.getSheetName();
- if (wbName != null) {
- sb = new StringBuffer(wbName.length() + sheetName.length() + cellRefText.length() + 4);
- SheetNameFormatter.appendFormat(sb, wbName, sheetName);
- } else {
+ public static String prependSheetName(FormulaRenderingWorkbook book, int field_1_index_extern_sheet, String cellRefText) {
+ ExternalSheet externalSheet = book.getExternalSheet(field_1_index_extern_sheet);
+ StringBuffer sb;
+ if (externalSheet != null) {
+ String wbName = externalSheet.getWorkbookName();
+ String sheetName = externalSheet.getSheetName();
+ if (wbName != null) {
+ sb = new StringBuffer(wbName.length() + sheetName.length() + cellRefText.length() + 4);
+ SheetNameFormatter.appendFormat(sb, wbName, sheetName);
+ } else {
sb = new StringBuffer(sheetName.length() + cellRefText.length() + 4);
SheetNameFormatter.appendFormat(sb, sheetName);
- }
- } else {
- String sheetName = book.getSheetNameByExternSheet(field_1_index_extern_sheet);
- sb = new StringBuffer(sheetName.length() + cellRefText.length() + 4);
- if (sheetName.length() < 1) {
- // What excel does if sheet has been deleted
- sb.append("#REF"); // note - '!' added just once below
- } else {
- SheetNameFormatter.appendFormat(sb, sheetName);
- }
- }
- sb.append('!');
- sb.append(cellRefText);
- return sb.toString();
- }
+ }
+ } else {
+ String sheetName = book.getSheetNameByExternSheet(field_1_index_extern_sheet);
+ sb = new StringBuffer(sheetName.length() + cellRefText.length() + 4);
+ if (sheetName.length() < 1) {
+ // What excel does if sheet has been deleted
+ sb.append("#REF"); // note - '!' added just once below
+ } else {
+ SheetNameFormatter.appendFormat(sb, sheetName);
+ }
+ }
+ sb.append('!');
+ sb.append(cellRefText);
+ return sb.toString();
+ }
}
* Tests for {@link EventWorkbookBuilder}
*/
public final class TestEventWorkbookBuilder extends TestCase {
- private MockHSSFListener mockListen;
- private SheetRecordCollectingListener listener;
-
- @Override
- public void setUp() {
- HSSFRequest req = new HSSFRequest();
- mockListen = new MockHSSFListener();
- listener = new SheetRecordCollectingListener(mockListen);
- req.addListenerForAllRecords(listener);
-
- HSSFEventFactory factory = new HSSFEventFactory();
- try {
- InputStream is = HSSFTestDataSamples.openSampleFileStream("3dFormulas.xls");
- POIFSFileSystem fs = new POIFSFileSystem(is);
- factory.processWorkbookEvents(req, fs);
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
- }
-
- public void testBasics() {
- assertNotNull(listener.getSSTRecord());
- assertNotNull(listener.getBoundSheetRecords());
- assertNotNull(listener.getExternSheetRecords());
- }
-
- public void testGetStubWorkbooks() {
- assertNotNull(listener.getStubWorkbook());
- assertNotNull(listener.getStubHSSFWorkbook());
- }
-
- public void testContents() {
- assertEquals(2, listener.getSSTRecord().getNumStrings());
- assertEquals(3, listener.getBoundSheetRecords().length);
- assertEquals(1, listener.getExternSheetRecords().length);
-
- assertEquals(3, listener.getStubWorkbook().getNumSheets());
-
- InternalWorkbook ref = listener.getStubWorkbook();
- assertEquals("Sh3", ref.findSheetNameFromExternSheet(0));
- assertEquals("Sheet1", ref.findSheetNameFromExternSheet(1));
- assertEquals("S2", ref.findSheetNameFromExternSheet(2));
- }
-
- public void testFormulas() {
-
- FormulaRecord[] fRecs = mockListen.getFormulaRecords();
-
- // Check our formula records
- assertEquals(6, fRecs.length);
-
- InternalWorkbook stubWB = listener.getStubWorkbook();
- assertNotNull(stubWB);
- HSSFWorkbook stubHSSF = listener.getStubHSSFWorkbook();
- assertNotNull(stubHSSF);
-
- // Check these stubs have the right stuff on them
- assertEquals("Sheet1", stubWB.getSheetName(0));
+ private MockHSSFListener mockListen;
+ private SheetRecordCollectingListener listener;
+
+ @Override
+ public void setUp() {
+ HSSFRequest req = new HSSFRequest();
+ mockListen = new MockHSSFListener();
+ listener = new SheetRecordCollectingListener(mockListen);
+ req.addListenerForAllRecords(listener);
+
+ HSSFEventFactory factory = new HSSFEventFactory();
+ try {
+ InputStream is = HSSFTestDataSamples.openSampleFileStream("3dFormulas.xls");
+ POIFSFileSystem fs = new POIFSFileSystem(is);
+ factory.processWorkbookEvents(req, fs);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public void testBasics() {
+ assertNotNull(listener.getSSTRecord());
+ assertNotNull(listener.getBoundSheetRecords());
+ assertNotNull(listener.getExternSheetRecords());
+ }
+
+ public void testGetStubWorkbooks() {
+ assertNotNull(listener.getStubWorkbook());
+ assertNotNull(listener.getStubHSSFWorkbook());
+ }
+
+ public void testContents() {
+ assertEquals(2, listener.getSSTRecord().getNumStrings());
+ assertEquals(3, listener.getBoundSheetRecords().length);
+ assertEquals(1, listener.getExternSheetRecords().length);
+
+ assertEquals(3, listener.getStubWorkbook().getNumSheets());
+
+ InternalWorkbook ref = listener.getStubWorkbook();
+ assertEquals("Sh3", ref.findSheetNameFromExternSheet(0));
+ assertEquals("Sheet1", ref.findSheetNameFromExternSheet(1));
+ assertEquals("S2", ref.findSheetNameFromExternSheet(2));
+ }
+
+ public void testFormulas() {
+
+ FormulaRecord[] fRecs = mockListen.getFormulaRecords();
+
+ // Check our formula records
+ assertEquals(6, fRecs.length);
+
+ InternalWorkbook stubWB = listener.getStubWorkbook();
+ assertNotNull(stubWB);
+ HSSFWorkbook stubHSSF = listener.getStubHSSFWorkbook();
+ assertNotNull(stubHSSF);
+
+ // Check these stubs have the right stuff on them
+ assertEquals("Sheet1", stubWB.getSheetName(0));
assertEquals("Sheet1", stubHSSF.getSheetName(0));
- assertEquals("S2", stubWB.getSheetName(1));
+ assertEquals("S2", stubWB.getSheetName(1));
assertEquals("S2", stubHSSF.getSheetName(1));
- assertEquals("Sh3", stubWB.getSheetName(2));
+ assertEquals("Sh3", stubWB.getSheetName(2));
assertEquals("Sh3", stubHSSF.getSheetName(2));
- // Check we can get the formula without breaking
- for(int i=0; i<fRecs.length; i++) {
- HSSFFormulaParser.toFormulaString(stubHSSF, fRecs[i].getParsedExpression());
- }
-
- // Peer into just one formula, and check that
- // all the ptgs give back the right things
- Ptg[] ptgs = fRecs[0].getParsedExpression();
- assertEquals(1, ptgs.length);
- assertTrue(ptgs[0] instanceof Ref3DPtg);
-
- Ref3DPtg ptg = (Ref3DPtg)ptgs[0];
- HSSFEvaluationWorkbook book = HSSFEvaluationWorkbook.create(stubHSSF);
- assertEquals("Sheet1!A1", ptg.toFormulaString(book));
-
-
- // Now check we get the right formula back for
- // a few sample ones
- FormulaRecord fr;
-
- // Sheet 1 A2 is on same sheet
- fr = fRecs[0];
- assertEquals(1, fr.getRow());
- assertEquals(0, fr.getColumn());
- assertEquals("Sheet1!A1", HSSFFormulaParser.toFormulaString(stubHSSF, fr.getParsedExpression()));
-
- // Sheet 1 A5 is to another sheet
- fr = fRecs[3];
- assertEquals(4, fr.getRow());
- assertEquals(0, fr.getColumn());
- assertEquals("'S2'!A1", HSSFFormulaParser.toFormulaString(stubHSSF, fr.getParsedExpression()));
-
- // Sheet 1 A7 is to another sheet, range
- fr = fRecs[5];
- assertEquals(6, fr.getRow());
- assertEquals(0, fr.getColumn());
- assertEquals("SUM(Sh3!A1:A4)", HSSFFormulaParser.toFormulaString(stubHSSF, fr.getParsedExpression()));
-
-
- // Now, load via Usermodel and re-check
- HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("3dFormulas.xls");
- assertEquals("Sheet1!A1", wb.getSheetAt(0).getRow(1).getCell(0).getCellFormula());
- assertEquals("SUM(Sh3!A1:A4)", wb.getSheetAt(0).getRow(6).getCell(0).getCellFormula());
- }
-
- private static final class MockHSSFListener implements HSSFListener {
- public MockHSSFListener() {}
- private final List<Record> _records = new ArrayList<Record>();
- private final List<Record> _frecs = new ArrayList<Record>();
-
- public void processRecord(Record record) {
- _records.add(record);
- if(record instanceof FormulaRecord) {
- _frecs.add(record);
- }
- }
- public FormulaRecord[] getFormulaRecords() {
- FormulaRecord[] result = new FormulaRecord[_frecs.size()];
- _frecs.toArray(result);
- return result;
- }
- }
+ // Check we can get the formula without breaking
+ for(int i=0; i<fRecs.length; i++) {
+ HSSFFormulaParser.toFormulaString(stubHSSF, fRecs[i].getParsedExpression());
+ }
+
+ // Peer into just one formula, and check that
+ // all the ptgs give back the right things
+ Ptg[] ptgs = fRecs[0].getParsedExpression();
+ assertEquals(1, ptgs.length);
+ assertTrue(ptgs[0] instanceof Ref3DPtg);
+
+ Ref3DPtg ptg = (Ref3DPtg)ptgs[0];
+ HSSFEvaluationWorkbook book = HSSFEvaluationWorkbook.create(stubHSSF);
+ assertEquals("Sheet1!A1", ptg.toFormulaString(book));
+
+
+ // Now check we get the right formula back for
+ // a few sample ones
+ FormulaRecord fr;
+
+ // Sheet 1 A2 is on same sheet
+ fr = fRecs[0];
+ assertEquals(1, fr.getRow());
+ assertEquals(0, fr.getColumn());
+ assertEquals("Sheet1!A1", HSSFFormulaParser.toFormulaString(stubHSSF, fr.getParsedExpression()));
+
+ // Sheet 1 A5 is to another sheet
+ fr = fRecs[3];
+ assertEquals(4, fr.getRow());
+ assertEquals(0, fr.getColumn());
+ assertEquals("'S2'!A1", HSSFFormulaParser.toFormulaString(stubHSSF, fr.getParsedExpression()));
+
+ // Sheet 1 A7 is to another sheet, range
+ fr = fRecs[5];
+ assertEquals(6, fr.getRow());
+ assertEquals(0, fr.getColumn());
+ assertEquals("SUM(Sh3!A1:A4)", HSSFFormulaParser.toFormulaString(stubHSSF, fr.getParsedExpression()));
+
+
+ // Now, load via Usermodel and re-check
+ HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("3dFormulas.xls");
+ assertEquals("Sheet1!A1", wb.getSheetAt(0).getRow(1).getCell(0).getCellFormula());
+ assertEquals("SUM(Sh3!A1:A4)", wb.getSheetAt(0).getRow(6).getCell(0).getCellFormula());
+ }
+
+ private static final class MockHSSFListener implements HSSFListener {
+ public MockHSSFListener() {}
+ private final List<Record> _records = new ArrayList<Record>();
+ private final List<Record> _frecs = new ArrayList<Record>();
+
+ public void processRecord(Record record) {
+ _records.add(record);
+ if(record instanceof FormulaRecord) {
+ _frecs.add(record);
+ }
+ }
+ public FormulaRecord[] getFormulaRecords() {
+ FormulaRecord[] result = new FormulaRecord[_frecs.size()];
+ _frecs.toArray(result);
+ return result;
+ }
+ }
}