Go 語言 Excel 基礎庫

2019-10-11     星集

Excelize

是 Go 語言編寫的一個用來操作 Office Excel 文檔類庫,基於 ECMA-376 Office OpenXML 標準。可以使用它來讀取、寫入 XLSX 文件。相比較其他的開源類庫,Excelize 支持寫入原本帶有圖片(表)的文檔,還支持向 Excel 中插入圖片,並且在保存後不會丟失圖表樣式,可以應用在各種報表系統中。

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

兼容性提示

升級至該版本需要您的 Go 語言版本高於 1.10。

新增功能

  • 支持創建數據透視表。新增 AddPivotTable() 函數
  • 支持創建迷你圖 (Sparkine)。 新增 AddSparkline() 函數
  • 新增 GroupSheets() 和 UngroupSheets() 方法,支持設置工作表分組和取消工作表分組
  • 新增 AddVBAProject() 方法,支持向 Excel 文檔中嵌入包含函數和宏的 VBA 工程
  • 函數 SetPageLayout() 增加適應頁面寬高屬性支持,相關 issue #432
  • 函數 SetSheetViewOptions() 現在支持 「值為零的單元格是否顯示零值」 屬性的設置
  • 函數 SetCellFormula() 增加了對公式類型和引用屬性的設置支持
  • 增加帶有刪除線字體樣式的創建支持,相關 issue #482

問題修復

  • 修復部分情況下讀取批註內容文本不完整的問題,解決 issue #434
  • 修復由於內部合併單元格偏移量計算錯誤導致的部分情況下使用 RemoveRow() 刪除行出現下標越界問題,解決 issue #437
  • 修復部分情況下數據驗證下拉菜單中的公式失效問題
  • 修復在循環疊代中調用 Save() 方法保存導致的文檔損壞問題,解決 issue #443
  • 提升文檔內部 workbook.xml.rels 中相對路徑格式解析的兼容性,解決 issue #442
  • 修復部分情況下,刪除帶有合併單元格的文檔所導致的文件損壞問題
  • 修復部分情況下設置保護工作表屬性失效的情況,解決 issue #454
  • 修復部分情況下 GetSheetName 獲取工作表名稱為空的問題, 解決 issue #457
  • 增加單元格內多行文本解析的支持, 相關 issue #464
  • 修復 32 位作業系統環境下數字溢出問題,相關 issue #386
  • 修復 go module 依賴版本不匹配問題, 相關 issue #466 和 issue #480
  • 修復部分情況下調用 SetSheetPrOptions() 所致的文檔損壞問題,解決 issue #483

性能表現

  • 性能優化,減少讀取文檔時的內存開銷和耗時,相關 issue #439

其他

  • 完善 SetSheetRow() 函數中的異常處理
  • 代碼精簡優化, 合併了下列內部函數: 將函數 workBookRelsWriter, drawingRelsWriter 合併為 relsWriter; 將函數 drawingRelsReader, workbookRelsReader, workSheetRelsReader合併為 relsReader; 將函數 addDrawingRelationships, addSheetRelationships 合併為 addRels

安裝

使用 Excelize 要求使用的 Go 語言為 1.10 或更高版本。

  • 安裝命令
go get github.com/360EntSecGroup-Skylar/excelize

更新

  • 更新命令
go get -u github.com/360EntSecGroup-Skylar/excelize

創建 Excel 文檔

下面是一個創建 Excel 文檔的簡單例子:

package main
import (
"fmt"
"github.com/360EntSecGroup-Skylar/excelize"
)
func main() {
f := excelize.NewFile()
// 創建一個工作表
index := f.NewSheet("Sheet2")
// 設置單元格的值
f.SetCellValue("Sheet2", "A2", "Hello world.")
f.SetCellValue("Sheet1", "B2", 100)
// 設置工作簿的默認工作表
f.SetActiveSheet(index)
// 根據指定路徑保存文件
err := f.SaveAs("./Book1.xlsx")
if err != nil {
fmt.Println(err)
}
}

讀取 Excel 文檔

下面是讀取 Excel 文檔的例子:

package main
import (
"fmt"
"github.com/360EntSecGroup-Skylar/excelize"
)
func main() {
f, err := excelize.OpenFile("./Book1.xlsx")
if err != nil {
fmt.Println(err)
return
}
// 獲取工作表中指定單元格的值
cell, err := f.GetCellValue("Sheet1", "B2")
if err != nil {
fmt.Println(err)
return
}
fmt.Println(cell)
// 獲取 Sheet1 上所有單元格
rows, err := f.GetRows("Sheet1")
for _, row := range rows {
for _, colCell := range row {
fmt.Print(colCell, "\\t")
}
fmt.Println()
}
}

在 Excel 文檔中創建圖表

使用 Excelize 生成圖表十分簡單,僅需幾行代碼。您可以根據工作表中的已有數據構建圖表,或向工作表中添加數據並創建圖表。

向 Excel 文檔中插入圖片

package main
import (
"fmt"
_ "image/gif"
_ "image/jpeg"
_ "image/png"
"github.com/360EntSecGroup-Skylar/excelize"
)
func main() {
f, err := excelize.OpenFile("./Book1.xlsx")
if err != nil {
fmt.Println(err)
return
}
// 插入圖片
err = f.AddPicture("Sheet1", "A2", "./image1.png", "")
if err != nil {
fmt.Println(err)
}
// 在工作表中插入圖片,並設置圖片的縮放比例
err = f.AddPicture("Sheet1", "D2", "./image2.jpg", `{"x_scale": 0.5, "y_scale": 0.5}`)
if err != nil {
fmt.Println(err)
}
// 在工作表中插入圖片,並設置圖片的列印屬性
err = f.AddPicture("Sheet1", "H2", "./image3.gif", `{"x_offset": 15, "y_offset": 10, "print_obj": true, "lock_aspect_ratio": false, "locked": false}`)
if err != nil {
fmt.Println(err)
}
// 保存文件
err = f.Save()
if err != nil {
fmt.Println(err)
}
}

更多使用方法可以查看官方文檔

開源地址:

https://gitee.com/xurime/excelize

更多更優質的資訊,請關注我,你的支持會鼓勵我不斷分享更多更好的優質文章。

文章來源: https://twgreatdaily.com/GW2vum0BMH2_cNUgpQkb.html