mrkeyoor.com_
Fri 18 Sept 07:17 UTC
Dataevaluationupdated 18 Sept 2026

excelize review

Excelize is a Go library for reading, creating, and changing modern Microsoft Excel files without running Excel. It handles common workbook work such as cells, formulas, styles, charts, pictures, and large-sheet streaming inside a Go application.

Verdict

In our Go 1.24 sandbox, Excelize failed to install after 39 seconds when commit 0434413 triggered a Go 1.26.0 toolchain download that did not complete module verification. Excelize is still the first library I would evaluate for modern Excel work in a Go service because its format and API coverage are unusually broad. Pin the library and builder together, and test your real workbook fixtures before choosing master over the Go 1.25-based v2.11.0 release.

We ran it

Lab card: what happened when we ran excelizeScreenshot of excelize (xuri.me/excelize)
Install✗ · 39s
Build
Repo125 files~89,444 lines of source · 4.3 MB · 2 CI workflows · tests dir

Answers from our run

Does excelize build from source?

The dependency install failed, and the project has no separate build step. We cloned commit 0434413 into a clean Debian container with 3 CPUs and no project-specific setup.

Who should not use excelize?

Projects pinned to Go 1.24 or earlier: v2.11.0 requires Go 1.25, while the tested master commit declares Go 1.26.

What are the alternatives to excelize?

UniOffice, Apache POI, plandem/xlsx. In our Go 1.

Setup2/539-second install failure on the supplied Go 1.24 builder
Docs4/5Good examples and API docs; README lags master's Go 1.26 floor
Community5/520,920 stars with fixes merged in September 2026
Maturity4/5v2.11.0 covers many workbook features, with active edge-case fixes

Who it’s for

Go developers generating XLSX reports, exports, templates, or imports inside a backend service.
Teams that need to modify macro-enabled and template-based modern Excel formats.
Data pipelines that need a streaming API for large worksheets instead of holding every row in memory.
Applications that create charts, pictures, styles, pivot tables, or formulas without automating desktop Excel.

Who it’s NOT for

Projects pinned to Go 1.24 or earlier: v2.11.0 requires Go 1.25, while the tested master commit declares Go 1.26.
Locked-down builders that cannot fetch an automatic Go toolchain: our install stopped while the Go command tried to obtain and verify Go 1.26.0.
Applications that must read legacy .xls workbooks: the README lists XLAM, XLSM, XLSX, XLTM, and XLTX, but not XLS.
Bulk image-generation jobs that need predictable scaling today: open issue 2393 reports an O(n²) path when many distinct pictures are inserted.
Anyone looking for a spreadsheet editor or hosted conversion service: Excelize is an application library, not an end-user interface.

Setup reality

Our install at commit 0434413 failed after 39 seconds in a Go 1.24 Debian container. The Go command tried to download the Go 1.26.0 toolchain, then stopped while verifying that module through sum.golang.org. Installation never completed, so no build or tests ran.

Excelize is imported as github.com/xuri/excelize/v2 and needs no account, API key, database, or running office suite. The latest v2.11.0 release declares Go 1.25.0, while the tested master commit declares Go 1.26.0.

Automatic Go toolchain selection makes outbound module and checksum access part of setup when the builder is older than the module requires. The 4.3 MB repository has no Dockerfile, so teams need to provide a matching Go builder and their own container packaging if they use containers.

The 4.3 MB checkout covers most modern Excel work

Excelize reads and writes XLAM, XLSM, XLSX, XLTM, and XLTX files from Go. The 4.3 MB checkout contains 125 files and roughly 89,444 lines of source, which is substantial for a library with no separate server. Its public examples cover workbook creation, cell reads, row iteration, charts, and pictures. The wider API also handles styles, formulas, tables, pivot tables, comments, encryption, and worksheet structure.

That breadth is the reason to start here if your application already uses Go. A report service can create a workbook and save it directly, while an import path can open a user-supplied file and iterate its rows. The README describes Excelize as pure Go, so it does not ask you to install desktop Excel or coordinate an office-process worker. The module path remains github.com/xuri/excelize/v2, even though the repository lives under qax-os.

What happened when we ran it

Our sandbox cloned commit 0434413 and attempted installation in a fresh unprivileged Debian container with 3 CPUs, 8 GB of RAM, and the golang:1.24-bookworm image. Installation failed with exit code 1 after 39 seconds. The final log lines show the Go command downloading the Go 1.26.0 toolchain, then failing while verifying golang.org/toolchain through a request to sum.golang.org.

The log does not establish why that request failed, so a network diagnosis would be guesswork. Installation did not finish, and the harness did not proceed to a build or test run. The checkout had 2 CI workflow files, no Dockerfile, and a tests directory. Those repository signals cannot substitute for a passing run in our sandbox. The useful result is simple: this exact commit did not install in the stated Go 1.24 environment.

v2.11.0 and master require different Go toolchains

The released v2.11.0 module declares Go 1.25.0, while commit 0434413 on master declares Go 1.26.0. The public README still says Go 1.25 or later. That wording is technically compatible with 1.26, but it hides the practical difference for a team whose builder is pinned to 1.25. Release and branch choice now affect the minimum toolchain, so they belong in the same dependency update.

Go can download a newer toolchain automatically, which is what our 39-second attempt tried to do. That convenience depends on the builder being allowed to reach the module distribution and checksum services. Hermetic or air-gapped builds should provide the required toolchain in the base image and cache the module dependencies rather than discovering the mismatch during CI. Excelize itself needs no service credentials once the code and dependencies are available.

Streaming handles rows, while bulk pictures need scrutiny

Across roughly 89,444 source lines, Excelize has separate paths for ordinary worksheet access and streaming large amounts of data. The streaming API is the right place to begin when exports contain more rows than the application should retain as an in-memory workbook model. It still deserves fixture tests for styles, formulas, merged cells, and the exact consumer that opens the result, because a valid OOXML package can render differently across spreadsheet programs.

Pictures are a more specific warning. Open issue 2393 reports O(n²) behavior when AddPictureFromBytes inserts many distinct images into one sheet. The report traces repeated scans through drawing, media, and relationship state and says the same paths remain in v2.11.0. That does not make ordinary logos or a few product images impractical. It does mean catalog generators with thousands of unique pictures should reproduce their workload before committing to the current API path.

XLSX support does not include legacy XLS files

The README names 5 modern Excel-family formats, all based on Office Open XML packaging. It does not list the older binary .xls format. Teams ingesting long-lived customer archives should inspect their actual file extensions and contents before adoption, because renaming an old workbook does not convert it. Apache POI is a better comparison when a JVM service also has to deal with older Excel formats.

Feature coverage also differs from running Microsoft Excel. Excelize can store formulas and calculate many functions, but it is still a file library rather than the desktop application's calculation and rendering engine. The safest acceptance suite opens representative output in every consumer that matters, including Excel, LibreOffice, or a browser viewer. Test charts, print areas, pivot tables, macros, and encrypted files only when your product depends on them.

Two CI workflows and same-day fixes show active maintenance

The repository had 20,920 stars and 129 open issues and pull requests when fetched. Its last push was September 18, 2026, and the tested commit on that date closed an image-positioning issue with a unit-test update. The latest tagged release, v2.11.0, was published on July 6, 2026. Fresh commits plus current issue and pull request work support an active-maintenance judgment even though the newest release is older than master.

Our failed 39-second install keeps the recommendation conditional. Excelize offers enough workbook coverage to justify a trial, but the trial should begin with a builder that already matches the chosen module. Pin v2.11.0 if Go 1.25 is your supported floor, or move to master only after adopting Go 1.26 and running the repository's tests yourself. The version decision is complete only when your own XLSX fixtures open correctly in their final destination.

Alternatives

ProjectWhat it isPick it when
UniOfficeA Go library that covers Word, Excel, and PowerPoint documents in one project.pick this instead when one Go API must work across several Microsoft Office document types.
Apache POIA Java API for reading and writing Microsoft document formats, including Excel workbooks.pick this instead when the application already runs on the JVM or needs Java's Office-file ecosystem.
plandem/xlsxA smaller Go library focused on reading and writing XLSX files.pick this instead when a narrower XLSX-only API is enough and you can verify its feature coverage against your templates.

What people are saying

  1. [velocity-scout] qax-os/excelize

Sources

  1. Excelize repository and README
  2. Excelize module definition at commit 0434413
  3. Excelize v2.11.0 release notes
  4. Bulk picture insertion scaling report
  5. Excelize API reference

More data reviews

weekly · xgboost · awesome-machine-learning · tikv · zenoh · fonts · the whole board →