Lines a row is too short to show
A wrapped cell holding more lines than its row can show draws the first line and nothing after it; a parser reads every line.
How the text is hidden
Two settings that are each ordinary on their own: <alignment wrapText="1"/> on the cell's format in xl/styles.xml, and a row that states its own height — <row ht="15" customHeight="1"> in the sheet. Excel normally grows a row to fit the tallest wrapped cell in it; a row with customHeight keeps the height it was given, and every line past the ones that fit is drawn nowhere. The default 15pt row shows one line of 11pt text. Nothing about the hidden lines is unusual — same font, same colour, same fill as the line above them.
Why a model still reads it
Row height is a property of the row, stored in the sheet part; the cell's value is a shared string in another part. Cell readers resolve the string and never ask how tall the row is, so all three lines arrive as the cell's text.
What we do about it
readStyles reads wrapText from each cell format's <alignment>, and the sheet parser already reads ht and customHeight from each row. For a wrapped cell in a row with a stated height, the lines the row can show are the row height over the line height — the font size times limits.xlsxLineHeightPerFontPt, Excel's 15pt for 11pt Calibri — with a line counted as shown once limits.xlsxClippedLineVisibleFraction of it fits. The lines past that become a second run graded clipped, and the finding quotes only them.
How often it fires
0% of 200 real workbooks from five national open-data portals (CA, IE, DE, GR, UK), measured 2026-09-22.
This is an alert-volume number and nothing else. It says how often the alarm sounds on documents as found — not how often it is right, and not whether what it found was harmless. Documents as found may themselves carry concealment. Read it against the population named above rather than as a property of documents in general.
Seen in the wild
A red team put a false exchange rate into an Excel pricing sheet three ways — hidden cells and a fake sheet, then white font, then three lines in a cell styled like its neighbours with the row left at its default height so only the first line showed — and the last one got past a model that had caught the white font.
Check your own file
Three commands: a key, credit, a verdict.
Start with the API