You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
xuri b1f632d408 Resolve #393, upgrade Go module to v2 7 months ago
.github/ISSUE_TEMPLATE Delete ISSUE_TEMPLATE.md 1 year ago
test Resolve #106, #294 performance optimization for add hyperlink 9 months ago
.gitignore refactor: handler error instead of panic, 8 months ago
.travis.yml Implement consistent row addressing by Excel row number starting with 1 (#350) 9 months ago
CODE_OF_CONDUCT.md Code of conduct and contributing updated. 2 years ago
CONTRIBUTING.md Resolve #318, add new functions and 11 months ago
LICENSE Resolve #329, add copyright agreement statement on README and LICENSE 11 months ago
PULL_REQUEST_TEMPLATE.md Create PULL_REQUEST_TEMPLATE.md 1 year ago
README.md Resolve #393, upgrade Go module to v2 7 months ago
README_zh.md Resolve #393, upgrade Go module to v2 7 months ago
adjust.go Resolve #369,#370 7 months ago
adjust_test.go add unit tests to functions 7 months ago
calcchain.go Resolve #387, skip saving empty calculation chains 7 months ago
cell.go Add a check for maximum limit hyperlinks in a worksheet 7 months ago
cell_test.go Resolve #382, rewrite prepareSheetXML to scale linearly (#383) 7 months ago
cellmerged.go Resolve #393, upgrade Go module to v2 7 months ago
cellmerged_test.go Resolve #393, upgrade Go module to v2 7 months ago
chart.go Resolve #393, upgrade Go module to v2 7 months ago
chart_test.go add unit tests to functions 7 months ago
codelingo.yaml CodeLingo setup 11 months ago
col.go godoc update and typo fixed 7 months ago
comment.go Add a check for maximum limit hyperlinks in a worksheet 7 months ago
datavalidation.go godoc update and typo fixed 7 months ago
datavalidation_test.go fix: datavalidation list error, formula > 255 issue #339 10 months ago
date.go refactor: handler error instead of panic, 8 months ago
date_test.go add unit tests to functions 7 months ago
errors.go Typo fixed and godoc updated 8 months ago
errors_test.go Huge refactorig for consistent col/row numbering (#356) 8 months ago
excelize.go Resolve #393, upgrade Go module to v2 7 months ago
excelize.png Typo fixed and godoc updated 8 months ago
excelize_test.go Resolve #393, upgrade Go module to v2 7 months ago
file.go Resolve #369,#370 7 months ago
go.mod Resolve #393, upgrade Go module to v2 7 months ago
go.sum Resolve #393, upgrade Go module to v2 7 months ago
hsl.go Comments style changed. 1 year ago
lib.go godoc update and typo fixed 7 months ago
lib_test.go refactor: handler error instead of panic, 8 months ago
logo.png Typo fixed and godoc updated 8 months ago
picture.go Resolve #393, upgrade Go module to v2 7 months ago
picture_test.go add unit tests to functions 7 months ago
rows.go godoc update and typo fixed 7 months ago
rows_test.go add unit tests to functions 7 months ago
shape.go Add a check for maximum limit hyperlinks in a worksheet 7 months ago
sheet.go Resolve #392, compatible with strict relations name space inspection 7 months ago
sheet_test.go Resolve #393, upgrade Go module to v2 7 months ago
sheetpr.go Resolve #369,#370 7 months ago
sheetpr_test.go Resolve #393, upgrade Go module to v2 7 months ago
sheetview.go Resolve #369,#370 7 months ago
sheetview_test.go Resolve #393, upgrade Go module to v2 7 months ago
styles.go godoc update and typo fixed 7 months ago
styles_test.go add unit tests to functions 7 months ago
table.go godoc update and typo fixed 7 months ago
templates.go README updated 11 months ago
vmlDrawing.go README updated 11 months ago
xmlCalcChain.go resolve the issue corrupted xlsx after deleting formula of cell, reference #346 9 months ago
xmlChart.go README updated 11 months ago
xmlComments.go README updated 11 months ago
xmlContentTypes.go README updated 11 months ago
xmlDecodeDrawing.go README updated 11 months ago
xmlDrawing.go README updated 11 months ago
xmlSharedStrings.go README updated 11 months ago
xmlStyles.go README updated 11 months ago
xmlTable.go README updated 11 months ago
xmlTheme.go README updated 11 months ago
xmlWorkbook.go README updated 11 months ago
xmlWorksheet.go The function SetPageLayout support set paper size 10 months ago

README.md

Excelize logo

Build Status Code Coverage Go Report Card GoDoc Licenses Donate

Excelize

Introduction

Excelize is a library written in pure Go providing a set of functions that allow you to write to and read from XLSX files. Supports reading and writing XLSX file generated by Microsoft Excel™ 2007 and later. Supports saving a file without losing original charts of XLSX. This library needs Go version 1.8 or later. The full API docs can be seen using go’s built-in documentation tool, or online at godoc.org and docs reference.

Basic Usage

Installation

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

Create XLSX file

Here is a minimal example usage that will create XLSX file.

package main

import (
    "fmt"

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

func main() {
    f := excelize.NewFile()
    // Create a new sheet.
    index := f.NewSheet("Sheet2")
    // 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 xlsx file by the given path.
    err := f.SaveAs("./Book1.xlsx")
    if err != nil {
        fmt.Println(err)
    }
}

Reading XLSX file

The following constitutes the bare to read a XLSX document.

package main

import (
    "fmt"

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

func main() {
    f, err := excelize.OpenFile("./Book1.xlsx")
    if err != nil {
        fmt.Println(err)
        return
    }
    // Get value from cell by given worksheet name and axis.
    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")
    for _, row := range rows {
        for _, colCell := range row {
            fmt.Print(colCell, "\t")
        }
        fmt.Println()
    }
}

Add chart to XLSX file

With Excelize chart generation and management is as easy as a few lines of code. You can build charts based off data in your worksheet or generate charts without any data in your worksheet at all.

Excelize

package main

import (
    "fmt"

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

func main() {
    categories := map[string]string{"A2": "Small", "A3": "Normal", "A4": "Large", "B1": "Apple", "C1": "Orange", "D1": "Pear"}
    values := map[string]int{"B2": 2, "C2": 3, "D2": 3, "B3": 5, "C3": 2, "D3": 4, "B4": 6, "C4": 7, "D4": 8}
    f := excelize.NewFile()
    for k, v := range categories {
        f.SetCellValue("Sheet1", k, v)
    }
    for k, v := range values {
        f.SetCellValue("Sheet1", k, v)
    }
    err := f.AddChart("Sheet1", "E1", `{"type":"col3DClustered","series":[{"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":{"name":"Fruit 3D Clustered Column Chart"}}`)
    if err != nil {
        fmt.Println(err)
        return
    }
    // Save xlsx file by the given path.
    err = f.SaveAs("./Book1.xlsx")
    if err != nil {
        fmt.Println(err)
    }
}

Add picture to XLSX file

package main

import (
    "fmt"
    _ "image/gif"
    _ "image/jpeg"
    _ "image/png"

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

func main() {
    f, err := excelize.OpenFile("./Book1.xlsx")
    if err != nil {
        fmt.Println(err)
        return
    }
    // Insert a picture.
    err = f.AddPicture("Sheet1", "A2", "./image1.png", "")
    if err != nil {
        fmt.Println(err)
    }
    // Insert a picture to worksheet with scaling.
    err = f.AddPicture("Sheet1", "D2", "./image2.jpg", `{"x_scale": 0.5, "y_scale": 0.5}`)
    if err != nil {
        fmt.Println(err)
    }
    // Insert a picture offset in the cell with printing support.
    err = f.AddPicture("Sheet1", "H2", "./image3.gif", `{"x_offset": 15, "y_offset": 10, "print_obj": true, "lock_aspect_ratio": false, "locked": false}`)
    if err != nil {
        fmt.Println(err)
    }
    // Save the xlsx file with the origin path.
    err = f.Save()
    if err != nil {
        fmt.Println(err)
    }
}

Contributing

Contributions are welcome! Open a pull request to fix a bug, or open an issue to discuss a new feature or change. XML is compliant with part 1 of the 5th edition of the ECMA-376 Standard for Office Open XML.

Licenses

This program is under the terms of the BSD 3-Clause License. See https://opensource.org/licenses/BSD-3-Clause.

The Excel logo is a trademark of Microsoft Corporation. This artwork is an adaptation.

Some struct of XML originally by tealeg/xlsx. Licensed under the BSD 3-Clause License.

gopher.{ai,svg,png} was created by Takuya Ueda. Licensed under the Creative Commons 3.0 Attributions license.