Author: fanningpj
Date: Fri May 19 13:09:15 2023
New Revision: 1909934

URL: http://svn.apache.org/viewvc?rev=1909934&view=rev
Log:
[bug-66607] perf issue processing array formulas

Modified:
    
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/extractor/XSSFImportFromXML.java
    
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFEvaluationWorkbook.java
    
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFSheet.java

Modified: 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/extractor/XSSFImportFromXML.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/extractor/XSSFImportFromXML.java?rev=1909934&r1=1909933&r2=1909934&view=diff
==============================================================================
--- 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/extractor/XSSFImportFromXML.java
 (original)
+++ 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/extractor/XSSFImportFromXML.java
 Fri May 19 13:09:15 2023
@@ -113,7 +113,8 @@ public class XSSFImportFromXML {
                 String textContent = result.getTextContent();
                 LOG.atDebug().log("Extracting with xpath {} : value is '{}'", 
xpathString, textContent);
                 XSSFCell cell = singleXmlCell.getReferencedCell();
-                LOG.atDebug().log("Setting '{}' to cell {}-{} in sheet {}", 
textContent, 
box(cell.getColumnIndex()),box(cell.getRowIndex()),cell.getSheet().getSheetName());
+                LOG.atDebug().log("Setting '{}' to cell {}-{} in sheet {}", 
textContent,
+                        box(cell.getColumnIndex()), box(cell.getRowIndex()), 
cell.getSheet().getSheetName());
                 setCellValue(textContent, cell, xmlDataType);
             }
         }
@@ -158,7 +159,8 @@ public class XSSFImportFromXML {
                     if (cell == null) {
                         cell = row.createCell(columnId);
                     }
-                    LOG.atDebug().log("Setting '{}' to cell {}-{} in sheet 
{}", value, 
box(cell.getColumnIndex()),box(cell.getRowIndex()),table.getXSSFSheet().getSheetName());
+                    LOG.atDebug().log("Setting '{}' to cell {}-{} in sheet 
{}", value,
+                            box(cell.getColumnIndex()), 
box(cell.getRowIndex()), table.getXSSFSheet().getSheetName());
                     setCellValue(value, cell, xmlColumnPr.getXmlDataType());
                 }
             }

Modified: 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFEvaluationWorkbook.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFEvaluationWorkbook.java?rev=1909934&r1=1909933&r2=1909934&view=diff
==============================================================================
--- 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFEvaluationWorkbook.java
 (original)
+++ 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFEvaluationWorkbook.java
 Fri May 19 13:09:15 2023
@@ -81,7 +81,7 @@ public final class XSSFEvaluationWorkboo
     public Ptg[] getFormulaTokens(EvaluationCell evalCell) {
         final XSSFCell cell = ((XSSFEvaluationCell)evalCell).getXSSFCell();
         final int sheetIndex = _uBook.getSheetIndex(cell.getSheet());
-        final int rowIndex = cell.getRowIndex();
-        return FormulaParser.parse(cell.getCellFormula(this), this, 
FormulaType.CELL, sheetIndex, rowIndex);
+        return FormulaParser.parse(cell.getCellFormula(this), this,
+                FormulaType.CELL, sheetIndex, cell.getRowIndex());
     }
 }

Modified: 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFSheet.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFSheet.java?rev=1909934&r1=1909933&r2=1909934&view=diff
==============================================================================
--- 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFSheet.java 
(original)
+++ 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFSheet.java 
Fri May 19 13:09:15 2023
@@ -4171,8 +4171,10 @@ public class XSSFSheet extends POIXMLDoc
     }
 
     /* package */ boolean isCellInArrayFormulaContext(XSSFCell cell) {
+        final int rowIndex = cell.getRowIndex();
+        final int columnIndex = cell.getColumnIndex();
         for (CellRangeAddress range : arrayFormulas) {
-            if (range.isInRange(cell.getRowIndex(), cell.getColumnIndex())) {
+            if (range.isInRange(rowIndex, columnIndex)) {
                 return true;
             }
         }
@@ -4180,8 +4182,10 @@ public class XSSFSheet extends POIXMLDoc
     }
 
     /* package */ XSSFCell getFirstCellInArrayFormula(XSSFCell cell) {
+        final int rowIndex = cell.getRowIndex();
+        final int columnIndex = cell.getColumnIndex();
         for (CellRangeAddress range : arrayFormulas) {
-            if (range.isInRange(cell.getRowIndex(), cell.getColumnIndex())) {
+            if (range.isInRange(rowIndex, columnIndex)) {
                 return 
getRow(range.getFirstRow()).getCell(range.getFirstColumn());
             }
         }
@@ -4868,18 +4872,19 @@ public class XSSFSheet extends POIXMLDoc
      * @param cell The cell that is removed
      * @param evalWb BaseXSSFEvaluationWorkbook in use, if one exists
      */
-    protected void onDeleteFormula(XSSFCell cell, BaseXSSFEvaluationWorkbook 
evalWb){
-
+    protected void onDeleteFormula(final XSSFCell cell, final 
BaseXSSFEvaluationWorkbook evalWb) {
+        final int rowIndex = cell.getRowIndex();
+        final int columnIndex = cell.getColumnIndex();
         CTCellFormula f = cell.getCTCell().getF();
         if (f != null && f.getT() == STCellFormulaType.SHARED && f.isSetRef() 
&& f.getStringValue() != null) {
 
             CellRangeAddress ref = CellRangeAddress.valueOf(f.getRef());
             if(ref.getNumberOfCells() > 1){
                 DONE:
-                for(int i = cell.getRowIndex(); i <= ref.getLastRow(); i++){
+                for(int i = rowIndex; i <= ref.getLastRow(); i++){
                     XSSFRow row = getRow(i);
                     if(row != null) {
-                        for(int j = cell.getColumnIndex(); j <= 
ref.getLastColumn(); j++){
+                        for(int j = columnIndex; j <= ref.getLastColumn(); 
j++){
                             XSSFCell nextCell = row.getCell(j);
                             if(nextCell != null && nextCell != cell && 
nextCell.getCellType() == CellType.FORMULA) {
                                 CTCellFormula nextF = 
nextCell.getCTCell().getF();



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to