一飛開源,介紹創意、新奇、有趣、實用的免費開源應用、系統、軟體、硬體及技術,一個探索、發現、分享、使用與互動交流的開源技術社群平台。緻力于打造活力開源社群,共建開源新生态!
一、開源項目簡介
Excelize 是 Go 語言編寫的用于操作 Office Excel 文檔基礎庫,基于 ECMA-376,ISO/IEC 29500 國際标準。可以使用它來讀取、寫入由 Microsoft Excel™ 2007 及以上版本建立的電子表格文檔。支援 XLAM / XLSM / XLSX / XLTM / XLTX 等多種文檔格式,高度相容帶有樣式、圖檔(表)、透視表、切片器等複雜元件的文檔,并提供流式讀寫 API,用于處理包含大規模資料的工作簿。可應用于各類報表平台、雲計算、邊緣計算等系統。使用本類庫要求使用的 Go 語言為 1.16 或更高版本。
二、開源協定
使用BSD-3-Clause開源協定
三、界面展示
四、功能概述
項目使命
Excelize 的目标是建立并維護一個 Go 語言版本的 Excel 文檔 API,以處理符合基于 Office Open XML(OOXML)标準的電子表格文檔,借助 Excelize 您可以使用 Go 讀取和寫入 MS Excel 檔案。
為什麼要使用 Excelize
在一些情況下我們需要通過程式操作 Excel 文檔,例如:打開讀取已有 Excel 文檔内容、建立新的 Excel 文檔、基于已有文檔(模版)生成新的 Excel 文檔、向 Excel 文檔中插入圖檔、圖表和表格等元素,有時還需要跨平台實作這些操作。使用 Excelize 可以友善的滿足上述需求。
五、技術選型
快速上手
安裝
go get github.com/xuri/excelize
- 如果您使用 Go Modules 管理軟體包,請使用下面的指令來安裝最新版本。
go get github.com/xuri/excelize/v2
建立 Excel 文檔
下面是一個建立 Excel 文檔的簡單例子:
package main
import (
"fmt"
"github.com/xuri/excelize/v2"
)
func main() {
f := excelize.NewFile()
defer func() {
if err := f.Close(); err != nil {
fmt.Println(err)
}
}()
// 建立一個工作表
index, err := f.NewSheet("Sheet2")
if err != nil {
fmt.Println(err)
return
}
// 設定單元格的值
f.SetCellValue("Sheet2", "A2", "Hello world.")
f.SetCellValue("Sheet1", "B2", 100)
// 設定工作簿的預設工作表
f.SetActiveSheet(index)
// 根據指定路徑儲存檔案
if err := f.SaveAs("Book1.xlsx"); err != nil {
fmt.Println(err)
}
}
讀取 Excel 文檔
下面是讀取 Excel 文檔的例子:
package main
import (
"fmt"
"github.com/xuri/excelize/v2"
)
func main() {
f, err := excelize.OpenFile("Book1.xlsx")
if err != nil {
fmt.Println(err)
return
}
defer func() {
// 關閉工作簿
if err := f.Close(); err != nil {
fmt.Println(err)
}
}()
// 擷取工作表中指定單元格的值
cell, err := f.GetCellValue("Sheet1", "B2")
if err != nil {
fmt.Println(err)
return
}
fmt.Println(cell)
// 擷取 Sheet1 上所有單元格
rows, err := f.GetRows("Sheet1")
if err != nil {
fmt.Println(err)
return
}
for _, row := range rows {
for _, colCell := range row {
fmt.Print(colCell, "\t")
}
fmt.Println()
}
}
在 Excel 文檔中建立圖表
使用 Excelize 生成圖表十分簡單,僅需幾行代碼。您可以根據工作表中的已有資料建構圖表,或向工作表中添加資料并建立圖表。
package main
import (
"fmt"
"github.com/xuri/excelize/v2"
)
func main() {
f := excelize.NewFile()
defer func() {
if err := f.Close(); err != nil {
fmt.Println(err)
}
}()
for idx, row := range [][]interface{}{
{nil, "Apple", "Orange", "Pear"}, {"Small", 2, 3, 3},
{"Normal", 5, 2, 4}, {"Large", 6, 7, 8},
} {
cell, err := excelize.CoordinatesToCellName(1, idx+1)
if err != nil {
fmt.Println(err)
return
}
f.SetSheetRow("Sheet1", cell, &row)
}
if err := f.AddChart("Sheet1", "E1", &excelize.Chart{
Type: excelize.Col3DClustered,
Series: []excelize.ChartSeries{
{
Name: "Sheet1!$A$2",
Categories: "Sheet1!$B$1:$D$1",
Values: "Sheet1!$B$2:$D$2",
},
{
Name: "Sheet1!$A$3",
Categories: "Sheet1!$B$1:$D$1",
Values: "Sheet1!$B$3:$D$3",
},
{
Name: "Sheet1!$A$4",
Categories: "Sheet1!$B$1:$D$1",
Values: "Sheet1!$B$4:$D$4",
}},
Title: excelize.ChartTitle{
Name: "Fruit 3D Clustered Column Chart",
},
}); err != nil {
fmt.Println(err)
return
}
// 根據指定路徑儲存檔案
if err := f.SaveAs("Book1.xlsx"); err != nil {
fmt.Println(err)
}
}
向 Excel 文檔中插入圖檔
package main
import (
"fmt"
_ "image/gif"
_ "image/jpeg"
_ "image/png"
"github.com/xuri/excelize/v2"
)
func main() {
f, err := excelize.OpenFile("Book1.xlsx")
if err != nil {
fmt.Println(err)
return
}
defer func() {
// 關閉工作簿
if err := f.Close(); err != nil {
fmt.Println(err)
}
}()
// 插入圖檔
if err := f.AddPicture("Sheet1", "A2", "image.png", nil); err != nil {
fmt.Println(err)
}
// 在工作表中插入圖檔,并設定圖檔的縮放比例
if err := f.AddPicture("Sheet1", "D2", "image.jpg",
&excelize.GraphicOptions{ScaleX: 0.5, ScaleY: 0.5}); err != nil {
fmt.Println(err)
}
// 在工作表中插入圖檔,并設定圖檔的列印屬性
enable, disable := true, false
if err := f.AddPicture("Sheet1", "H2", "image.gif",
&excelize.GraphicOptions{
PrintObject: &enable,
LockAspectRatio: false,
OffsetX: 15,
OffsetY: 10,
Locked: &disable,
}); err != nil {
fmt.Println(err)
}
// 儲存工作簿
if err = f.Save(); err != nil {
fmt.Println(err)
}
}
六、源碼位址
通路一飛開源:https://code.exmay.com/