excelize

其他源码 2025-08-03

excelize

介绍

excelize是用Pure Go编写的库,提供了一组功能,可允许您从XLAM / XLSM / XLSX / XLTM / XLTX文件写入和阅读。支持Microsoft Excel™2007及以后生成的读取和写作电子表格文档。通过高兼容性支持复杂的组件,并提供了流媒体API,以生成或读取具有大量数据的工作表的数据。该库需要Go版本1.23.0或更高版本。可以使用GO的内置文档工具或在go.dev和文档参考上在线查看完整文档。

基本用法

安装

go get github.com/xuri/ excelize
  • 如果使用GO模块对软件包进行管理,请使用以下命令安装。
go get github.com/xuri/ excelize /v2

创建电子表格

这是将创建电子表格文件的最小示例用法。

excelize/v2" ) func main() { f := excelize .NewFile() defer func() { if err := f.Close(); err != nil { fmt.Println(err) } }() // Create a new sheet. index, err := f.NewSheet("Sheet2") if err != nil { fmt.Println(err) return } // Set value of a cell. f.SetCellValue("Sheet2", "A2", "Hello world.") f.SetCellValue("Sheet1", "B2", 100) // Set active sheet of the workbook. f.SetActiveSheet(index) // Save spreadsheet by the given path. if err := f.SaveAs("Book1.xlsx"); err != nil { fmt.Println(err) } }">
 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 )
        }
    }()
    // Create a new sheet.
    index , err := f . NewSheet ( "Sheet2" )
    if err != nil {
        fmt . Println ( err )
        return
    }
    // Set value of a cell.
    f . SetCellValue ( "Sheet2" , "A2" , "Hello world." )
    f . SetCellValue ( "Sheet1" , "B2" , 100 )
    // Set active sheet of the workbook.
    f . SetActiveSheet ( index )
    // Save spreadsheet by the given path.
    if err := f . SaveAs ( "Book1.xlsx" ); err != nil {
        fmt . Println ( err )
    }
}

阅读电子表格

以下构成裸露的电子表格文档。

excelize/v2" ) func main() { f, err := excelize .OpenFile("Book1.xlsx") if err != nil { fmt.Println(err) return } defer func() { // Close the spreadsheet. if err := f.Close(); err != nil { fmt.Println(err) } }() // Get value from cell by given worksheet name and cell reference. cell, err := f.GetCellValue("Sheet1", "B2") if err != nil { fmt.Println(err) return } fmt.Println(cell) // Get all the rows in the 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() } }">
 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 () {
        // Close the spreadsheet.
        if err := f . Close (); err != nil {
            fmt . Println ( err )
        }
    }()
    // Get value from cell by given worksheet name and cell reference.
    cell , err := f . GetCellValue ( "Sheet1" , "B2" )
    if err != nil {
        fmt . Println ( err )
        return
    }
    fmt . Println ( cell )
    // Get all the rows in the 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 ()
    }
}

将图表添加到电子表格文件

随着图表生成和管理的excelize ,就像几行代码一样容易。您可以根据工作表中的数据构建图表,也可以在工作表中没有任何数据生成图表。

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 .RichTextRun{ { Text: "Fruit 3D Clustered Column Chart", }, }, }); err != nil { fmt.Println(err) return } // Save spreadsheet by the given path. if err := f.SaveAs("Book1.xlsx"); err != nil { fmt.Println(err) } }">
 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 . RichTextRun {
            {
                Text : "Fruit 3D Clustered Column Chart" ,
            },
        },
    }); err != nil {
        fmt . Println ( err )
        return
    }
    // Save spreadsheet by the given path.
    if err := f . SaveAs ( "Book1.xlsx" ); err != nil {
        fmt . Println ( err )
    }
}

将图片添加到电子表格文件中

excelize/v2" ) func main() { f, err := excelize .OpenFile("Book1.xlsx") if err != nil { fmt.Println(err) return } defer func() { // Close the spreadsheet. if err := f.Close(); err != nil { fmt.Println(err) } }() // Insert a picture. if err := f.AddPicture("Sheet1", "A2", "image.png", nil); err != nil { fmt.Println(err) } // Insert a picture to worksheet with scaling. if err := f.AddPicture("Sheet1", "D2", "image.jpg", & excelize .GraphicOptions{ScaleX: 0.5, ScaleY: 0.5}); err != nil { fmt.Println(err) } // Insert a picture offset in the cell with printing support. 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) } // Save the spreadsheet with the origin path. if err = f.Save(); err != nil { fmt.Println(err) } }">
 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 () {
        // Close the spreadsheet.
        if err := f . Close (); err != nil {
            fmt . Println ( err )
        }
    }()
    // Insert a picture.
    if err := f . AddPicture ( "Sheet1" , "A2" , "image.png" , nil ); err != nil {
        fmt . Println ( err )
    }
    // Insert a picture to worksheet with scaling.
    if err := f . AddPicture ( "Sheet1" , "D2" , "image.jpg" ,
        & excelize . GraphicOptions { ScaleX : 0.5 , ScaleY : 0.5 }); err != nil {
        fmt . Println ( err )
    }
    // Insert a picture offset in the cell with printing support.
    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 )
    }
    // Save the spreadsheet with the origin path.
    if err = f . Save (); err != nil {
        fmt . Println ( err )
    }
}

贡献

欢迎捐款!打开拉动请求以修复错误,或打开问题以讨论新功能或更改。 XML符合ECMA-376 Office Open XML标准的第5版的第1部分。

许可证

该计划符合BSD 3范围许可证的条款。请参阅https://ope**n*source.org/licenses/bsd-3-clause。

Excel徽标是Microsoft Corporation的商标。这艺术品是一种改编。

Gopher。{ai,svg,png}由takuya ueda创建。根据创意共享3.0归因许可许可。

下载源码

通过命令行克隆项目:

git clone https://github.com/qax-os/excelize.git