Blogger Information
Blog 2
fans 1
comment 0
visits 2407
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
Excelize - Go 语言 (golang) Excel 文档基础库
xuri
Original
2161 people have browsed it

Excelize Go 语言 Excel 文档类库

Excelize 是 Go 语言 (golang) 编写的一个用来操作 Office Excel 电子表格文档基础库,基于 ECMA-376 Office OpenXML 标准。可以使用它来读取、写入 XLSX 文件。相比较其他的开源类库,Excelize 支持写入原本带有图片(表)的文档,还支持向 Excel 中插入图片,并且在保存后不会丢失图表样式。

开源代码

GitHub: github.com/xuri/excelize
官方文档: xuri.me/excelize

安装

  1. go get github.com/360EntSecGroup-Skylar/excelize

创建 XLSX

  1. package main
  2. import "github.com/360EntSecGroup-Skylar/excelize"
  3. func main() {
  4. f := excelize.NewFile()
  5. // 创建一个工作表
  6. index := f.NewSheet("Sheet2")
  7. // 设置单元格的值
  8. f.SetCellValue("Sheet2", "A2", "Hello world.")
  9. f.SetCellValue("Sheet1", "B2", 100)
  10. // 设置工作簿的默认工作表
  11. f.SetActiveSheet(index)
  12. // 根据指定路径保存文件
  13. if err := f.SaveAs("Book1.xlsx"); err != nil {
  14. println(err.Error())
  15. }
  16. }

读写已有文档

  1. package main
  2. import "github.com/360EntSecGroup-Skylar/excelize"
  3. func main() {
  4. f, err := excelize.OpenFile("Book1.xlsx")
  5. if err != nil {
  6. println(err.Error())
  7. return
  8. }
  9. // 获取工作表中指定单元格的值
  10. cell, err := f.GetCellValue("Sheet1", "B2")
  11. if err != nil {
  12. println(err.Error())
  13. return
  14. }
  15. println(cell)
  16. // 获取 Sheet1 上所有单元格
  17. rows, err := f.GetRows("Sheet1")
  18. for _, row := range rows {
  19. for _, colCell := range row {
  20. print(colCell, "\t")
  21. }
  22. println()
  23. }
  24. }

向 Excel 中插入图表

Excelize

  1. package main
  2. import "github.com/360EntSecGroup-Skylar/excelize"
  3. func main() {
  4. categories := map[string]string{"A2": "Small", "A3": "Normal", "A4": "Large", "B1": "Apple", "C1": "Orange", "D1": "Pear"}
  5. values := map[string]int{"B2": 2, "C2": 3, "D2": 3, "B3": 5, "C3": 2, "D3": 4, "B4": 6, "C4": 7, "D4": 8}
  6. f := excelize.NewFile()
  7. for k, v := range categories {
  8. f.SetCellValue("Sheet1", k, v)
  9. }
  10. for k, v := range values {
  11. f.SetCellValue("Sheet1", k, v)
  12. }
  13. 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 {
  14. println(err.Error())
  15. return
  16. }
  17. // 根据指定路径保存文件
  18. if err := f.SaveAs("Book1.xlsx"); err != nil {
  19. println(err.Error())
  20. }
  21. }

向 Excel 中插入图片

  1. package main
  2. import (
  3. _ "image/gif"
  4. _ "image/jpeg"
  5. _ "image/png"
  6. "github.com/360EntSecGroup-Skylar/excelize"
  7. )
  8. func main() {
  9. f, err := excelize.OpenFile("Book1.xlsx")
  10. if err != nil {
  11. println(err.Error())
  12. return
  13. }
  14. // 插入图片
  15. if err := f.AddPicture("Sheet1", "A2", "image.png", ""); err != nil {
  16. println(err.Error())
  17. }
  18. // 在工作表中插入图片,并设置图片的缩放比例
  19. if err := f.AddPicture("Sheet1", "D2", "image.jpg", `{"x_scale": 0.5, "y_scale": 0.5}`); err != nil {
  20. println(err.Error())
  21. }
  22. // 在工作表中插入图片,并设置图片的打印属性
  23. 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 {
  24. println(err.Error())
  25. }
  26. // 保存文件
  27. if err = f.Save(); err != nil {
  28. println(err.Error())
  29. }
  30. }

还有其他一些功能,在这里就不一一列举了,详细使用文档以及获取后期的维护更新可以从项目的主页获取

github.com/360EntSecGroup-Skylar/excelize

技术交流群

DingTalk Group ID: 30047129
QQ Group ID: 207895940

Excel 技术交流群

Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post