首頁 >後端開發 >Golang >一文詳解Golang如何產生Excel文檔

一文詳解Golang如何產生Excel文檔

藏色散人
藏色散人轉載
2023-03-23 17:01:373450瀏覽

這篇文章為大家帶來了關於Golang的相關知識,其中主要跟大家介紹怎麼用Golang生成Excel文檔 ,有興趣的朋友下面一起來看一下吧,希望對大家有幫助。

一文詳解Golang如何產生Excel文檔

基於資料產生Excel 文檔是一個很常見的需求,本文將介紹如何使用Go 的Excelize 函式庫去產生Excel 文檔,以及一些具體場景下的程式碼實作。

關於 Excelize 函式庫

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

效能比較

下圖是一些主要的開源Excel 函式庫在產生12800*50 純文字矩陣時的效能比較(OS: macOS Mojave version 10.14.4, CPU: 3.4 GHz Intel Core i5, RAM: 16 GB 2400 MHz DDR4, HDD: 1 TB),包括Go、Python、Java、PHP 和NodeJS。

安裝

最新的版本是v2.4.0

go get github.com/360EntSecGroup-Skylar/excelize/v2

建立Excel 文件

#在下面的案例中,我們建立了一個Excel 文檔,並使用NewSheet 方法新建了一個Sheet2 工作表,Sheet1 是預設建立的工作表,然後我們使用SetCellValue 方法分別在Sheet2 工作表的A2 單元格和Sheet1 表格的B2單元格設定值,並透過使用SetActiveSheet 方法設定Sheet2 工作表為預設的工作表,最終呼叫SaveAs 方法將資料寫入Excel 文件中:

package main

import (
    "fmt"

    "github.com/360EntSecGroup-Skylar/excelize/v2"
)

func main() {
    f := excelize.NewFile()
    // 创建一个工作表
    index := f.NewSheet("Sheet2")
    // 设置单元格的值
    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)
    }
}

實際場景複現

建立工作表

工作表名稱是大小寫敏感的:

index := f.NewSheet("Sheet2")

刪除預設建立的工作表

預設建立的Excel 文件是包含一個名為Sheet1 的工作表,我們可能不需要這個預設工作表,這個時候我們可以刪除這個工作表:

f.DeleteSheet("Sheet1")

合併儲存格

合併Sheet1 工作表上F1:I2 區域內的儲存格:

excel.MergeCell("Sheet1", "F1", "I2")

儲存格樣式

#為儲存格設定樣式會經常遇到,例如設定儲存格的背景顏色,Excelize 函式庫提供下面兩個方法進行設定儲存格樣式(NewStyle SetCellStyle):

// 通过给定的样式格式 JSON 或结构体的指针创建样式并返回样式索引。
// 请注意,颜色需要使用 RGB 色域代码表示。
style, err := f.NewStyle(`{
    "border": [
    {
        "type": "left",
        "color": "0000FF",
        "style": 3
    },
    {
        "type": "top",
        "color": "00FF00",
        "style": 4
    },
    {
        "type": "bottom",
        "color": "FFFF00",
        "style": 5
    },
    {
        "type": "right",
        "color": "FF0000",
        "style": 6
    },
    {
        "type": "diagonalDown",
        "color": "A020F0",
        "style": 7
    },
    {
        "type": "diagonalUp",
        "color": "A020F0",
        "style": 8
    }]
}`)
if err != nil {
    fmt.Println(err)
}
err = f.SetCellStyle("Sheet1", "D7", "D7", style)

文字水平居中

文字水平居中需要用到Alignment 樣式結構體:

type Alignment struct {
    Horizontal      string `json:"horizontal"`
    Indent          int    `json:"indent"`
    JustifyLastLine bool   `json:"justify_last_line"`
    ReadingOrder    uint64 `json:"reading_order"`
    RelativeIndent  int    `json:"relative_indent"`
    ShrinkToFit     bool   `json:"shrink_to_fit"`
    TextRotation    int    `json:"text_rotation"`
    Vertical        string `json:"vertical"`
    WrapText        bool   `json:"wrap_text"`
}

水平居中只要設置Horizo​​ntal 的值為center 即可:

style, err := f.NewStyle(`{"alignment":{"horizontal":"center"}}`)
if err != nil {
    fmt.Println(err)
}
err = excel.SetCellStyle("Sheet1", "B1", "B1", style)

為單元格設定純色填滿

給儲存格填滿顏色會使用到 Fill 樣式結構體:

type Fill struct {
    Type    string   `json:"type"`
    Pattern int      `json:"pattern"`
    Color   []string `json:"color"`
    Shading int      `json:"shading"`
}

Style 結構體

從上面設定樣式的程式碼中,我們可以發現border 是一個數組,而 alignment 是一個結構體,這是由Style 結構體決定的:

type Style struct {
    Border        []Border    `json:"border"`
    Fill          Fill        `json:"fill"`
    Font          *Font       `json:"font"`
    Alignment     *Alignment  `json:"alignment"`
    Protection    *Protection `json:"protection"`
    NumFmt        int         `json:"number_format"`
    DecimalPlaces int         `json:"decimal_places"`
    CustomNumFmt  *string     `json:"custom_number_format"`
    Lang          string      `json:"lang"`
    NegRed        bool        `json:"negred"`
}
相關推薦:Go影片教學
#

以上是一文詳解Golang如何產生Excel文檔的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:juejin.im。如有侵權,請聯絡admin@php.cn刪除