Go to file
Christian Fiedler 3280e1b686 Allow access to more formula attributes in SetCellFormula (#484)
* Allow access to more formula attributes in SetCellFormula

Make SetCellFormula variadic to not break API.
The new arguments are option arguments in which the type of
the formula and the ref attribute may be set.
These need to be set for an array formula to work.

* Add TestWriteArrayFormula to test optional parameters of SetCellFormula

TestWriteArrayFormula writes a document to the test directory that
contains array formulas that are used to calculate standard deviations.
The file also contains values calculated by the Go testcase, so the
results can be verified. It should be tested, if the array formula
works (i.e. shows a number, not an error) and that the values calculated
by the formula and those calculated by Go are the same.
2019-09-22 20:52:01 +08:00
.github/ISSUE_TEMPLATE Delete ISSUE_TEMPLATE.md 2018-07-30 10:06:22 +08:00
test Testing files updated 2019-09-02 21:52:55 +08:00
.gitignore refactor: handler error instead of panic, 2019-03-23 20:08:06 +08:00
.travis.yml Documentation updated, Go 1.10+ required 2019-08-11 00:36:14 +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 Combine functions: 2019-09-16 01:17:35 +08:00
README_zh.md Combine functions: 2019-09-16 01:17:35 +08:00
adjust.go Documentation updated, Go 1.10+ required 2019-08-11 00:36:14 +08:00
adjust_test.go Optimize code, fix golint issues 2019-06-20 00:00:40 +08:00
calcchain.go Documentation updated, Go 1.10+ required 2019-08-11 00:36:14 +08:00
cell.go Allow access to more formula attributes in SetCellFormula (#484) 2019-09-22 20:52:01 +08:00
cell_test.go Testing files updated 2019-09-02 21:52:55 +08:00
cellmerged.go Documentation updated, Go 1.10+ required 2019-08-11 00:36:14 +08:00
cellmerged_test.go Resolve #393, upgrade Go module to v2 2019-05-02 15:57:47 +08:00
chart.go Combine functions: 2019-09-16 01:17:35 +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 Documentation updated, Go 1.10+ required 2019-08-11 00:36:14 +08:00
col_test.go Resolve #397, support set style by columns 2019-05-16 13:36:50 +08:00
comment.go Combine functions: 2019-09-16 01:17:35 +08:00
datavalidation.go Documentation updated, Go 1.10+ required 2019-08-11 00:36:14 +08:00
datavalidation_test.go Documentation updated, Go 1.10+ required 2019-08-11 00:36:14 +08:00
date.go Documentation updated, Go 1.10+ required 2019-08-11 00:36:14 +08:00
date_test.go add unit tests to functions 2019-04-16 10:57:21 +08:00
docProps.go Documentation updated, Go 1.10+ required 2019-08-11 00:36:14 +08:00
docProps_test.go Documentation updated, Go 1.10+ required 2019-08-11 00:36:14 +08:00
errors.go Documentation updated, Go 1.10+ required 2019-08-11 00:36:14 +08:00
errors_test.go Huge refactorig for consistent col/row numbering (#356) 2019-03-20 00:14:41 +08:00
excelize.go Combine functions: 2019-09-16 01:17:35 +08:00
excelize.svg Combine functions: 2019-09-16 01:17:35 +08:00
excelize_test.go Allow access to more formula attributes in SetCellFormula (#484) 2019-09-22 20:52:01 +08:00
file.go Combine functions: 2019-09-16 01:17:35 +08:00
go.mod Fix dependency on github.com/360EntSecGroup-Skylar/excelize v1 2019-09-13 11:40:16 +01:00
go.sum Fix dependency on github.com/360EntSecGroup-Skylar/excelize v1 2019-09-13 11:40:16 +01:00
hsl.go Comments style changed. 2018-09-14 00:58:48 +08:00
lib.go Documentation updated, Go 1.10+ required 2019-08-11 00:36:14 +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 Combine functions: 2019-09-16 01:17:35 +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
pivotTable.go Resolve #40, init pivot table support 2019-09-20 00:20:30 +08:00
pivotTable_test.go Resolve #40, init pivot table support 2019-09-20 00:20:30 +08:00
rows.go Documentation updated, Go 1.10+ required 2019-08-11 00:36:14 +08:00
rows_test.go Only parse xml once when reading 2019-08-05 08:50:45 -05:00
shape.go Combine functions: 2019-09-16 01:17:35 +08:00
sheet.go Combine functions: 2019-09-16 01:17:35 +08:00
sheet_test.go Fix dependency on github.com/360EntSecGroup-Skylar/excelize v1 2019-09-13 11:40:16 +01:00
sheetpr.go Documentation updated, Go 1.10+ required 2019-08-11 00:36:14 +08:00
sheetpr_test.go Fix dependency on github.com/360EntSecGroup-Skylar/excelize v1 2019-09-13 11:40:16 +01:00
sheetview.go Documentation updated, Go 1.10+ required 2019-08-11 00:36:14 +08:00
sheetview_test.go Fix dependency on github.com/360EntSecGroup-Skylar/excelize v1 2019-09-13 11:40:16 +01:00
sparkline.go Update the Godoc 2019-08-21 23:03:34 +08:00
sparkline_test.go New feature: sparkline supported 2019-08-04 20:24:59 +08:00
styles.go Fix #386 regression test added (#440) 2019-09-01 12:30:14 +08:00
styles_test.go Update the Godoc 2019-08-21 23:03:34 +08:00
table.go Combine functions: 2019-09-16 01:17:35 +08:00
templates.go Documentation updated, Go 1.10+ required 2019-08-11 00:36:14 +08:00
vmlDrawing.go Documentation updated, Go 1.10+ required 2019-08-11 00:36:14 +08:00
xmlApp.go Documentation updated, Go 1.10+ required 2019-08-11 00:36:14 +08:00
xmlCalcChain.go Documentation updated, Go 1.10+ required 2019-08-11 00:36:14 +08:00
xmlChart.go Documentation updated, Go 1.10+ required 2019-08-11 00:36:14 +08:00
xmlComments.go Documentation updated, Go 1.10+ required 2019-08-11 00:36:14 +08:00
xmlContentTypes.go Documentation updated, Go 1.10+ required 2019-08-11 00:36:14 +08:00
xmlCore.go Documentation updated, Go 1.10+ required 2019-08-11 00:36:14 +08:00
xmlDecodeDrawing.go Documentation updated, Go 1.10+ required 2019-08-11 00:36:14 +08:00
xmlDrawing.go Combine functions: 2019-09-16 01:17:35 +08:00
xmlPivotCache.go Resolve #40, init pivot table support 2019-09-20 00:20:30 +08:00
xmlPivotTable.go Resolve #40, init pivot table support 2019-09-20 00:20:30 +08:00
xmlSharedStrings.go Documentation updated, Go 1.10+ required 2019-08-11 00:36:14 +08:00
xmlStyles.go Documentation updated, Go 1.10+ required 2019-08-11 00:36:14 +08:00
xmlTable.go Documentation updated, Go 1.10+ required 2019-08-11 00:36:14 +08:00
xmlTheme.go Documentation updated, Go 1.10+ required 2019-08-11 00:36:14 +08:00
xmlWorkbook.go Combine functions: 2019-09-16 01:17:35 +08:00
xmlWorksheet.go Fix #483, adjust the order of fields in the structure 2019-09-18 00:47:31 +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.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.
    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"
)

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)
    }
    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"
)

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.