Author: fanningpj
Date: Thu Jun 22 21:37:01 2023
New Revision: 1910561
URL: http://svn.apache.org/viewvc?rev=1910561&view=rev
Log:
[bug-66661] revert github-269 due to it breaking formulas with table references
Added:
poi/trunk/poi/src/test/java/org/apache/poi/hssf/usermodel/TestHSSFFormulaParser.java
(with props)
Modified:
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFCell.java
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/TestXSSFCell.java
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/TestXSSFFormulaEvaluation.java
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/TestXSSFFormulaParser.java
Modified:
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFCell.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFCell.java?rev=1910561&r1=1910560&r2=1910561&view=diff
==============================================================================
---
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFCell.java
(original)
+++
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFCell.java
Thu Jun 22 21:37:01 2023
@@ -29,7 +29,6 @@ import org.apache.poi.ss.formula.Formula
import org.apache.poi.ss.formula.FormulaType;
import org.apache.poi.ss.formula.SharedFormula;
import org.apache.poi.ss.formula.eval.ErrorEval;
-import org.apache.poi.ss.formula.ptg.ErrPtg;
import org.apache.poi.ss.formula.ptg.Ptg;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellBase;
@@ -493,19 +492,7 @@ public final class XSSFCell extends Cell
if (wb.getCellFormulaValidation()) {
XSSFEvaluationWorkbook fpb = XSSFEvaluationWorkbook.create(wb);
//validate through the FormulaParser
- Ptg[] ptgs = FormulaParser.parse(formula, fpb, formulaType,
wb.getSheetIndex(getSheet()), getRowIndex());
- // Make its format consistent with Excel.
- // eg: "SUM('Sheet1:Sheet2'!A1:B1)" will be trans to
"SUM(Sheet1:Sheet2!A1:B1)"
- boolean hasError = false;
- for (Ptg ptg : ptgs) {
- if (ptg instanceof ErrPtg) {
- hasError = true;
- break;
- }
- }
- if (!hasError) {
- formula = FormulaRenderer.toFormulaString(fpb, ptgs);
- }
+ FormulaParser.parse(formula, fpb, formulaType,
wb.getSheetIndex(getSheet()), getRowIndex());
}
CTCellFormula f;
Modified:
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/TestXSSFCell.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/TestXSSFCell.java?rev=1910561&r1=1910560&r2=1910561&view=diff
==============================================================================
---
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/TestXSSFCell.java
(original)
+++
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/TestXSSFCell.java
Thu Jun 22 21:37:01 2023
@@ -560,14 +560,13 @@ public final class TestXSSFCell extends
@Test
public final void
testCopyCellFrom_CellCopyPolicy_formulaWithUnregisteredUDF() {
setUp_testCopyCellFrom_CellCopyPolicy();
- // this will format the formula string,
srcCell.setCellFormula("MYFUNC2(123, $A5, Sheet1!$B7)");
// Copy formula verbatim (no shifting). This is okay because
copyCellFrom is Internal.
// Users should use higher-level copying functions to row- or
column-shift formulas.
final CellCopyPolicy policy = new
CellCopyPolicy.Builder().cellFormula(true).build();
destCell.copyCellFrom(srcCell, policy);
- assertEquals("MYFUNC2(123,$A5,Sheet1!$B7)", destCell.getCellFormula());
+ assertEquals("MYFUNC2(123, $A5, Sheet1!$B7)",
destCell.getCellFormula());
}
@Test
Modified:
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/TestXSSFFormulaEvaluation.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/TestXSSFFormulaEvaluation.java?rev=1910561&r1=1910560&r2=1910561&view=diff
==============================================================================
---
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/TestXSSFFormulaEvaluation.java
(original)
+++
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/TestXSSFFormulaEvaluation.java
Thu Jun 22 21:37:01 2023
@@ -186,8 +186,8 @@ public final class TestXSSFFormulaEvalua
// Add another formula referencing these workbooks
Cell cXSL_cell2 = rXSL.createCell(40);
cXSL_cell2.setCellFormula("[56737.xls]Uses!$C$1");
- // it become [2] like the others
- assertEquals("[2]Uses!$C$1", cXSL_cell2.getCellFormula());
+ // TODO Shouldn't it become [2] like the others?
+ assertEquals("[56737.xls]Uses!$C$1",
cXSL_cell2.getCellFormula());
assertEquals("\"Hello!\"",
evaluator.evaluate(cXSL_cell2).formatAsString());
Modified:
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/TestXSSFFormulaParser.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/TestXSSFFormulaParser.java?rev=1910561&r1=1910560&r2=1910561&view=diff
==============================================================================
---
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/TestXSSFFormulaParser.java
(original)
+++
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/TestXSSFFormulaParser.java
Thu Jun 22 21:37:01 2023
@@ -400,10 +400,10 @@ public final class TestXSSFFormulaParser
}
@Test
- void testQuotedSheetNamesReference() {
+ void testQuotedSheetNamesReference() throws IOException {
// quoted sheet names bug fix
- Workbook[] wbs = new Workbook[]{new HSSFWorkbook(), new
XSSFWorkbook()};
- for (Workbook wb : wbs) {
+ // see TestHSSFFormulaEvaluator equivalent which behaves a little
differently
+ try (XSSFWorkbook wb = new XSSFWorkbook()) {
Sheet sheet1 = wb.createSheet("Sheet1");
Sheet sheet2 = wb.createSheet("Sheet2");
Sheet sheet3 = wb.createSheet("Sheet 3");
@@ -438,7 +438,7 @@ public final class TestXSSFFormulaParser
formula = "SUM('Sheet1:Sheet2'!A1:B1)";
cell.setCellFormula(formula);
cellFormula = cell.getCellFormula();
- assertEquals("SUM(Sheet1:Sheet2!A1:B1)", cellFormula);
+ assertEquals("SUM('Sheet1:Sheet2'!A1:B1)", cellFormula);
// quoted sheet names with space
cell = tempRow.createCell(4);
Added:
poi/trunk/poi/src/test/java/org/apache/poi/hssf/usermodel/TestHSSFFormulaParser.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi/src/test/java/org/apache/poi/hssf/usermodel/TestHSSFFormulaParser.java?rev=1910561&view=auto
==============================================================================
---
poi/trunk/poi/src/test/java/org/apache/poi/hssf/usermodel/TestHSSFFormulaParser.java
(added)
+++
poi/trunk/poi/src/test/java/org/apache/poi/hssf/usermodel/TestHSSFFormulaParser.java
Thu Jun 22 21:37:01 2023
@@ -0,0 +1,96 @@
+/* ====================================================================
+ 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.usermodel;
+
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.junit.jupiter.api.Test;
+
+import java.io.IOException;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+public class TestHSSFFormulaParser {
+
+ @Test
+ void testQuotedSheetNamesReference() throws IOException {
+ // quoted sheet names bug fix
+ // see TestXSSFFormulaEvaluator equivalent which behaves a little
differently
+ try (Workbook wb = new HSSFWorkbook()) {
+ Sheet sheet1 = wb.createSheet("Sheet1");
+ Sheet sheet2 = wb.createSheet("Sheet2");
+ Sheet sheet3 = wb.createSheet("Sheet 3");
+ Sheet sheet4 = wb.createSheet("Sheet4>");
+
+ Row tempRow = sheet1.createRow(0);
+ tempRow.createCell(0).setCellValue(1);
+ tempRow.createCell(1).setCellValue(2);
+
+ tempRow = sheet2.createRow(0);
+ tempRow.createCell(0).setCellValue(3);
+ tempRow.createCell(1).setCellValue(4);
+
+ tempRow = sheet3.createRow(0);
+ tempRow.createCell(0).setCellValue(5);
+ tempRow.createCell(1).setCellValue(6);
+
+ tempRow = sheet4.createRow(0);
+ tempRow.createCell(0).setCellValue(5);
+ tempRow.createCell(1).setCellValue(6);
+
+ Cell cell = tempRow.createCell(2);
+
+ // unquoted sheet names
+ String formula = "SUM(Sheet1:Sheet2!A1:B1)";
+ cell.setCellFormula(formula);
+ String cellFormula = cell.getCellFormula();
+ assertEquals(formula, cellFormula);
+
+ // quoted sheet names with no space
+ cell = tempRow.createCell(3);
+ formula = "SUM('Sheet1:Sheet2'!A1:B1)";
+ cell.setCellFormula(formula);
+ cellFormula = cell.getCellFormula();
+ assertEquals("SUM(Sheet1:Sheet2!A1:B1)", cellFormula);
+
+ // quoted sheet names with space
+ cell = tempRow.createCell(4);
+ formula = "SUM('Sheet1:Sheet 3'!A1:B1)";
+ cell.setCellFormula(formula);
+ cellFormula = cell.getCellFormula();
+ assertEquals(formula, cellFormula);
+
+ // quoted sheet names with special character
+ cell = tempRow.createCell(5);
+ formula = "SUM('Sheet1:Sheet4>'!A1:B1)";
+ cell.setCellFormula(formula);
+ cellFormula = cell.getCellFormula();
+ assertEquals(formula, cellFormula);
+
+ // quoted sheet names with special character #2
+// cell = tempRow.createCell(6);
+// formula = "SUM('Sheet 3:Sheet4>'!A1:B1)";
+// cell.setCellFormula(formula);
+// cellFormula = cell.getCellFormula();
+// assertEquals(formula, cellFormula);
+ }
+ }
+
+}
Propchange:
poi/trunk/poi/src/test/java/org/apache/poi/hssf/usermodel/TestHSSFFormulaParser.java
------------------------------------------------------------------------------
svn:eol-style = native
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]