侧边栏壁纸
博主头像
云原生生态圈博主等级

让人迷茫的原因只有一个,那就是本该拼命的年纪,却想的太多,做得太少。

  • 累计撰写 44 篇文章
  • 累计创建 56 个标签
  • 累计收到 2 条评论

使用Excelize操作Office Excel文档类库

云原生生态圈
2022-03-16 / 0 评论 / 0 点赞 / 53 阅读 / 2,858 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-03-30,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

Excelize 是 Go 语言编写的一个用来操作 Office Excel 文档类库,基于 ECMA-376 Office OpenXML标准。可以使用它来读取写入 XLSX 文件。相比较其他的开源类库,Excelize 支持写入原本带有图片(表)的文档,还支持向 Excel 中插入图片、图标、以及工具函数等,同时对单元格的渲染以及图表的类型有良好的支持,并且在保存后不会丢失图表样式,可以应用在各种报表系统中。

使用场景

在一些情况下我们需要通过程序操作 Excel 文档,例如:打开读取已有 Excel 文档内容、创建新的 Excel 文档、基于已有文档(模版)生成新的 Excel 文档、向 Excel 文档中插入图片、图表和表格等元素,有时还需要跨平台实现这些操作。使用 Excelize 可以方便的满足上述需求。

安装

go get github.com/360EntSecGroup-Skylar/excelize
# 如果你是通过Go Module管理的包,执行以下安装
go get github.com/360EntSecGroup-Skylar/excelize/v2

基础使用

excelizeGithub上有些简单的demo,读写Demo,创建图表,插入图表等,我这里写了一个简单的Demo,把一个简单的Json文本数据写入到Excel文件中,同时对写入的数据通过Excel自带函数进行求总和百分比等基本计算。

Json的数据格式:

{
	"110025": {
		"name": "A",
		"amount": 1000,
		"price": "1.1540",
		"unitPrice": 1.1287,
		"earnings": -116.92,
		"priceDate": "2020-05-11"
	},
	"159848": {
		"name": "B",
		"amount": 1000,
		"price": "0.7801",
		"unitPrice": 1.9728,
		"earnings": 17.35,
		"priceDate": "2020-05-11"
	}
}

Demo代码:

创建一个demo目录

mkdir excelizeDemo && cd $_
go mod init
go get github.com/360EntSecGroup-Skylar/excelize/v2

go代码:

package main

import (
	"encoding/json"
	"fmt"
	"github.com/360EntSecGroup-Skylar/excelize"
	"io/ioutil"
	"os"
	"strconv"
)

type J struct {
	Name      string  `json:"name"`
	Amount    float64 `json:"amount"`
	Price     string  `json:"price"`
	UnitPrice float64 `json:"unitPrice"`
}

func main() {
	f, err := os.Open("j.json")
	if err != nil {
		fmt.Printf("文件读取失败: %v", err.Error())
	}
	body, err := ioutil.ReadAll(f)
	m := make(map[string]J)
	err = json.Unmarshal(body, &m)
	if err != nil {
		fmt.Printf("Unmarshal with error: %+v\n", err)
	}
	i := 1

	xlsx := excelize.NewFile()
	index := xlsx.NewSheet("demo")

	for k, v := range m {
		xlsx.SetCellStr("demo", "A"+strconv.Itoa(i), k)
		xlsx.SetCellStr("demo", "B"+strconv.Itoa(i), v.Name)
		xlsx.SetCellValue("demo", "C"+strconv.Itoa(i), v.Amount)
		xlsx.SetCellStr("demo", "D"+strconv.Itoa(i), v.Price)
		xlsx.SetCellValue("demo", "E"+strconv.Itoa(i), v.UnitPrice)
		i += 1
	}
	sumCell := "SUM(C1:C" + strconv.Itoa(i-1) + ")"
	xlsx.SetCellFormula("demo", "C"+strconv.Itoa(i), sumCell) // 计算基金投入总金额

	// 计算基金份额投入占比
	for n := 1; n < i; n++ {
		format := "C" + strconv.Itoa(n) + "/" + "$C$" + strconv.Itoa(i)
		xlsx.SetCellFormula("demo", "F"+strconv.Itoa(n),format)
	}
	xlsx.SetActiveSheet(index)
	if err := xlsx.SaveAs("demo.xlsx"); err != nil {
		fmt.Println(err)
	}
	fmt.Println("输出完成...")
}

最后执行一下

go run jsontoexcel.go
输出完成...

最后查看一下输出的demo.xlsx文件

写在最后

网上有一个详细介绍excelize使用的中文文档,写的挺好的,对于操作excel的基本操作都有说明,这里分享一下:

地址为: https://www.bookstack.cn/books/excelize-v2.0

对于一些函数使用不确定的,也可以通过github上源代码的测试文件中查看相关的案例,

好了,就写到这里了…

0

评论区