Excelize 2.7.0 釋出, 2023 年首個更新

2023-01-09 12:00:22

github.com/xuri/excelize

Excelize 是 Go 語言編寫的用於操作 Office Excel 檔案基礎庫,基於 ECMA-376,ISO/IEC 29500 國際標準。可以使用它來讀取、寫入由 Microsoft Excel™ 2007 及以上版本建立的電子試算表檔案。支援 XLAM / XLSM / XLSX / XLTM / XLTX 等多種檔案格式,高度相容帶有樣式、圖片(表)、透視表、切片器等複雜元件的檔案,並提供流式讀寫 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

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

版本說明

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

相容性提示

  • 升級至該版本需要您使用的 Go 語言為 1.16 或更高版本,以遷移不再支援的標準庫 ioutil
  • 當給定工作表名稱中存在無效字元時將返回錯誤,不再自動忽略無效字元
  • GetCellStyle 函數不再返回合併單元格區域左上角單元格的樣式
  • 重新命名以下 5 個匯出資料型別和錯誤常數,具體更改詳見官方檔案中的更新說明
  • 移除了 54 項匯出型別,具體更改詳見官方檔案中的更新說明
  • 移除了 2 個匯出常數:OrientationPortraitOrientationLandscape
  • 修改了以下 21 個函數的簽名,使用結構體參照代替此前以 JSON 格式表示的選項引數,具體更改詳見官方檔案中的更新說明
  • 引入了 8 項新的函數代替現有函數,具體更改詳見官方檔案中的更新說明
  • CellType 列舉值中新增 CellTypeFormula, CellTypeInlineString, CellTypeSharedString 並移除了 CellTypeString
  • 對新增批註 AddComment 函數的簽名進行了更改,支援建立富文字批註,相關 issue #1204
  • 當 XML 反序列化異常時將返回錯誤以代替輸出紀錄檔,函數 GetComments, GetDefaultFontSetDefaultFont 增加了 error 型別的錯誤返回值

新增功能

  • 新增 GetDataValidationsGetConditionalFormats 函數以支援獲取資料驗證設定和條件格式,相關 issue #827
  • 新增 ProtectWorkbookUnprotectWorkbook 以提供工作簿保護設定支援
  • 新增 SetSheetCol 函數以支援按列設定單元格的值,相關 issue #1247
  • 新增 GetColStyle 函數以支援設定列樣式,相關 issue #1293
  • 新增 SetSheetBackgroundFromBytes 函數以支援根據給定的圖片資料設定工作表背景圖片,相關 issue #1405
  • 新增匯出變數 IndexedColorMapping 以支援內建索引顏色轉換
  • 新增 20 項匯出型別: AutoFilterListOptions, AutoFilterOptions, Chart, ChartAxis, ChartDimension, ChartLegend, ChartLine, ChartMarker, ChartPlotArea, ChartSeries, ChartTitle, ConditionalFormatOptions, PaneOptions, Panes, GraphicOptions, Shape, ShapeColor, ShapeLine, ShapeParagraphTableOptions
  • 新增 2 項公式函數: AGGREGATE 和 SUBTOTAL
  • SaveWriteWriteTo 函數支援指定儲存選項,相關 issue #744
  • 使用 AddChart 函數新增圖表時,支援為折線圖設定是否使用平滑折線,相關 issue #1290
  • 使用 AddChart 函數新增圖表時,支援設定自定義折線圖線條顏色,相關 issue #1345
  • 使用 AddChart 函數新增圖表時,支援設定自定義座標軸字型樣式,相關 issue #320
  • 新增圖表函數 AddChart 支援建立三維折線圖
  • 以下函數新增並行安全支援:SetColWidthGetColWidthSetColVisibleGetColVisibleSetColStyleGetColStyle
  • 設定樣式時,當給定的樣式 ID 不存在時將返回錯誤,相關 issue #1323
  • 流式按行賦值時,若行號未遞增將返回錯誤,以避免生成的工作簿損壞,相關 issue #1139
  • 按行流式寫入工作表時,支援通過指定 RowOpts 為單元格設定樣式,相關 issue #1354
  • 支援流式設定窗格,相關 issue #1047
  • 支援流式設定行內富文字單元格
  • 支援流式插入分頁符
  • 新增 7 項匯出錯誤資訊: ErrUnprotectWorkbookErrUnprotectWorkbookPasswordErrStreamSetPanesErrSheetNameBlankErrSheetNameInvalidErrSheetNameLengthErrSheetNameSingleQuote,以便開發者可根據不同的錯誤型別進行採取相應處理
  • 新增 5 項匯出資料型別: HeaderFooterOptionsPageLayoutMarginsOptionsPageLayoutOptionsSheetPropsOptionsViewOptions
  • 支援設定分級顯示的明細資料方向
  • 支援讀取和設定單元格字型的主題顏色和色調,相關 issue #1369
  • 支援讀取帶有符合 ISO 8061 標準的時間型別單元格的值
  • 支援設定和讀取帶有內建顏色索引的字型顏色
  • 工作簿關閉函數將清理由流式寫入器生成的磁碟快取檔案
  • 支援新增或刪除列時自動調整受影響的列樣式
  • 通過 AddPicture 新增圖片時,現已允許插入 SVG 格式圖片

相容性提升

  • 流式寫入單元格時將以行內字元型別儲存字元型單元格的值,相關 issue #1377
  • 儲存工作簿時將跳過工作表中的不帶有樣式和屬性的空白行,以減少生成檔案的體積,相關 issue #1383

問題修復

  • 修復部分情況下讀取帶有內建數位格式樣式的浮點數精度有誤問題,解決 issue #1328,#1368 和 #1373
  • 修復部分情況下讀取帶有 AM/PM 數位格式樣式的單元格有誤問題,解決 issue #1338
  • 修復部分情況下刪除批註時由於陣列下標越界導致的 panic,解決 issue #1343
  • 修復部分情況下讀取單元格的值時出現 panic 的問題,解決 issue #1384 和 #1415
  • 修復部分情況下誤將文字解析為浮點型數值的問題,解決 issue #1360
  • 修復使用空字元建立工作表後生成的工作簿損壞問題,解決 issue #1361
  • 修復向工作表新增圖片後,獲取該圖片內容為空的問題
  • 修復部分情況下插入行列後生成的工作簿損壞問題
  • 刪除單元格公式時將刪除公式計算鏈中的共用單元格參照,以修復部分情況下生成的檔案損壞問題
  • 修復部分情況下未對工作表名稱特殊字元及長度做正確處理的問題,解決 issue #1328
  • 修復部分情況下公式函數 OR 計算結果有誤的問題
  • 修復在帶有單一單元格區域參照的工作表中插入行列時,將收到異常的問題
  • 修復獲取帶有單一單元格區域參照合併單元格區域時,收到異常的問題
  • 修復部分情況下讀取富文字單元格的值不完整問題
  • 修復流式寫入時未跳脫 XML 字元導致的檔案損壞問題,解決 issue #1391
  • 修復公式計算函數 ADDRESS 在工作表名稱為空時計算結果有誤的問題,解決 issue #1396
  • 修復部分情況下新增圖片結果有誤的問題,解決 issue #1404

效能優化

  • 提高流式合併單元格效能,相較於上一版本,耗時最高降低約 90%,記憶體使用最高減少約 86%
  • 優化按行流式寫入工作表 SetRow 函數的效能,相較於上一版本,耗時最高降低約 19%

其他

  • Go Modules 依賴模組更新
  • 單元測試與檔案更新
  • 優化內部變數與函數命名
  • 包含簡體中文、英語、法語、俄語、日語、韓語、阿拉伯語、德語和西班牙語的多國語言檔案網站更新

致謝

感謝 Excelize 的所有貢獻者,以下是為此版本提交程式碼的貢獻者列表:

  • cdenicola (Cooper de Nicola)
  • chenliu1993
  • davidborry
  • patsak (Kostya Privezentsev)
  • dafengge0913
  • Beeb0p (Artem Tarasenko)
  • invzhi
  • zhangzitao (Zitao)
  • jtwatson (Joseph Watson)
  • carbin-gun (charles.deng)
  • harrison3000 (Harrison)
  • strivek (GaoFei)
  • gonghaibinx
  • martinmr (Martin Martinez Rivera)
  • zclark (Zach Clark)
  • March0715 (March)
  • renxiaotu
  • devloppper
  • jianxinhou
  • nesstord
  • Bayzet (Bayzet Tlyupov)
  • guoweikuang (郭偉匡)
  • qinyuguang (Gin)
  • liron-l (Liron Levin)

歡迎加入 Slack 頻道、Telegram 群組 或技術交流群 DingTalk Group ID: 30047129 QQ Group ID: 207895940

Excelize 技術交流群