Excelize 釋出 2.5.0 版本,Go 語言 Excel 文件基礎庫

xuri 發表於 2022-01-02
Excel Go

github.com/xuri/excelize

Excelize 是 Go 語言編寫的用於操作 Office Excel 文件基礎庫,基於 ECMA-376,ISO/IEC 29500 國際標準。可以使用它來讀取、寫入由 Microsoft Excel™ 2007 及以上版本建立的電子表格文件。支援 XLSX / XLSM / XLTM 等多種文件格式,高度相容帶有樣式、圖片 (表)、透視表、切片器等複雜元件的文件,並提供流式讀寫 API,用於處理包含大規模資料的工作簿。可應用於各類報表平臺、雲端計算、邊緣計算等系統。入選 2020 Gopher China - Go 領域明星開源專案 (GSP)、2018 年開源中國碼雲最有價值開源專案 GVP (Gitee Most Valuable Project),目前已成為 Go 語言最受歡迎的 Excel 文件基礎庫。

開原始碼

GitHub: github.com/xuri/excelize

Gitee: gitee.com/xurime/excelize

中文文件: xuri.me/excelize/zh-hans

2022年1月3日,社群正式釋出了 2.5.0 版本,該版本包含了多項新增功能、錯誤修復和相容性提升優化。下面是有關該版本更新內容的摘要,完整的更改列表可檢視 changelog

此版本中最顯著的變化包括:

相容性提示

  • 開啟已有工作簿或在獲取行迭代器後,需要呼叫對應的 Close 函式關閉工作簿和資料流
  • 修改 ReadZipReaderFile 的實現, 支援通過選項指定解壓至記憶體或檔案系統
  • 移除了不必要的匯出變數 XMLHeader,可使用 encoding/xml 包的 xml.Header 代替
  • 移除了不再使用的匯出變數 ErrToExcelTime

新增功能

  • 新增 API: SetRowStyle 支援設定整行樣式, 相關 issue #990
  • 新增 API: GetCellType 支援獲取單元格資料型別, 相關 issue #417 和 #520
  • 新增 API: SetAppPropsGetAppProps 支援設定與獲取工作簿應用程式屬性, 相關 issue #1095
  • GetCellValue, GetRows, GetCols, RowsCols 支援指定是否讀取單元格原始值而不應用數字格式表示式, 相關 issue #621
  • 新增 95 項公式函式: ACCRINT, ACCRINTM, ADDRESS, AMORDEGRC, AMORLINC, AVEDEV, AVERAGEIF, CHIDIST, CONFIDENCE, CONFIDENCE.NORM, COUNTIF, COUNTIFS, COUPDAYBS, COUPDAYS, COUPDAYSNC, COUPNCD, COUPNUM, COUPPCD, DATEVALUE, DAY, DAYS, DELTA, DEVSQ, DISC, DURATION, ERF, ERF.PRECISE, ERFC, ERFC.PRECISE, GEOMEAN, GESTEP, IFNA, IFS, INDEX, INTRATE, ISFORMULA, ISLOGICAL, ISREF, ISOWEEKNUM, MATCH, MAXA, MAXIFS, MDURATION, MINIFS, MINUTE, MONTH, ODDFPRICE, PERCENTILE.EXC, PERCENTRANK.EXC, PERCENTRANK.INC, PERCENTRANK, PRICE, PRICEDISC, PRICEMAT, PV, QUARTILE.EXC, RANK, RANK.EQ, RATE, RECEIVED, RRI, SHEETS, SLN, STANDARDIZE, STDEV.P, STDEVP, SWITCH, SYD, TBILLEQ, TBILLPRICE, TBILLYIELD, TEXTJOIN, TIME, TRANSPOSE, TRIMMEAN, VALUE, VAR, VAR.S, VARA, VARPA, VDB, WEEKDAY, WEIBULL, WEIBULL.DIST, XIRR, XLOOKUP, XNPV, XOR, YEAR, YEARFRAC, YIELD, YIELDDISC, YIELDMAT, Z.TEST, ZTEST, 相關 issue #65 和 #1002
  • 公式計算引擎支援巢狀 IF 函式, 相關 issue #987
  • 公式計算引擎支援共享公式, 相關 issue #844
  • 公式計算引擎支援文字比較運算, 相關 issue #998
  • 支援在資料驗證中使用公式, 相關 issue #1012
  • 支援文件壓縮比限制,避免潛在的安全風險
  • SetCellFormula 支援設定共享公式
  • UpdateLinkedValue 在清除單元格計算快取時將跳過 macro sheet, 相關 issue #1014
  • 修復部分情況下,由於內部依賴關係計算錯誤導致的 AddPicture 重複建立圖片的問題, 相關 issue #1017
  • AddShape 支援設定形狀輪廓線條寬度, 相關 issue #262
  • 新增文件開啟選項 UnzipXMLSizeLimit 以支援指定開啟每個工作表以及共享字元表時的記憶體解壓上限
  • 建立樣式時,若給定的自定義數字格式無效,將返回錯誤提示,相關 issue #1028
  • 流式寫入現已支援設定行樣式
  • 流式寫入器將為時間型別單元格建立時間數字格式樣式,相關 issue #1107
  • 支援設定資料透視表報表佈局 “以壓縮形式顯示” 或 “以大綱形式顯示”, 相關 issue #1029
  • 行/列迭代器支援獲取當前行/列序號和行/列總數, 相關 issue #1054
  • 使用 time.Time 型別引數進行單元格賦值時,支援時區位置, 相關 issue #1069
  • 新增匯出 7 項錯誤資訊,以便開發者可根據不同的錯誤型別進行採取相應處理

相容性提升

  • 提升與內部帶有 r="0" 屬性工作表的相容性
  • 保留 XML 控制字元
  • 提升樣式設定與 Apple Numbers 的相容性, 相關 issue #1059
  • 頁首頁尾字元數限制相容多位元組字元, 相關 issue #1061
  • 設定單元格時將保留水平製表符, 相關 issue #1108

問題修復

  • 修復部分情況下刪除資料驗證失敗的問題, 解決 issue #979
  • 修復部分情況下設定資料驗證下拉選單失敗的問題, 解決 issue #986
  • 修復公式計算引擎 LOOKUP 函式部分情況下計算結果錯誤的問題, 解決 issue #994
  • 修復公式計算引擎 LOOKUP 僅支援完全匹配的問題, 解決 issue #997
  • 修復公式計算引擎百分比計算錯誤的問題, 解決 issue #993
  • 修復特定情況下單元格讀取異常導致的 panic
  • 修復設定 “後 N 項” 條件格式失敗的問題
  • 修復部分情況下時間解析錯誤的問題, 解決 issue #1026 和 #1030
  • 修復科學記數法數字格式的單元格值解析異常的問題,解決 issue #1027
  • 修復部分情況下浮點型資料讀取異常的問題,解決 issue #1031
  • 修復部分情況下刪除工作表失敗的問題
  • 修復內建時間數字格式解析異常問題,解決 issue #1060
  • 修復部分情況下新建樣式時返回樣式 ID 異常的問題
  • 修復部分情況下刪除行列後合併單元格區域異常的問題

效能優化

  • 合併單元格效能大幅提升,耗時降低 90%
  • 提高流式讀取效能,當內部 XML 較大時,將共享字串表解壓縮到系統臨時檔案,記憶體使用量減少約 60%, 相關 issue #109
  • 優化讀取工作表列表效能
  • 優化設定列樣式儲存,縮小生成的文件體積,解決 issue #1057

其他

  • Go Modules 依賴模組更新
  • 單元測試與文件更新
  • 包含簡體中文、英語、法語、俄語、日語、韓語、阿拉伯語、德語和西班牙語的多國語言文件網站更新
  • 歡迎加入 Slack 頻道、Telegram 群組 或技術交流群

DingTalk Group ID: 30047129 QQ Group ID: 207895940

Excel 技術交流群

更多原創文章乾貨分享,請關注公眾號
  • Excelize 釋出 2.5.0 版本,Go 語言 Excel 文件基礎庫
  • 加微信實戰群請加微信(註明:實戰群):gocnio