Go to file
Harris e07581e980
Further improve read performance
Instead of re-encoding the full sheet to change the namespaces
in the encoded bytes, read the sheet again and do the byte
replacements there.

In this case, file access ends up being more performant than
marshaling the sheet back to XML.

In the SharedStrings test, ensure the strings are actually read.

Fix #439
2019-08-07 08:06:40 -05:00
.github/ISSUE_TEMPLATE Delete ISSUE_TEMPLATE.md 2018-07-30 10:06:22 +08:00
test Resolve #217, new function add VBA project supported. 2019-07-21 12:56:36 +08:00
.gitignore refactor: handler error instead of panic, 2019-03-23 20:08:06 +08:00
.travis.yml Remove Go 1.8 test in TravisCI 2019-05-03 02:11:53 +08:00
CODE_OF_CONDUCT.md Code of conduct and contributing updated. 2017-07-10 21:34:46 +08:00
CONTRIBUTING.md Resolve #318, add new functions and 2019-01-06 14:12:31 +08:00
LICENSE Resolve #329, add copyright agreement statement on README and LICENSE 2019-01-05 10:55:43 +08:00
PULL_REQUEST_TEMPLATE.md Create PULL_REQUEST_TEMPLATE.md 2018-07-29 14:00:21 +08:00
README.md Resolve #393, upgrade Go module to v2 2019-05-02 15:57:47 +08:00
README_zh.md Resolve #393, upgrade Go module to v2 2019-05-02 15:57:47 +08:00
adjust.go Fixed doc corruption when deleting all merged cells 2019-08-03 23:10:01 +08:00
adjust_test.go Optimize code, fix golint issues 2019-06-20 00:00:40 +08:00
calcchain.go Resolve #387, skip saving empty calculation chains 2019-04-22 16:59:41 +08:00
cell.go Fix #424, refactor merged cells adjuster 2019-06-12 08:10:33 +08:00
cell_test.go Resolve #382, rewrite prepareSheetXML to scale linearly (#383) 2019-04-16 14:50:16 +08:00
cellmerged.go - Supplemental worksheet struct fields and field order adjustment 2019-06-05 22:06:15 +08:00
cellmerged_test.go Resolve #393, upgrade Go module to v2 2019-05-02 15:57:47 +08:00
chart.go Support to create bubble and 3D bubble chart 2019-06-19 00:01:18 +08:00
chart_test.go Support to create bubble and 3D bubble chart 2019-06-19 00:01:18 +08:00
codelingo.yaml CodeLingo setup 2018-12-21 14:20:22 +13:00
col.go Resolve #397, support set style by columns 2019-05-16 13:36:50 +08:00
col_test.go Resolve #397, support set style by columns 2019-05-16 13:36:50 +08:00
comment.go Fix #434, add missing comments 2019-07-15 09:13:55 +08:00
datavalidation.go Fix invalid formula in data validation drop list 2019-07-22 22:36:44 +08:00
datavalidation_test.go Resolve #394, init set header and footer support 2019-05-05 16:25:57 +08:00
date.go refactor: handler error instead of panic, 2019-03-23 20:08:06 +08:00
date_test.go add unit tests to functions 2019-04-16 10:57:21 +08:00
docProps.go Update GoDoc and typo fixed 2019-06-30 19:50:47 +08:00
docProps_test.go - Supplemental worksheet struct fields and field order adjustment 2019-06-05 22:06:15 +08:00
errors.go Typo fixed and godoc updated 2019-03-20 15:13:41 +08:00
errors_test.go Huge refactorig for consistent col/row numbering (#356) 2019-03-20 00:14:41 +08:00
excelize.go New feature: sparkline supported 2019-08-04 20:24:59 +08:00
excelize.png Typo fixed and godoc updated 2019-03-20 15:13:41 +08:00
excelize_test.go Further improve read performance 2019-08-07 08:06:40 -05:00
file.go Resolve #369,#370 2019-04-15 11:22:57 +08:00
go.mod Resolve #393, upgrade Go module to v2 2019-05-02 15:57:47 +08:00
go.sum Resolve #393, upgrade Go module to v2 2019-05-02 15:57:47 +08:00
hsl.go Comments style changed. 2018-09-14 00:58:48 +08:00
lib.go godoc update and typo fixed 2019-04-20 14:57:50 +08:00
lib_test.go refactor: handler error instead of panic, 2019-03-23 20:08:06 +08:00
logo.png Typo fixed and godoc updated 2019-03-20 15:13:41 +08:00
picture.go Add TIF, TIFF format images and more detailed error information when open the encrypted file 2019-06-27 21:58:14 +08:00
picture_test.go Add TIF, TIFF format images and more detailed error information when open the encrypted file 2019-06-27 21:58:14 +08:00
rows.go Further improve read performance 2019-08-07 08:06:40 -05:00
rows_test.go Only parse xml once when reading 2019-08-05 08:50:45 -05:00
shape.go Add the ability to change the default font 2019-05-23 17:01:30 -05:00
sheet.go New feature: sparkline supported 2019-08-04 20:24:59 +08:00
sheet_test.go Add unit test for SetPageLayout 2019-07-07 00:17:15 +08:00
sheetpr.go Resolve #369,#370 2019-04-15 11:22:57 +08:00
sheetpr_test.go Resolve #393, upgrade Go module to v2 2019-05-02 15:57:47 +08:00
sheetview.go add comments for SheetView parameters 2019-07-08 20:17:47 +08:00
sheetview_test.go Resolve #393, upgrade Go module to v2 2019-05-02 15:57:47 +08:00
sparkline.go New feature: sparkline supported 2019-08-04 20:24:59 +08:00
sparkline_test.go New feature: sparkline supported 2019-08-04 20:24:59 +08:00
styles.go New feature: sparkline supported 2019-08-04 20:24:59 +08:00
styles_test.go Add the ability to change the default font 2019-05-23 17:01:30 -05:00
table.go Fix #424, refactor merged cells adjuster 2019-06-12 08:10:33 +08:00
templates.go Add the ability to change the default font 2019-05-23 17:01:30 -05:00
vmlDrawing.go README updated 2019-01-01 13:20:14 +08:00
xmlApp.go Add TIF, TIFF format images and more detailed error information when open the encrypted file 2019-06-27 21:58:14 +08:00
xmlCalcChain.go Update docs 2019-07-17 19:25:41 +08:00
xmlChart.go Support to create bubble and 3D bubble chart 2019-06-19 00:01:18 +08:00
xmlComments.go Structure update #434 2019-07-14 13:13:10 +08:00
xmlContentTypes.go README updated 2019-01-01 13:20:14 +08:00
xmlCore.go - Supplemental worksheet struct fields and field order adjustment 2019-06-05 22:06:15 +08:00
xmlDecodeDrawing.go Fix #424, refactor merged cells adjuster 2019-06-12 08:10:33 +08:00
xmlDrawing.go New feature: sparkline supported 2019-08-04 20:24:59 +08:00
xmlSharedStrings.go README updated 2019-01-01 13:20:14 +08:00
xmlStyles.go Fix #424, refactor merged cells adjuster 2019-06-12 08:10:33 +08:00
xmlTable.go README updated 2019-01-01 13:20:14 +08:00
xmlTheme.go README updated 2019-01-01 13:20:14 +08:00
xmlWorkbook.go New functions: SetDefinedName and GetDefinedName added 2019-06-18 23:07:44 +08:00
xmlWorksheet.go Bugfix #454 2019-08-06 10:00:10 +08:00

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.