天天看點

[開源]Go 語言編寫的用于操作 Office Excel 文檔基礎庫,簡單易用

作者:一飛開源
一飛開源,介紹創意、新奇、有趣、實用的免費開源應用、系統、軟體、硬體及技術,一個探索、發現、分享、使用與互動交流的開源技術社群平台。緻力于打造活力開源社群,共建開源新生态!

一、開源項目簡介

[開源]Go 語言編寫的用于操作 Office Excel 文檔基礎庫,簡單易用

Excelize 是 Go 語言編寫的用于操作 Office Excel 文檔基礎庫,基于 ECMA-376,ISO/IEC 29500 國際标準。可以使用它來讀取、寫入由 Microsoft Excel™ 2007 及以上版本建立的電子表格文檔。支援 XLAM / XLSM / XLSX / XLTM / XLTX 等多種文檔格式,高度相容帶有樣式、圖檔(表)、透視表、切片器等複雜元件的文檔,并提供流式讀寫 API,用于處理包含大規模資料的工作簿。可應用于各類報表平台、雲計算、邊緣計算等系統。使用本類庫要求使用的 Go 語言為 1.16 或更高版本。

二、開源協定

使用BSD-3-Clause開源協定

三、界面展示

[開源]Go 語言編寫的用于操作 Office Excel 文檔基礎庫,簡單易用
[開源]Go 語言編寫的用于操作 Office Excel 文檔基礎庫,簡單易用
[開源]Go 語言編寫的用于操作 Office Excel 文檔基礎庫,簡單易用
[開源]Go 語言編寫的用于操作 Office Excel 文檔基礎庫,簡單易用
[開源]Go 語言編寫的用于操作 Office Excel 文檔基礎庫,簡單易用
[開源]Go 語言編寫的用于操作 Office Excel 文檔基礎庫,簡單易用

四、功能概述

項目使命

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 生成圖表十分簡單,僅需幾行代碼。您可以根據工作表中的已有資料建構圖表,或向工作表中添加資料并建立圖表。

[開源]Go 語言編寫的用于操作 Office 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)
        }
    }()
    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/

繼續閱讀