Excelize 是 Go 語言編寫的用於操作 Office Excel 檔案基礎庫,2023年4月10日,社區正式釋出了 2.7.1 版本,該版本包含了多項新增功能、錯誤修復和兼容性提升優化。

Excelize 是 Go 語言編寫的用於操作 Office Excel 檔案基礎庫,基於 ECMA-376,ISO/IEC 29500 國際標準。可以使用它來讀取、寫入由 Microsoft Excel™ 2007 及以上版本創建的電子錶格檔案。支持 XLAM / XLSM / XLSX / XLTM / XLTX 等多種檔案格式,高度兼容帶有樣式、圖片(表)、樞紐分析表、切片器等複雜組件的檔案,並提供流式讀寫 API,用於處理包含大規模數據的活頁簿。可應用於各類報表平台、雲計算、邊緣計算等系統。入選 2020 Gopher China - Go 領域明星開源項目 (GSP)、 2018 開源中國碼雲 Gitee 最有價值開源項目 GVP,目前已成為 Go 語言最受歡迎的 Excel 檔案基礎庫。
- GitHub: github.com/xuri/excelize
- 中文檔案: xuri.me/excelize/zh-tw
2023年4月10日,社區正式釋出了 2.7.1 版本,該版本包含了多項新增功能、錯誤修復和兼容性提升優化。下面是有關該版本更新內容的摘要,完整的更改列表可查看 changelog。
此版本中最顯著的變化包括:
兼容性提示
- 移除了
ChartLine數據類型中的Color字段 - 使用
RichTextRun數據類型代替ShapeParagraph - 使用
Fill代替Shape數據類型中的Color字段 - 移除了已導出的數據類型
AutoFilterListOptions - 將數據類型
TableOptions重命名為Table - 添加圖表函數
AddChart改為使用ChartType類型枚舉值指定圖表類型 - 修改了以下 7 個函數的簽名
- 將
func (f *File) AutoFilter(sheet, rangeRef string, opts *AutoFilterOptions) error修改為func (f *File) AutoFilter(sheet, rangeRef string, opts []AutoFilterOptions) error - 將
func (f *File) AddPictureFromBytes(sheet, cell, name, extension string, file []byte, opts *GraphicOptions) error修改為func (f *File) AddPictureFromBytes(sheet, cell string, pic *Picture) error - 將
func (f *File) GetPicture(sheet, cell string) (string, []byte, error)修改為func (f *File) GetPictures(sheet, cell string) ([]Picture, error) - 將
func (f *File) AddVBAProject(bin string) error修改為func (f *File) AddVBAProject(file []byte) error - 將
func (f *File) GetComments() (map[string][]Comment, error)修改為func (f *File) GetComments(sheet string) ([]Comment, error) - 將
func (f *File) AddTable(sheet, rangeRef string, opts *TableOptions) error修改為func (f *File) AddTable(sheet string, table *Table) error - 將
func (sw *StreamWriter) AddTable(rangeRef string, opts *TableOptions) error修改為func (sw *StreamWriter) AddTable(table *Table) error
- 將
新增功能
- 新增函數
SetSheetDimension與GetSheetDimension以支持設定與獲取工作表已用區域,相關 issue #1463 - 創建樣式函數
NewStyle現已支持 17 種漸變填充樣式 - 增加創建樣式數量上限至 65430
- 通過
AddPicture添加圖片時,現已允許插入 BMP 格式圖片 - 函數
GetPictures支持讀取被添加至同一存儲格中的多張圖片 - 設定條件式格式函數
SetConditionalFormat支持設定帶有「如果為真則停止」和「圖標集」條件的條件式格式規則 - 設定條件式格式函數
SetConditionalFormat支持設定在條件式格式中使用帶有純色填充樣式的數據條,並支持指定數據條的顏色,相關 issue #1462 - 添加圖表函數
AddChart支持設定圖表中各個數據系列使用自定義填充顏色,相關 issue #1474 - 添加圖表函數
AddChart支持設定氣泡圖圖表中各個系列氣泡的大小 - 添加圖表函數
AddChart支持設定子母餅圖和復合條餅圖中第二繪圖區域的數據系列 - 添加圖表函數
AddChart支持為圖表中數據標籤設定自定義數字格式,相關 issue #1499 - 創建表格函數
AddTable支持在創建表格時指定是否包含標題行 - 創建表格函數
AddTable創建表格時增加對表格名稱的校驗,並導出了錯誤常量ErrTableNameLength,相關 issue #1468 - 函數
AutoFilter支持為篩選範圍內的多個列設定篩選條件 - 計算存儲格的值函數
CalcCellValue現已支持指定是否為公式計算結果應用數字格式 - 計算存儲格的值函數
CalcCellValue對於以下公式函數加入了雙字節字符的支持:LEFT, LEN, LENB, MID, MIDB, RIGHT 和 RIGHTB,相關 issue #1476 - 計算存儲格的值函數
CalcCellValue函數對於存在錯誤的公式將在計算結果中返回公式錯誤代碼,並將詳細錯誤信息在 error 數據類型的返回值中返回,相關 issue #1490 - 對輸入圖片文件的擴展名調整為大小寫不敏感,相關 issue #1503
- 使用流式寫入器流式按列賦值時,對於值為 nil 的存儲格將會跳過生成該存儲格,相關 issue #756
- 獲取超鏈接
GetCellHyperLink函數支持獲取合併存儲格中的超鏈接 - 添加了新的導出類型
ChartType以表示圖表類型枚舉
兼容性提升
- 兼容帶有函數組的活頁簿
- 兼容帶有嚴格模式 XML 命名空間地址的活頁簿主題,相關 issue #1447
- 提高了與檔案內部不含活頁簿關係部件活頁簿的兼容性,以修復打開此類活頁簿可能出現的 panic
- 提高了獲取帶有空白字符共享字符串表索引值的兼容性,解決 issue #1508
問題修復
- 修復了特定情況下讀取日期時間類型存儲格的值存在精度誤差的問題
- 修復了特定情況下當修改原本存儲了日期時間類型的存儲格為文本類型值,修改後存儲格數據類型有誤的問題,解決 issue #1464
- 修復了部分情況下公式計算結果為空的問題,解決 issue #1469
- 修復了設定數據條類型條件式格式時,指定自定義最大/最小值無效的問題,解決 issue #1492
- 修復了打開列高或欄寬為 0 的工作表,保存後列高欄寬設定失效的問題,解決 issue #1461
性能優化
其他
- Go Excelize 提供了支持 WebAssembly / Javascript 環境的 excelize-wasm NPM 包
- Go Modules 依賴模塊更新
- 單元測試與文檔更新
- 優化內部變數與函數命名
- 包含簡體中文、英語、法語、俄語、日語、韓語、阿拉伯語、德語和西班牙語的多國語言文檔網站更新
致謝
感謝 Excelize 的所有貢獻者,以下是為此版本提交代碼的貢獻者列表:
- liron-l (Liron Levin)
- nathj07 (Nathan Davies)
- Josh-Weston (Josh Weston)
- jaby
- FlowingSPDG (Shugo Kawamura)
- barismar (Baris Mar Aziz)
- doingNobb (張濤)
- rpoetrap (Rizki Putra)
- huangshaokun
- CHANTXU64 (ChantXu64)
- playGitboy