经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Go语言 » 查看文章
Golang 模块引入及表格读写业务快速实现示例
来源:jb51  时间:2022/7/25 19:15:52  对本文有异议

介绍

在很多管理系统下都有不少让后端进行表格进行操作的业务需求,本期就带大家了解一下Golang中如何使用模块引入的,以及讲解怎么快速的使用excelize库,对表格进行读写创建的。

正文

配置模块引入环境

我们在期望在vscode终端中也可以使用模块引入,它是 Go 1.11后新版模块管理方式。

  1. go env -w GO111MODULE=auto

GO111MODULE 可以传递:

  • auto:在其外层且根目录里有 go.mod 文件时,则开启模块支持,否者无模块支持。
  • on:开启模块支持。
  • off:无模块支持。

然后,初始化这个项目,就会生成一个 go.mod 文件。

  1. go mod init excel-demo

 go.mod 是Go 1.11版本引入的官方的包管理工具(之前为 gopath 来管理),它可以理解为前端开发中的 npm 的作用,主要是为了解决没有记录依赖包具体版本查阅困难的问题,也极大程度上方便了依赖包的管理。

引入excelize库

excelize 是一个用于读写 Microsoft Excel™2007 及更高版本生成的电子表格文档(XLAM / XLSM / XLSX / XLTM / XLTX)的 Go 语言库,而且更新维护频繁且非常好用。

引入excelize

  1. go get github.com/xuri/excelize/v2

这里因为站点是国外的所以经常会因无法访问而超时。此时,不要慌,我们换一个国内的代理就好了。

  1. go env -w GOPROXY=https://goproxy.cn

创建表格

  1. package main
  2. import (
  3. "fmt"
  4. "github.com/xuri/excelize/v2"
  5. )
  6. func createExcel(){
  7. // 创建表格文件
  8. f := excelize.NewFile()
  9. // 在Sheet1设置A1项的值
  10. f.SetCellValue("Sheet1", "A1", "这是Sheet1的A1项")
  11. // 创建新的Sheet,命名为Sheet2
  12. selectIndex := f.NewSheet("Sheet2")
  13. // 在Sheet2设置B2项的值
  14. f.SetCellValue("Sheet2", "B2", "这是Sheet2的B2项")
  15. // 切换到Sheet2
  16. f.SetActiveSheet(selectIndex)
  17. // 保存文件
  18. if err := f.SaveAs("test.xlsx"); err != nil {
  19. fmt.Println(err)
  20. }
  21. }
  22. func main() {
  23. // 执行创建表格
  24. createExcel()
  25. }

按照以上是创建文件并在列上随便写入一些数据然后保存下来,非常的简单,现在我们来执行一下,就会发现当前目录会多出一个text.xlsx文件,没错,这就是我们刚才生成出来的表格文件,打开它就可以看到我们刚才写入的一些内容了。

读取表格

  1. func openExcel(){
  2. // 读取test.xlsx表格文件
  3. f, err := excelize.OpenFile("test.xlsx")
  4. if err != nil {
  5. fmt.Println(err)
  6. return
  7. }
  8. // 获取Sheet2的B2项的值
  9. cell, err := f.GetCellValue("Sheet2", "B2")
  10. if err != nil {
  11. fmt.Println(err)
  12. return
  13. }
  14. fmt.Println(cell)
  15. fmt.Println("---------------")
  16. // 获取Sheet1所有的项
  17. rows, err := f.GetRows("Sheet1")
  18. if err != nil {
  19. fmt.Println(err)
  20. return
  21. }
  22. // 遍历Sheet1所有的项并打印出来
  23. for _, row := range rows {
  24. for _, colCell := range row {
  25. fmt.Print(colCell, "\t")
  26. }
  27. fmt.Println()
  28. }
  29. }

上面做的操作是把我们刚才保存好的表格文件的内容读取出来,这里分了两种形式,一种是用 GetCellValue 方法读取某个sheet的某一项,另一种是用 GetRows 对获取整个sheet的项,然后for循环遍历出来。

写入表格

刚刚在创建的时候其实已经使用 SetCellValue 方法对表格的写入操作,但这还远远不够,因为还有很多东西我们可以写入进去,比如说图表和图片甚至是其他表格文件。图表这里先简单说明一下,它用了 AddChart 方法也是对某一项进行操作,插入相关数据进去,形式如下(详见文档):

  1. if err := f.AddChart("Sheet1", "E1", `{
  2. "type": "col3DClustered",
  3. "series": [
  4. {
  5. "name": "Sheet1!$A$2",
  6. "categories": "Sheet1!$B$1:$D$1",
  7. "values": "Sheet1!$B$2:$D$2"
  8. }]
  9. }`); err != nil {
  10. fmt.Println(err)
  11. return
  12. }

接下来,我们主要讲一下图片是如何写入进表格的,首先,我们先准备一张图片,就放在assets目录吧,然后在到 import 中导入jpeg和png,目的是明确后面要解析的图片(目前可以解析出jpeg,jpg,png格式的图片了),如果不写或者格式不对则会出现 image: unknown format 的提示。

  1. package main
  2. import (
  3. "fmt"
  4. _ "image/jpeg"
  5. _ "image/png"
  6. "github.com/xuri/excelize/v2"
  7. )

然后我们还是要读取一下刚刚生成出来的test.xlsx表格文件,再把图片写入进去。

  1. func setPic(){
  2. f, err := excelize.OpenFile("test.xlsx")
  3. if err != nil {
  4. fmt.Println(err)
  5. return
  6. }
  7. // 导入并设置图片
  8. if err := f.AddPicture("Sheet2", "C3", "assets/anya.png",
  9. `{
  10. "x_offset": 10,
  11. "y_offset": 10,
  12. "x_scale": 0.8,
  13. "y_scale": 0.8
  14. }`); err != nil {
  15. fmt.Println(err)
  16. }
  17. // 保存刚才的操作
  18. if err = f.Save(); err != nil {
  19. fmt.Println(err)
  20. }
  21. }

而且图片还可以这是位置,大小等参数,但这里一定要记住不管添加了什么最后一定要保存一下,不然就是一场空。最后么,一个小阿尼亚就写入到了表格中啦~

结语

本篇主要是带大家简单了解怎么使用excelize库对表格进行操作,其实都还是皮毛,它的功能比你想的还要强大,详细的可以看 官方文档 ,算是一个非常实用的工具库了,更多关于Go模块引入表格读写的资料请关注w3xue其它相关文章!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号