Skip to content
Golang library for reading and writing Microsoft Excel™ (XLSX) files.
Go
Branch: master
Clone or download

Files

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 Compatibility improvement Sep 24, 2019
.gitignore Fix #539 Fixed error opening excel file created in encoding d… (#540) Dec 19, 2019
.travis.yml Resolve #570, flat columns for the column's operation Feb 6, 2020
CODE_OF_CONDUCT.md Fix #576, serialize by fields order on stream flush Feb 12, 2020
CONTRIBUTING.md Resolve #570, flat columns for the column's operation Feb 6, 2020
LICENSE Improve code coverage unit tests Dec 29, 2019
PULL_REQUEST_TEMPLATE.md Create PULL_REQUEST_TEMPLATE.md Jul 29, 2018
README.md Resolve #582, support to set date field subtotal and names for pivot … Feb 21, 2020
README_zh.md Resolve #582, support to set date field subtotal and names for pivot … Feb 21, 2020
SECURITY.md Create SECURITY.md Sep 25, 2019
adjust.go Improve code coverage unit tests Dec 29, 2019
adjust_test.go Improve code coverage unit tests Dec 29, 2019
calcchain.go Improve code coverage unit tests Dec 29, 2019
calcchain_test.go Improve code coverage unit tests Dec 21, 2019
cell.go Improve code coverage unit tests Dec 29, 2019
cell_test.go Resolve #580, revert commit 5ca7231 Feb 18, 2020
chart.go Resolve #580, revert commit 5ca7231 Feb 18, 2020
chart_test.go Resolve #455, init delete picture from spreadsheet support Jan 21, 2020
codelingo.yaml CodeLingo setup Dec 21, 2018
col.go Resolve #570, flat columns for the column's operation Feb 6, 2020
col_test.go Resolve #570, flat columns for the column's operation Feb 6, 2020
comment.go Improve code coverage unit tests Dec 29, 2019
comment_test.go Improve code coverage unit tests Dec 29, 2019
datavalidation.go Improve code coverage unit tests Dec 29, 2019
datavalidation_test.go Improve code coverage unit tests Dec 29, 2019
date.go Improve code coverage unit tests Dec 29, 2019
date_test.go add unit tests to functions Apr 16, 2019
docProps.go Improve code coverage unit tests Dec 29, 2019
docProps_test.go Improve code coverage unit tests Dec 29, 2019
drawing.go Resolve #455, init delete picture from spreadsheet support Jan 21, 2020
errors.go Improve code coverage unit tests Dec 29, 2019
errors_test.go Huge refactorig for consistent col/row numbering (#356) Mar 19, 2019
excelize.go Resolve #580, revert commit 5ca7231 Feb 18, 2020
excelize.svg Combine functions: Sep 15, 2019
excelize_test.go Resolve #580, revert commit 5ca7231 Feb 18, 2020
file.go Improve code coverage unit tests Dec 29, 2019
file_test.go optimize code and comments: use println errors instead of panic Jan 3, 2020
go.mod Fix #539 Fixed error opening excel file created in encoding d… (#540) Dec 19, 2019
go.sum Fix #539 Fixed error opening excel file created in encoding d… (#540) Dec 19, 2019
hsl.go Comments style changed. Sep 13, 2018
lib.go Improve code coverage unit tests Dec 29, 2019
lib_test.go refactor: handler error instead of panic, Mar 23, 2019
logo.png Typo fixed and godoc updated Mar 20, 2019
merge.go Resolve #570, flat columns for the column's operation Feb 6, 2020
merge_test.go optimize code and comments: use println errors instead of panic Jan 3, 2020
picture.go Resolve #580, revert commit 5ca7231 Feb 18, 2020
picture_test.go Resolve #455, init delete picture from spreadsheet support Jan 21, 2020
pivotTable.go Resolve #582, support to set date field subtotal and names for pivot … Feb 21, 2020
pivotTable_test.go Resolve #582, support to set date field subtotal and names for pivot … Feb 21, 2020
rows.go Fix #586, duplicate row with merged cells Feb 24, 2020
rows_test.go Fix #586, duplicate row with merged cells Feb 24, 2020
shape.go Improve code coverage unit tests Dec 29, 2019
shape_test.go Improve code coverage unit tests Dec 29, 2019
sheet.go Resolve #580, revert commit 5ca7231 Feb 18, 2020
sheet_test.go Resolve #580, revert commit 5ca7231 Feb 18, 2020
sheetpr.go Improve code coverage unit tests Dec 29, 2019
sheetpr_test.go Resolve #580, revert commit 5ca7231 Feb 18, 2020
sheetview.go Improve code coverage unit tests Dec 29, 2019
sheetview_test.go Resolve #580, revert commit 5ca7231 Feb 18, 2020
sparkline.go Improve code coverage unit tests Dec 29, 2019
sparkline_test.go Resolve #580, revert commit 5ca7231 Feb 18, 2020
stream.go Resolve #580, revert commit 5ca7231 Feb 18, 2020
stream_test.go Fix #576, serialize by fields order on stream flush Feb 12, 2020
styles.go Resolve #580, revert commit 5ca7231 Feb 18, 2020
styles_test.go Improve code coverage unit tests Dec 29, 2019
table.go Resolve #570, flat columns for the column's operation Feb 6, 2020
table_test.go Improve code coverage unit tests Dec 29, 2019
templates.go Improve code coverage unit tests Dec 29, 2019
vmlDrawing.go Improve code coverage unit tests Dec 29, 2019
xmlApp.go Improve code coverage unit tests Dec 29, 2019
xmlCalcChain.go Improve code coverage unit tests Dec 29, 2019
xmlChart.go Make DeleteChart delete multiple charts located on the same cell Jan 21, 2020
xmlComments.go Improve code coverage unit tests Dec 29, 2019
xmlContentTypes.go Improve code coverage unit tests Dec 29, 2019
xmlCore.go Improve code coverage unit tests Dec 29, 2019
xmlDecodeDrawing.go Improve code coverage unit tests Dec 29, 2019
xmlDrawing.go Improve code coverage unit tests Dec 29, 2019
xmlPivotCache.go Optimize code of Getting/Setting Page Margins Oct 16, 2019
xmlPivotTable.go Improve code coverage unit tests Dec 29, 2019
xmlSharedStrings.go Improve code coverage unit tests Dec 29, 2019
xmlStyles.go Improve code coverage unit tests Dec 29, 2019
xmlTable.go Improve code coverage unit tests Dec 29, 2019
xmlTheme.go Improve code coverage unit tests Dec 29, 2019
xmlWorkbook.go Improve code coverage unit tests Dec 29, 2019
xmlWorksheet.go Fix #578, escape character in the formula Feb 15, 2020

README.md

Excelize logo

Build Status Code Coverage Go Report Card go.dev 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.10 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() {
    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.
    if err := f.SaveAs("Book1.xlsx"); 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() {
    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"
)

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)
    }
    if 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"}}`); err != nil {
        fmt.Println(err)
        return
    }
    // Save xlsx file by the given path.
    if err := f.SaveAs("Book1.xlsx"); 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() {
    f, err := excelize.OpenFile("Book1.xlsx")
    if err != nil {
        fmt.Println(err)
        return
    }
    // Insert a picture.
    if err := f.AddPicture("Sheet1", "A2", "image.png", ""); err != nil {
        fmt.Println(err)
    }
    // Insert a picture to worksheet with scaling.
    if err := f.AddPicture("Sheet1", "D2", "image.jpg", `{"x_scale": 0.5, "y_scale": 0.5}`); err != nil {
        fmt.Println(err)
    }
    // Insert a picture offset in the cell with printing support.
    if err := f.AddPicture("Sheet1", "H2", "image.gif", `{"x_offset": 15, "y_offset": 10, "print_obj": true, "lock_aspect_ratio": false, "locked": false}`); err != nil {
        fmt.Println(err)
    }
    // Save the xlsx file with the origin path.
    if err = f.Save(); 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.

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

You can’t perform that action at this time.