Skip to content

Rewrite as a native xls reader on libxls_jll, and migrate to test item framework - #28

Merged
davidanthoff merged 2 commits into
mainfrom
migrate-testitem-framework
Aug 29, 2026
Merged

Rewrite as a native xls reader on libxls_jll, and migrate to test item framework#28
davidanthoff merged 2 commits into
mainfrom
migrate-testitem-framework

Conversation

@davidanthoff

@davidanthoff davidanthoff commented Aug 29, 2026

Copy link
Copy Markdown
Member

This PR finishes LibXLS.jl as a native reader for legacy Excel xls files (Excel 97-2003), and migrates the repository to the test item framework.

Native rewrite

  • Replaces the dead BinaryProvider deps/ machinery with a dependency on the registered libxls_jll (v1.6.2; the Yggdrasil recipe dates back to Add builder for libxls JuliaPackaging/Yggdrasil#251). A bump of the jll to libxls 1.6.3 with upstream security fixes is pending in [libxls] Update to v1.6.3 JuliaPackaging/Yggdrasil#14598 (green; the existing libxls_jll = "1.6.2" compat already covers it).
  • Verifies and extends the C struct mirrors against the libxls 1.6.2/1.6.3 headers; cell access goes through the bounds-checked public xls_cell API.
  • Completes cell record decoding: numbers, strings, bools, blank cells (missing), error cells (new CellError type showing #DIV/0! etc.), and formula results (numeric, string, bool, and error results).
  • Adds date/time support, the main gap of the old draft: number formats from the workbook's XF/FORMAT tables are classified as dates (builtin format-id table plus custom format string sniffing), and serial values convert to DateTime/Time, honoring both the 1900 date system (including Excel's phantom 1900-02-29) and the 1904 system.
  • Fixes sheet visibility (BOUNDSHEET visibility 0 means visible, not the reverse).

Cell values come back as plain Julia values: Float64, String, Bool, DateTime, Time, CellError or missing — no DataValues dependency, so the package is usable directly from the Tables.jl world. It is the xls counterpart to XLSX.jl, which this package deliberately does not cover.

Tests

The old data/book1.xls/book1_1904.xls suite is ported (with the previously commented-out date expectations now enabled, and the 1904 file verified to produce the same wall-clock dates), and a new suite runs against ExcelReaders' TestData.xls fixture, cross-checked against the values the xlrd-based ExcelReaders returned for the same file. 3 test items, 112 assertions, green on Windows and in CI.

Test item framework migration

  • Tests use TestItems.jl @testitems with a TestItemRunner-based test/runtests.jl
  • CI is the reusable testitem workflow v2 (juliaci.yml), PkgButler workflows removed, dependabot added
  • Minimum Julia is 1.12

Release notes

Version is 1.0.0-DEV; tag as v1.0.0 and register — this must be registered before the companion ExcelReaders PR (queryverse/ExcelReaders.jl#115) can go green.

🤖 Generated with Claude Code

davidanthoff and others added 2 commits August 28, 2026 18:04
Migrate tests and CI to the test item framework, remove PkgButler,
bump min Julia to 1.12, and modernize repo infrastructure.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Move the package off 0.x to a proper 1.0 major version, and accept
1.0 versions of Queryverse sibling packages in compat.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@davidanthoff davidanthoff changed the title Migrate to test item framework Rewrite as a native xls reader on libxls_jll, and migrate to test item framework Aug 29, 2026
@davidanthoff
davidanthoff merged commit 6902550 into main Aug 29, 2026
18 checks passed
@davidanthoff
davidanthoff deleted the migrate-testitem-framework branch August 29, 2026 02:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant