You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@nifi.apache.org by "Daniel Stieglitz (Jira)" <ji...@apache.org> on 2026/10/05 18:11:00 UTC
[jira] [Assigned] (NIFI-16429) ExcelReader - "Use Starting Row" strategy doesn't evaluate formulas for Header Row
[ https://issues.apache.org/jira/browse/NIFI-16429?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Daniel Stieglitz reassigned NIFI-16429:
---------------------------------------
Assignee: Daniel Stieglitz
> ExcelReader - "Use Starting Row" strategy doesn't evaluate formulas for Header Row
> ----------------------------------------------------------------------------------
>
> Key: NIFI-16429
> URL: https://issues.apache.org/jira/browse/NIFI-16429
> Project: Apache NiFi
> Issue Type: Bug
> Reporter: Philipp Korniets
> Assignee: Daniel Stieglitz
> Priority: Major
> Attachments: test_book.xlsx
>
>
> When processing this workbook, header in Second Sheet contains formula.
> ="value_in_"&'First Sheet'!B1
> Previously, ConvertExcelToCSV was returning last cached value. However in new ExcelReader value comes from DataFormatter and not from getCellValue() for strategy *Use Starting Row*
> So the result looks wrong i think
> {code:java}
> test_col1,"\"value_in_\"&'First Sheet'!B1",test_col3{code}
> AI details:
> *{{ExcelReader.java}}* ({{{}getSchemaAccessStrategy{}}}, about lines 177–186): for "Use Starting Row" it builds {{{}new ExcelStartingRowSchemaInference(...){}}}.
>
> java
> {code:java}
> if (ExcelStartingRowSchemaInference.USE_STARTING_ROW.getValue().equals(allowableValue)) {
> ...
> final SchemaInferenceEngine<Row> inference =
> new ExcelStartingRowSchemaInference(rowEvaluationStrategy, firstRow, createTimeValueInference());
> return createInferSchemaAccessStrategy(context, inference); {code}
> *{{{}ExcelStartingRowSchemaInference.java{}}}:*
> ||Approx. line||Code||
> |52|{{private final DataFormatter dataFormatter;}}|
> |58|{{this.dataFormatter = new DataFormatter();}} (constructor, plain, no evaluator, no {{{}setUseCachedValuesForFormulaCells{}}})|
> |71|{{fieldNames = getFieldNames(firstRow, row);}} (in {{{}inferSchema{}}}, when {{{}index == 0{}}})|
> |*103*|*{{final String fieldName = dataFormatter.formatCellValue(cell);}}* (in {{{}getFieldNames{}}})|
> Line 103 is the one that returns the formula text on POI 5.x. The header row is the first row the inference loop reads, so {{getFieldNames()}} gets it at line 71.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)