Although I have not noticed a problem with mkdocs and relatives, some markdown viewers will, under circumstances that I cannot reliably predict, not render correctly a "fenced" block (starting with 3 backticks) if it is not preceded by a blank line. "Correct" this situation wherever I was able to find it.
Use a white, rather than transparent, background for logo, making it viewable in dark mode.
A bit better emulation of dark mode in the readthedocs theme, which does not handle it "naturally".
Experiment with Properdocs as a substitute for the troubled Mkdocs package. Alternate approach to PR #4971.
Also add javascript for copy-to-clipboard functionality for readthedocs and mkdocs themes. A little less aesthetic than material themes, but it should work.
Still unable to add dark mode to readthedocs theme.
Move testVlookupWholeColumnRange and providerVlookupWholeColumnRange
from ParseFormulaTest to the correct location VLookupTest, which
extends AllSetupTeardown. Adapted to use $this->getSpreadsheet()
instead of managing the Spreadsheet lifecycle manually.
A table whose range covers its header row alone makes Excel report the
workbook as unreadable; it repairs the file by dropping the table, so the
markup the table was written for is lost without a word.
Excel itself never writes such a table. Asked to make one over a single row
of headings, it writes the table over the row below as well and leaves that
row empty — its `sheetData` holds no cell for it, and the sheet dimension
stays at the headings. The writer now does the same, so what is written is
what Excel would have written.
The row below is taken only when it holds nothing. A table silently
swallowing a row that belongs to something else would change what the sheet
says, so that case throws instead, naming the row in the way.
When resolving the end reference of a whole-column range (e.g. $A:$F),
getHighestDataRow($col) was called for the specific end column. If that
column contains no data it returns 1, producing an inverted range such as
A4:F1. This caused VLOOKUP and similar functions to return #N/A when the
formula used a whole-column reference across sheets where data only exists
in the left-hand columns.
Fix: call getHighestDataRow() without a column argument so the overall
highest data row across all columns is used for the end reference.
Reproducer:
Sheet2!A:D has data in cols A–C only; $A:$F produced A4:F1 → #N/A.
After fix: A1:F4 → VLOOKUP finds the value correctly.
Rewrite the test to write the spreadsheet, read it back and check
getValue() and getCalculatedValue(), following DurationTest, instead of
matching against the generated content.xml.