Golang library for reading and writing Microsoft Excel™ (XLSX) files.
Branch: master
Clone or download
dolmen and xuri Faster TitleToNumber (#343)
* TestTitleToNumber: more test cases

* TitleToNumber: drop use of math.Pow()

Compute using pure integers

* TitleToNumber: simplify

Remove unecessary casts to int
Latest commit e780e41 Feb 2, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github/ISSUE_TEMPLATE Delete ISSUE_TEMPLATE.md Jul 30, 2018
test Update readme Jan 29, 2019
.gitignore Tests refactoring Dec 27, 2018
.travis.yml Complete unit testing case for data validation Sep 13, 2018
CODE_OF_CONDUCT.md Code of conduct and contributing updated. Jul 10, 2017
CONTRIBUTING.md Resolve #318, add new functions and Jan 6, 2019
LICENSE Resolve #329, add copyright agreement statement on README and LICENSE Jan 5, 2019
PULL_REQUEST_TEMPLATE.md Create PULL_REQUEST_TEMPLATE.md Jul 29, 2018
README.md Update readme Jan 29, 2019
README_zh.md Update readme Jan 29, 2019
cell.go README updated Jan 1, 2019
cell_test.go Tests refactoring Dec 27, 2018
chart.go README updated Jan 1, 2019
chart_test.go Tests refactoring Dec 27, 2018
codelingo.yaml CodeLingo setup Dec 21, 2018
col.go README updated Jan 1, 2019
comment.go README updated Jan 1, 2019
datavalidation.go fix: datavalidation list error, formula > 255 issue #339 Jan 23, 2019
datavalidation_test.go fix: datavalidation list error, formula > 255 issue #339 Jan 23, 2019
date.go README updated Jan 1, 2019
date_test.go Tests refactoring Dec 27, 2018
excelize.go New feature: File.DuplicateRowTo() duplicate row to specified row pos… Jan 10, 2019
excelize.png Add new logo for excelize Dec 4, 2018
excelize_test.go Faster TitleToNumber (#343) Feb 2, 2019
file.go README updated Jan 1, 2019
go.mod New feature: File.DuplicateRowTo() duplicate row to specified row pos… Jan 10, 2019
go.sum New feature: File.DuplicateRowTo() duplicate row to specified row pos… Jan 10, 2019
hsl.go Comments style changed. Sep 13, 2018
lib.go Faster TitleToNumber (#343) Feb 2, 2019
lib_test.go Tests refactoring Dec 27, 2018
logo.png Fixes #308, refactor `NewSheet()`, `DeleteSheet()`, `SetActiveSheet()… Dec 14, 2018
picture.go README updated Jan 1, 2019
rows.go New feature: File.DuplicateRowTo() duplicate row to specified row pos… Jan 10, 2019
shape.go README updated Jan 1, 2019
sheet.go The function SetPageLayout support set paper size Jan 13, 2019
sheet_test.go The function SetPageLayout support set paper size Jan 13, 2019
sheetpr.go Resolve #318, add new functions and Jan 6, 2019
sheetpr_test.go Tests refactoring Dec 27, 2018
sheetview.go README updated Jan 1, 2019
sheetview_test.go Tests refactoring Dec 27, 2018
styles.go Do not create a blank fill if no fill is specified in the style format Jan 9, 2019
styles_test.go Do not create a blank fill if no fill is specified in the style format Jan 9, 2019
table.go README updated Jan 1, 2019
templates.go README updated Jan 1, 2019
vmlDrawing.go README updated Jan 1, 2019
xmlChart.go README updated Jan 1, 2019
xmlComments.go README updated Jan 1, 2019
xmlContentTypes.go README updated Jan 1, 2019
xmlDecodeDrawing.go README updated Jan 1, 2019
xmlDrawing.go README updated Jan 1, 2019
xmlSharedStrings.go README updated Jan 1, 2019
xmlStyles.go README updated Jan 1, 2019
xmlTable.go README updated Jan 1, 2019
xmlTheme.go README updated Jan 1, 2019
xmlWorkbook.go README updated Jan 1, 2019
xmlWorksheet.go The function SetPageLayout support set paper size Jan 13, 2019

README.md

Excelize logo

Build Status Code Coverage Go Report Card GoDoc Licenses Donate

Excelize

Introduction

Excelize is a library written in pure Go and providing a set of functions that allow you to write to and read from XLSX files. Support reads and writes XLSX file generated by Microsoft Excel™ 2007 and later. Support save 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

Create XLSX file

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

package main

import (
    "fmt"

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

func main() {
    xlsx := excelize.NewFile()
    // Create a new sheet.
    index := xlsx.NewSheet("Sheet2")
    // Set value of a cell.
    xlsx.SetCellValue("Sheet2", "A2", "Hello world.")
    xlsx.SetCellValue("Sheet1", "B2", 100)
    // Set active sheet of the workbook.
    xlsx.SetActiveSheet(index)
    // Save xlsx file by the given path.
    err := xlsx.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"
)

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

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}
    xlsx := excelize.NewFile()
    for k, v := range categories {
        xlsx.SetCellValue("Sheet1", k, v)
    }
    for k, v := range values {
        xlsx.SetCellValue("Sheet1", k, v)
    }
    xlsx.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"}}`)
    // Save xlsx file by the given path.
    err := xlsx.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"
)

func main() {
    xlsx, err := excelize.OpenFile("./Book1.xlsx")
    if err != nil {
        fmt.Println(err)
        return
    }
    // Insert a picture.
    err = xlsx.AddPicture("Sheet1", "A2", "./image1.png", "")
    if err != nil {
        fmt.Println(err)
    }
    // Insert a picture to worksheet with scaling.
    err = xlsx.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 = xlsx.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 = xlsx.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.