Giới thiệu về Excelize

Excelize là một thư viện cơ bản để thao tác với tài liệu Office Excel được viết bằng ngôn ngữ Go, dựa trên các tiêu chuẩn quốc tế ECMA-376 và ISO/IEC 29500. Nó có thể được sử dụng để đọc và ghi tài liệu bảng tính được tạo bởi Microsoft Excel™ 2007 trở lên, hỗ trợ các định dạng tài liệu khác nhau như XLAM / XLSM / XLSX / XLTM / XLTX. Nó tương thích cao với các tài liệu chứa các kiểu dáng, hình ảnh (bảng), bảng điều chỉnh, máy cắt và các thành phần phức tạp khác, và cung cấp một API đọc-giữ để xử lý bảng tính với dữ liệu quy mô lớn. Nó có thể được áp dụng vào các nền tảng báo cáo khác nhau, cloud computing, edge computing và các hệ thống khác. Sử dụng thư viện này yêu cầu phiên bản ngôn ngữ Go từ 1.16 trở lên.

Cài đặt

Bảng dưới đây liệt kê các yêu cầu tối thiểu của thư viện cơ bản Excelize cho các phiên bản khác nhau của ngôn ngữ Go:

Phiên bản Excelize Yêu cầu tối thiểu cho ngôn ngữ Go
v2.7.0 1.16
v2.4.0 ~ v2.6.1 1.15
v2.0.2 ~ v2.3.2 1.10
v1.0.0 ~ v2.0.1 1.6

Việc sử dụng phiên bản mới nhất của Excelize yêu cầu ngôn ngữ Go từ phiên bản 1.16 trở lên. Vui lòng lưu ý rằng có thay đổi không tương thích trong Go 1.21.0, dẫn đến thư viện cơ bản Excelize không hoạt động đúng trên phiên bản này. Nếu bạn đang sử dụng Go 1.21.x, vui lòng nâng cấp lên Go 1.21.1 hoặc cao hơn.

  • Lệnh Cài đặt
go get github.com/xuri/excelize
  • Nếu bạn đang sử dụng Go Modules để quản lý các gói, hãy sử dụng lệnh sau để cài đặt phiên bản mới nhất.
go get github.com/xuri/excelize/v2

Cập nhật

  • Lệnh Cập nhật
go get -u github.com/xuri/excelize/v2

Tạo Tài liệu Excel

Dưới đây là một ví dụ đơn giản về việc tạo tài liệu 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)
        }
    }()
    // Tạo một trang tính mới
    index, err := f.NewSheet("Sheet2")
    if err != nil {
        fmt.Println(err)
        return
    }
    // Đặt giá trị cho ô
    f.SetCellValue("Sheet2", "A2", "Xin chào thế giới.")
    f.SetCellValue("Sheet1", "B2", 100)
    // Đặt trang tính mặc định của bảng tính
    f.SetActiveSheet(index)
    // Lưu tài liệu vào đường dẫn chỉ định
    if err := f.SaveAs("Book1.xlsx"); err != nil {
        fmt.Println(err)
    }
}

Đọc Tài liệu Excel

Dưới đây là một ví dụ về việc đọc tài liệu 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)
        }
    }()
    // Lấy giá trị của ô cụ thể trong bảng tính
    cell, err := f.GetCellValue("Sheet1", "B2")
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(cell)
    // Lấy tất cả các ô trên 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()
    }
}

Tạo biểu đồ trong tài liệu Excel

Việc tạo biểu đồ bằng Excelize rất đơn giản, chỉ cần vài dòng mã. Bạn có thể tạo biểu đồ dựa trên dữ liệu hiện có trong bảng tính hoặc thêm dữ liệu vào bảng tính và sau đó tạo biểu đồ.

Tạo biểu đồ trong tài liệu Excel

gói chính

nhập (
    "fmt"

    "github.com/xuri/excelize/v2"
)

hàm chính() {
    f := excelize.NewFile()
    hoãn lại func() {
        nếu err := f.Close(); err != nil {
            fmt.Println(err)
        }
    }()
    cho idx, hàng := phạm vi [] [] giao diện{}{
        {nil, "Apple", "Orange", "Lê"}, {"Nhỏ", 2, 3, 3},
        {"Bình thường", 5, 2, 4}, {"Lớn", 6, 7, 8},
    } {
        ô, err := excelize.CoordinatesToCellName(1, idx+1)
        nếu err != nil {
            fmt.Println(err)
            trở lại
        }
        f.SetSheetRow("Sheet1", ô, &hàng)
    }
    nếu err := f.AddChart("Sheet1", "E1", &excelize.Chart{
        Loại: excelize.Col3DClustered,
        Loạt: []excelize.ChartSeries{
            {
                Tên:       "Sheet1!$A$2",
                Danh mục: "Sheet1!$B$1:$D$1",
                Giá trị:     "Sheet1!$B$2:$D$2",
            },
            {
                Tên:       "Sheet1!$A$3",
                Danh mục: "Sheet1!$B$1:$D$1",
                Giá trị:     "Sheet1!$B$3:$D$3",
            },
            {
                Tên:       "Sheet1!$A$4",
                Danh mục: "Sheet1!$B$1:$D$1",
                Giá trị:     "Sheet1!$B$4:$D$4",
            }},
        Tiêu đề: []excelize.RichTextRun{
            {
                Văn bản: "Biểu đồ cột phân cụm 3D của trái cây",
            },
        },
    }); err != nil {
        fmt.Println(err)
        trở lại
    }
    // Lưu tệp vào đường dẫn cụ thể
    nếu err := f.SaveAs("Book1.xlsx"); err != nil {
        fmt.Println(err)
    }
}

Chèn hình ảnh vào tài liệu Excel

gói chính

nhập (
    "fmt"
    _ "hình ảnh/gif"
    _ "hình ảnh/jpeg"
    _ "hình ảnh/png"

    "github.com/xuri/excelize/v2"
)

hàm chính() {
    f, err := excelize.OpenFile("Book1.xlsx")
    nếu err != nil {
        fmt.Println(err)
        trở lại
    }
    hoãn lại func() {
        nếu err := f.Close(); err != nil {
            fmt.Println(err)
        }
    }()
    // Chèn một hình ảnh
    nếu err := f.AddPicture("Sheet1", "A2", "image.png", nil); err != nil {
        fmt.Println(err)
        trở lại
    }
    // Chèn một hình ảnh vào bảng tính và thiết lập tỷ lệ của hình ảnh
    nếu err := f.AddPicture("Sheet1", "D2", "image.jpg",
        &excelize.GraphicOptions{ScaleX: 0.5, ScaleY: 0.5}); err != nil {
        fmt.Println(err)
        trở lại
    }
    // Chèn một hình ảnh vào bảng tính và thiết lập thuộc tính in của hình ảnh
    bật, tắt := true, false
    nếu err := f.AddPicture("Sheet1", "H2", "image.gif",
        &excelize.GraphicOptions{
            Đối tượngIn:     &bật,
            Khóa tỷ lệ: false,
            OffsetX:         15,
            OffsetY:         10,
            Đã khóa:          &tắt,
        }); err != nil {
        fmt.Println(err)
        trở lại
    }
    // Lưu tệp
    nếu err = f.Save(); err != nil {
        fmt.Println(err)
    }
}