ASF Bugzilla – Attachment 34342 Details for
Bug 60219
[PATCH] FormulaParser can't parse external references when sheet name is quoted
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
FormulaParser.java and unit test patch for quoted external sheet names
bug60219.patch (text/plain), 3.97 KB, created by
Javen O'Neal
on 2016-10-08 23:36:26 UTC
(
hide
)
Description:
FormulaParser.java and unit test patch for quoted external sheet names
Filename:
MIME Type:
Creator:
Javen O'Neal
Created:
2016-10-08 23:36:26 UTC
Size:
3.97 KB
patch
obsolete
>Index: src/java/org/apache/poi/ss/formula/FormulaParser.java >=================================================================== >--- src/java/org/apache/poi/ss/formula/FormulaParser.java (revision 1763936) >+++ src/java/org/apache/poi/ss/formula/FormulaParser.java (working copy) >@@ -1119,6 +1119,18 @@ > return sb.toString(); > } > } >+ >+ private String getBookName() { >+ StringBuilder sb = new StringBuilder(); >+ // at this point look == '[' >+ GetChar(); >+ while (look != ']') { >+ sb.append(look); >+ GetChar(); >+ } >+ GetChar(); // ignore closing bracket ']' >+ return sb.toString(); >+ } > > /** > * Note - caller should reset {@link #_pointer} upon <code>null</code> result >@@ -1127,22 +1139,18 @@ > private SheetIdentifier parseSheetName() { > String bookName; > if (look == '[') { >- StringBuilder sb = new StringBuilder(); >- GetChar(); >- while (look != ']') { >- sb.append(look); >- GetChar(); >- } >- GetChar(); >- bookName = sb.toString(); >+ bookName = getBookName(); > } else { > bookName = null; > } > > if (look == '\'') { >+ Match('\''); >+ >+ if (look == '[') >+ bookName = getBookName(); >+ > StringBuffer sb = new StringBuffer(); >- >- Match('\''); > boolean done = look == '\''; > while(!done) { > sb.append(look); >Index: src/ooxml/testcases/org/apache/poi/ss/formula/TestFormulaParser.java >=================================================================== >--- src/ooxml/testcases/org/apache/poi/ss/formula/TestFormulaParser.java (revision 1763936) >+++ src/ooxml/testcases/org/apache/poi/ss/formula/TestFormulaParser.java (working copy) >@@ -28,6 +28,7 @@ > import org.apache.poi.ss.formula.ptg.AbstractFunctionPtg; > import org.apache.poi.ss.formula.ptg.NameXPxg; > import org.apache.poi.ss.formula.ptg.Ptg; >+import org.apache.poi.ss.formula.ptg.Ref3DPxg; > import org.apache.poi.ss.formula.ptg.StringPtg; > import org.apache.poi.xssf.XSSFTestDataSamples; > import org.apache.poi.xssf.usermodel.XSSFEvaluationWorkbook; >@@ -169,4 +170,36 @@ > assertNotNull(e.getMessage()); > } > } >+ >+ @Test >+ public void testParseExternalReferencesWithUnquotedSheetName() throws Exception { >+ XSSFWorkbook wb = new XSSFWorkbook(); >+ XSSFEvaluationWorkbook fpwb = XSSFEvaluationWorkbook.create(wb); >+ Ptg[] ptgs = FormulaParser.parse("[1]Sheet1!A1", fpwb, FormulaType.CELL, -1); >+ // org.apache.poi.ss.formula.ptg.Ref3DPxg [ [workbook=1] sheet=Sheet 1 ! A1] >+ assertEquals("Ptgs length", 1, ptgs.length); >+ assertTrue("Ptg class", ptgs[0] instanceof Ref3DPxg); >+ Ref3DPxg pxg = (Ref3DPxg) ptgs[0]; >+ assertEquals("External workbook number", 1, pxg.getExternalWorkbookNumber()); >+ assertEquals("Sheet name", "Sheet1", pxg.getSheetName()); >+ assertEquals("Row", 0, pxg.getRow()); >+ assertEquals("Column", 0, pxg.getColumn()); >+ wb.close(); >+ } >+ >+ @Test >+ public void testParseExternalReferencesWithQuotedSheetName() throws Exception { >+ XSSFWorkbook wb = new XSSFWorkbook(); >+ XSSFEvaluationWorkbook fpwb = XSSFEvaluationWorkbook.create(wb); >+ Ptg[] ptgs = FormulaParser.parse("'[1]Sheet 1'!A1", fpwb, FormulaType.CELL, -1); >+ // org.apache.poi.ss.formula.ptg.Ref3DPxg [ [workbook=1] sheet=Sheet 1 ! A1] >+ assertEquals("Ptgs length", 1, ptgs.length); >+ assertTrue("Ptg class", ptgs[0] instanceof Ref3DPxg); >+ Ref3DPxg pxg = (Ref3DPxg) ptgs[0]; >+ assertEquals("External workbook number", 1, pxg.getExternalWorkbookNumber()); >+ assertEquals("Sheet name", "Sheet 1", pxg.getSheetName()); >+ assertEquals("Row", 0, pxg.getRow()); >+ assertEquals("Column", 0, pxg.getColumn()); >+ wb.close(); >+ } > }
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 60219
:
34334
|
34342
|
34354
|
34357