Skip to content

Convert XLS, ODS and TSV spreadsheets without LibreOffice - #9

Merged
KnifeLemon merged 2 commits into
mainfrom
pr/09-spreadsheets
Sep 30, 2026
Merged

KnifeLemon merged 2 commits into
mainfrom
pr/09-spreadsheets

Conversation

@KnifeLemon

Copy link
Copy Markdown
Owner

XLS (ExcelDataReader), ODS and TSV readers, an ODS writer and a full XLSX writer that keeps numbers, dates, formats, styles, merges and widths. XLS/ODS/TSV → PDF and HWPX go through the HWPX writer.

🤖 Generated with Claude Code

KnifeLemon and others added 2 commits October 1, 2026 07:33
XLS (Excel 97-2003, also .xlt and Excel 5/95) is read with ExcelDataReader
(MIT): values formatted with the same number formats as XLSX, merged cells
and alignment. Column widths, custom row heights and hidden rows/columns
come from the BIFF records themselves (XlsLayout), because ExcelDataReader
drops widths LibreOffice writes without the "user set" flag. Encrypted
workbooks stop with a clear message.

ODS is read and written by our own code: repeated rows and columns (the
empty repeats to the end of the sheet are skipped), spans, every value
type with the text Calc shows, cell styles, widths, heights, hidden rows,
columns and sheets, frozen rows. Excel number format codes and ODF data
styles are converted both ways, so numbers, dates and percentages keep
their formats in XLSX <-> ODS.

Cells now carry their value and number format besides the shown text, so
XLSX output keeps real numbers and dates; XlsxWriter writes every sheet
with styles, merges, widths, heights and frozen rows. TSV is read and
written like CSV with a tab delimiter.

The spreadsheet engine converts xlsx/xls/ods/csv/tsv to xlsx/ods/csv/tsv,
and the HWPX writer takes xls/ods/tsv, so these formats reach PDF and
images through rhwp; built-in routes win over LibreOffice.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts:
#	Directory.Packages.props
#	docs/ENGINES.md
#	src/Filee.Engines/Filee.Engines.csproj
#	src/Filee.Engines/Office/SpreadsheetConverter.cs
@KnifeLemon KnifeLemon added the formats New formats and engines label Sep 30, 2026
@KnifeLemon
KnifeLemon merged commit d92831a into main Sep 30, 2026
@KnifeLemon
KnifeLemon deleted the pr/09-spreadsheets branch September 30, 2026 23:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

formats New formats and engines

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant