ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1365|回复: 1

[分享] Excelize - 使用 Go 语言生成 Excel 文档

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-12-5 11:30 | 显示全部楼层 |阅读模式
本帖最后由 xurime 于 2019-12-6 12:49 编辑


分享一个 Go 语言 Excel 文档基础库,希望帮助到有需要的朋友。

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

  • 源代码:github.com/360EntSecGroup-Skylar/excelize
  • 中文文档:https://xuri.me/excelize/zh-hans

创建 Excel 文档

下面是一个创建 Excel 文档的简单例子:
  1. package main

  2. import (
  3.     "fmt"

  4.     "github.com/360EntSecGroup-Skylar/excelize"
  5. )

  6. func main() {
  7.     f := excelize.NewFile()
  8.     // 创建一个工作表
  9.     index := f.NewSheet("Sheet2")
  10.     // 设置单元格的值
  11.     f.SetCellValue("Sheet2", "A2", "Hello world.")
  12.     f.SetCellValue("Sheet1", "B2", 100)
  13.     // 设置工作簿的默认工作表
  14.     f.SetActiveSheet(index)
  15.     // 根据指定路径保存文件
  16.     err := f.SaveAs("./Book1.xlsx")
  17.     if err != nil {
  18.         fmt.Println(err)
  19.     }
  20. }
复制代码

读取 Excel 文档

下面是读取 Excel 文档的例子:
  1. package main

  2. import (
  3.     "fmt"

  4.     "github.com/360EntSecGroup-Skylar/excelize"
  5. )

  6. func main() {
  7.     f, err := excelize.OpenFile("./Book1.xlsx")
  8.     if err != nil {
  9.         fmt.Println(err)
  10.         return
  11.     }
  12.     // 获取工作表中指定单元格的值
  13.     cell, err := f.GetCellValue("Sheet1", "B2")
  14.     if err != nil {
  15.         fmt.Println(err)
  16.         return
  17.     }
  18.     fmt.Println(cell)
  19.     // 获取 Sheet1 上所有单元格
  20.     rows, err := f.GetRows("Sheet1")
  21.     for _, row := range rows {
  22.         for _, colCell := range row {
  23.             fmt.Print(colCell, "\t")
  24.         }
  25.         fmt.Println()
  26.     }
  27. }
复制代码

在 Excel 文档中创建图表
使用 Excelize 生成图表十分简单,仅需几行代码。您可以根据工作表中的已有数据构建图表,或向工作表中添加数据并创建图表。
  1. package main

  2. import (
  3.     "fmt"

  4.     "github.com/360EntSecGroup-Skylar/excelize"
  5. )

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

向 Excel 文档中插入图片

  1. package main

  2. import (
  3.     "fmt"
  4.     _ "image/gif"
  5.     _ "image/jpeg"
  6.     _ "image/png"

  7.     "github.com/360EntSecGroup-Skylar/excelize"
  8. )

  9. func main() {
  10.     f, err := excelize.OpenFile("./Book1.xlsx")
  11.     if err != nil {
  12.         fmt.Println(err)
  13.         return
  14.     }
  15.     // 插入图片
  16.     err = f.AddPicture("Sheet1", "A2", "./image1.png", "")
  17.     if err != nil {
  18.         fmt.Println(err)
  19.     }
  20.     // 在工作表中插入图片,并设置图片的缩放比例
  21.     err = f.AddPicture("Sheet1", "D2", "./image2.jpg", `{"x_scale": 0.5, "y_scale": 0.5}`)
  22.     if err != nil {
  23.         fmt.Println(err)
  24.     }
  25.     // 在工作表中插入图片,并设置图片的打印属性
  26.     err = f.AddPicture("Sheet1", "H2", "./image3.gif", `{"x_offset": 15, "y_offset": 10, "print_obj": true, "lock_aspect_ratio": false, "locked": false}`)
  27.     if err != nil {
  28.         fmt.Println(err)
  29.     }
  30.     // 保存文件
  31.     err = f.Save()
  32.     if err != nil {
  33.         fmt.Println(err)
  34.     }
  35. }
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-12-5 15:31 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
不错,go语言还不太有人用
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-27 12:15 , Processed in 0.035940 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表