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]