Excelize 是 Go 語言編寫的用于操作 Office Excel 文檔基礎庫,基于 ECMA-376,ISO/IEC 29500 國際標準。可以使用它來讀取、寫入由 Excel、WPS、OpenOffice 等辦公軟件創建的電子表格文檔。支持 XLAM / XLSM / XLSX / XLTM / XLTX 等多種文檔格式,高度兼容帶有樣式、圖片(表)、透視表、切片器等復雜組件的文檔,并提供流式讀寫支持,用于處理包含大規模數據的工作簿。可應用于各類報表平臺、云計算、邊緣計算等系統。自 2016 年開源以來已成為云原生應用尤其是 Go 語言開發者在處理電子表格辦公文檔時的熱門選擇,正在被廣泛應用于大型互聯網公司、中小企業客戶和初創公司。入選 2023 開源創新榜優秀開源項目、榮獲 2022 年中國開源創新大賽一等獎、2020 Gopher China - Go 領域明星開源項目 (GSP)、2018 年開源中國碼云最有價值開源項目 GVP (Gitee Most Valuable Project)。
開源代碼
GitHub: github.com/xuri/excelize
中文文檔: xuri.me/excelize/zh-hans
2025年5月13日,社區正式發布了 2.9.1 版本,該版本包含了多項新增功能、錯誤修復和兼容性提升優化。下面是有關該版本更新內容的摘要,此版本中最顯著的變化包括:
版本說明
此版本中最顯著的變化包括:
兼容性提示
- 升級 Go 語言版本要求至 1.23 或更高版本,以升級依賴包
golang.org/x/crypto
- 將
DataValidationType
、DataValidationErrorStyle
、DataValidationOperator
、PictureInsertType
的數據類型由int
變更為byte
- 函數
SetCellInt
的形參類型改為int64
,解決 issue 2068 - 添加圖片、圖表、形狀和表單控件等繪圖對象時,偏移設置將不再影響繪圖對象的尺寸,解決 issue 2001
新增功能
- 在
Chart
數據類型中新增GapWidth
和Overlap
字段 - 在
ChartPlotArea
數據類型中新增ShowDataTable
和ShowDataTableKeys
字段 - 在
ChartAxis
數據類型中新增Alignment
字段 - 在
ChartSeries
數據類型中新增DataLabel
字段 - 在
PageLayoutOptions
數據類型中新增PageOrder
字段 - 新增 2 項錯誤變量:
ErrPageSetupAdjustTo
和ErrStreamSetColStyle
- 新增 2 項枚舉類型:
HeaderFooterImagePositionType
和IgnoredErrorsType
- 新增 2 項數據類型:
CalcPropsOptions
和HeaderFooterImageOptions
- 新增 2 項函數
SetCalcProps
和GetCalcProps
支持設置和獲取工作簿計算屬性 - 新增
AddHeaderFooterImage
函數,支持在頁眉和頁腳中設置圖片,相關 issue 1395 - 新增
AddIgnoredErrors
函數,支持忽略特定單元格范圍內的錯誤,相關 issue 2046 - 新增
SetColStyle
函數,支持流式寫入時設置列樣式,相關 issue 2075 - 函數
AddChart
和AddChartSheet
支持設置圖表坐標軸文本方向和旋轉角度,相關 issue 2025 - 函數
AddChart
和AddChartSheet
支持設置柱狀圖和條形圖的間隙寬度和重疊程度,相關 issue 2033 - 函數
AddChart
和AddChartSheet
支持設置數據系列標簽的格式,相關 issue 2052 - 函數
AddChart
和AddChartSheet
支持設置位于圖表繪圖區域下方的數據表,相關 issue 2117 - 函數
AddFormControl
函數支持為復選框類型的表單控件設置單元格超鏈接,相關 issue 2113 - 函數
SetPageLayout
支持設置頁面布局的頁面順序 - 函數
DeletePicture
支持刪除帶有單一單元格錨定類型的圖片,相關 issue 2059 - 函數
SetPageLayout
增加了對選項參數的檢查,如果給定的選項值無效,將返回錯誤提示信息 - 支持跨多個工作表調整數據驗證,相關 issue 2072
- 支持應用帶
#
號和零占位符的數字格式,相關 issue 2058 - 支持應用帶
?
符號的數字格式 - 支持通過指定 “oneCell” 定位類型添加帶有單一單元格錨定類型的繪圖對象,相關 issue 2002
問題修復
- 修復 v2.9.0 中引入的問題,修改由流式寫入生成的工作簿后,打開后提示文檔損壞問題,解決 issue 2015
- 修復部分情況下生成重復的“無填充”格式問題,解決 issue 2014
- 修復部分情況下單元格垂直或水平邊框樣式丟失問題,解決 issue 2048
- 修復部分情況下條件格式邊框樣式丟失的問題,解決 issue 2061
- 修復部分情況下獲取數據透視表時出現 panic 的問題,解決 issue 1954
- 修復
GetStyle
函數無法獲取VertAlign
格式的問題 - 修復
CalcCellValue
函數在部分情況下子表達式計算錯誤的問題,解決 issue 2083 - 修復部分情況下因圖片引用檢查有誤導致的錯誤刪除圖片問題
- 修復流式寫入時,非零行樣式 ID 未覆蓋默認單元格樣式的問題
- 修復流式寫入時,部分情況下將在工作簿內部生成重復的
col
XML 元素問題 - 修復部分情況下設置圖表標題字體時出現的 panic 問題,解決 issue 2102
- 修復部分情況下刪除公式計算鏈時出現的 panic 問題
- 修復因共享公式解析錯誤導致的公式計算結果有誤問題,解決 issue 2056
- 修復當工作簿內部包含大于 4GB 的部件時,生成的 ZIP64 格式文檔損壞問題
- 修復當部分情況下重命名工作表時,自定義名稱中的工作表名稱更新有誤的問題,解決 issue 2126
性能優化
- 使用深拷貝庫
github.com/tiendc/go-deepcopy
代替github.com/mohae/deepcopy
,深度拷貝速度提升 3 倍,相關 issue 2029 - 修復 v2.9.0 中引入的問題,避免對空白單元格的值進行修剪以降低內存分配
- 提高公式計算引擎對帶有整行或整列單元格引用公式的計算速度
- 行迭代器讀取速度最高提升約 20%,內存分配降低約 10%
其他
- Go Modules 依賴模塊更新
- 單元測試與文檔更新
- 包含阿拉伯語、德語、英語、西班牙語、法語、意大利語、日語、韓語、葡萄牙語、俄語、簡體中文和繁體中文的多國語言文檔網站更新
- 支持 WebAssembly / JavaScript 的 excelize-wasm NPM 包發布版本更新
- 支持 Python 的 excelize PyPI 包發布版本更新
致謝
感謝 Excelize 的所有貢獻者,以下是為此版本提交代碼的貢獻者列表:
- wushiling50
- imirkin (Ilia Mirkin)
- Juneezee (Eng Zer Jun)
- Arpelicy
- zhuhaicity (ZhuHaiCheng)
- xxf0512 (xxf)
- gypsy1234
- mengpromax (MengZhongYuan)
- hly-717
- kurtinge (Kurt Inge Sm?dal)
- IvanHristov98 (Ivan Hristov)
- artur-chopikian (Artur Chopikian)
- romanshevelev (Roman Shevelev)
- LZCZ
- hm3248
- moisespsena (Moises P. Sena)
- paolobarbolini (Paolo Barbolini)
- timesince
- shcabin
- tgulacsi (Tamás Gulácsi)
- R3dByt3 (R3dByt3)
- Now-Shimmer