You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@poi.apache.org by "pjfanning (via GitHub)" <gi...@apache.org> on 2026/09/20 13:12:11 UTC

[PR] XSSFCell: a cell given its own formula leaves its shared formula group [poi]

pjfanning opened a new pull request, #1319:
URL: https://github.com/apache/poi/pull/1319

   Stacked on #1318 (the last commit is the change; merge #1318 first, or I rebase once it lands).
   
   ## The bug
   
   `XSSFCell.setCellFormula` on a cell of a shared formula group:
   
   - **on the master**: kept the group and re-registered it with the *new* text (`onReadCell(this)`), so every follower silently changed meaning — `D2 := A2*100` made `D3` report and evaluate `A3*100`.
   - **on a follower**: stored the text in the cell's `<f>` but left `t="shared"`/`si`, and `getCellFormula()`/evaluation derive a shared cell from the master — so the new formula was written to the file but ignored by POI.
   
   Excel un-shares the edited cell: it becomes an ordinary formula cell, the other cells keep the formula they had, and if the edited cell was the master the next cell of the group becomes master with the old formula shifted to its position.
   
   ## The fix
   
   In `XSSFCell.setFormula`, when the existing `<f>` is shared: if it is the master, run `XSSFSheet.onDeleteFormula` first (the promotion of the next cell that already exists for a *removed* master, bug 58106) and drop `ref`; in both cases drop `t` and `si`; then set the text. One method, ~10 lines.
   
   This reverses the expectation recorded in `test61869` ("c2 remains the master formula … formula in the follower cell is rebuilt"), which pinned the previous behaviour when the unreadable-file problem was fixed. The rewritten test checks the Excel semantics and that the file still round-trips; `settingAFormulaOnASharedFormulaFollowerUnsharesIt` covers the follower case on the 58106 sample; `TestXSSFFormulaTokenCache.aChangedSharedMasterLeavesTheGroupToTheNextCell` (from #1318, adjusted here) checks the evaluator side.
   
   Locally green: `TestXSSFCell` (86), `TestXSSFFormulaTokenCache`, all `TestXSSFFormulaEvaluator*` incl. the shared-formula variants, `TestXSSFSheet`, `TestXSSFBugs`, `TestXSSFSheetShiftRows*`, `TestFormulaEvaluatorOnXSSF`, `xssf.streaming.*`, `ss.usermodel.*` — apart from the pre-existing font-metrics failures (`stackoverflow23114397`, `TestSXSSFSheetAutoSizeColumn`).
   
   `changes.xml` left for you (this one is user-visible).
   
   🤖 Generated with [Claude Code](https://claude.com/claude-code)


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: dev-unsubscribe@poi.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@poi.apache.org
For additional commands, e-mail: dev-help@poi.apache.org


Re: [PR] XSSFCell: a cell given its own formula leaves its shared formula group [poi]

Posted by "pjfanning (via GitHub)" <gi...@apache.org>.
pjfanning merged PR #1319:
URL: https://github.com/apache/poi/pull/1319


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: dev-unsubscribe@poi.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@poi.apache.org
For additional commands, e-mail: dev-help@poi.apache.org