Excelize 2.4.1 is Released – Go API for Spreadsheets

Excelize is a library written in pure Go providing a set of functions that allow you to write to and read from XLSX / XLSM / XLTM files. Supports reading and writing spreadsheet documents generated by Microsoft Excel™ 2007 and later. Supports complex components by high compatibility, and provided streaming API for generating or reading data from a worksheet with huge amounts of data.

GitHub: github.com/xuri/excelize

We are pleased to announce the release of version 2.4.1. Featured are a handful of new areas of functionality and numerous bug fixes.

A summary of changes is available in the Release Notes. A full list of changes is available in the changelog.

Release Notes

The most notable changes in this release are:

Compatibility

Change Go Modules import path to github.com/xuri/excelize/v2

Notable Features

  • Support set column width in streaming mode, related issue #625
  • Support merge cell in streaming mode, related issue #826
  • New support 2 formula functions: BESSELK, BESSELY
  • The formula calculation engine now supports defined name references
  • Add disable option for chart xAxis and yAxis
  • The function AddPivotTable support reference source data range by defined name, relate issue #856
  • The following function now is concurrency safety, relate issue #861
    • AddPicture and GetPicture concurrency insert or get the picture from the worksheet
    • Rows and Cols concurrency iterate rows and columns
    • SetSheetRow concurrency set cells for a row in the worksheet
    • SetCellStyle concurrency set cell style
    • NewStyle concurrency create the style
  • Export 24 function’s error message

Improve the Compatibility

  • Improves compatibility for default XML namespace attributes, fix generated corrupted file in some case
  • Improves compatibility with non-standard page setup attributes, fix open spreadsheet failed in some case
  • Add count attribute in shared strings table
  • Remove UTC timezone requirement when setting cell value with time, related issue #409
  • Improves compatibility with XML control character in the escape literal string
  • Rename exported field File.XLSX to File.Pkg
  • Change the sheet names are not case sensitive for NewSheet, GetSheetIndex, DeleteSheet, resolve issue #873
  • Fix missing pivot attribute of conditional formatting, resolve issue #883
  • Improvement compatibility with invalid first-page number attribute in the page layout
  • Add maximum character limit and fix missing preserve character for SetCellRichText

Bug Fixes

  • Fix 12/24 hours time format parsing error, resolve issue #823 and #841
  • Fix can’t get comments by GetComments in some cases, resolve issue #825
  • Fix issue when get and add comments on multi authors, resolve issue #829 and #830
  • Fix invalid file path and duplicate namespace when re-creating worksheet, resolve issue #834
  • Fix set outline attributes not work when the value of showOutlineSymbols, summaryBelow and summaryRight attributes are false
  • Avoid empty rows in the tail of the worksheet by GetRows, resolve issue #842
  • Fix missing formula cell when getting rows value, resolve issue #855
  • Fix comparison fails inside and outside IF function, resolve issue #858
  • Fix GetRowHeight actually get the height of the next row
  • Fix incorrect scope when getting and delete the defined name, resolve issue #879
  • Attribute LocalSheetID in the defined name should be equal to SheetIndex instead of SheetID
  • Fix missing set each cell’s styles when set columns style, resolve issue #467
  • Prevent panic when an incorrect range is provided as PivotTableRange on creating a pivot table
  • Fix reading decimals precision issue, resolve issue #848 and #852
  • Escape XML character in the drop list, avoid corrupted file generated, resolve issue #971
  • Fix incorrect character count limit in the drop list, resolve issue #972
  • Fix high CPU usage on reading cell value with number format caused by Excel time parse issue in some case, resolve issue #974
  • Fix month parsing error in custom number format in some cases

Performance

  • Reduce redundant memory on Save and SaveAs about 19%

Miscellaneous

  • Fix code security issue CWE-190 and CWE-681
  • The dependencies module has been updated
  • Unit tests and godoc updated
  • Use GitHub Action for unit testing
  • Documentation website with multilingual: Arabic, German, Spanish, English, French, Russian, Chinese, Japanese, and Korean, which has been updated
5 Likes

I’m using Excelize on a project and it’s great. Glad to see you’re on the forum as well.

Just started using it today! I have a project that takes a JSON description of a database schema and can emit models in a few languages from that schema. I wanted to add support for a 3rd party application that uses Excel spreadsheets to define its schemas, so I used Excelize to generate the files in the right format.

It was very easy to use; I got it right my first try which is more than I can say for the first time I tried using the OpenXML SDK! Starred in GitHub!

Yeah - I’ve always found it mildly funny that the OpenXML SDK is made by Microsoft and it’s one of the worst libraries for working with XLSX. It’s fast, but man is it a pain to get your output perfect. EPPlus is OK but at the time I was working on the project where I used OpenXML, EPPlus didn’t support .NET Core so it was a nonstarter.