先给大家看下我们今天的主角:一只可爱的囊地鼠正在准备食用Excel~

GitHub链接:https://github.com/qax-os/excelize

Excelize是一个用纯Go语言编写的库,提供了一组函数,可以对XLAM / XLSM / XLSX / XLTM / XLTX文件进行读写。支持读写由Microsoft Excel™2007及以后版本生成的电子表格文档。通过高兼容性支持复杂组件,并提供流API从具有大量数据的工作表中生成或读取数据。该库需要Go 1.16或更高版本

那么本篇文章将会介绍我们操作Excel的常用功能,如下:

  • 生成一个新的Excel文件
  • 向Excel文件中追加内容
  • 解析Excel文件内容
  • 使用Http协议上传并解析Excel文件
  • 使用Http协议将数据转换为Excel文件并下载

1 下载依赖库

go get github.com/xuri/excelize# Go Modules使用这个命令
go get github.com/xuri/excelize/v2

2 具体操作

2.1 生成一个新的Excel文件

func WriteNewExcel() {f := excelize.NewFile()// 创建一个sheetindex := f.NewSheet("Sheet2")// 根据sheet和坐标 确定一个值// 例如f.SetCellValue("Sheet2", "A2", "Hello world.")就是在Sheet表中A列第2行的格子里填入Hello world.f.SetCellValue("Sheet2", "A2", "Hello world.")f.SetCellValue("Sheet1", "B1", 100)f.SetCellValue("Sheet1", "B2", 100)// 将新的sheet添加到Excel中f.SetActiveSheet(index)// 保存Excelif err := f.SaveAs("Book1.xlsx"); err != nil {fmt.Println(err)}
}

2.2 向Excel文件中追加内容

func WriteExcel() {f, _ := excelize.OpenFile("Book1.xlsx")index := f.NewSheet("Sheet2")f.SetCellValue("Sheet2", "A2", "Hello world.")f.SetCellValue("Sheet1", "B1", 100)f.SetCellValue("Sheet1", "B2", 100)f.SetActiveSheet(index)if err := f.SaveAs("Book1.xlsx"); err != nil {fmt.Println(err)}
}

2.3 解析Excel文件内容

func ReadExcel() {f, err := excelize.OpenFile("Book1.xlsx")if err != nil {fmt.Println(err)return}defer func() {if err := f.Close(); err != nil {fmt.Println(err)}}()// 根据sheet和坐标读取某一个格子的值cell, err := f.GetCellValue("Sheet1", "B2")if err != nil {fmt.Println(err)return}fmt.Println(cell)// 按行读取全部rows, err := f.GetRows("Sheet1")if err != nil {fmt.Println(err)return}for _, row := range rows {for _, colCell := range row {fmt.Print(colCell, "\t")}fmt.Println()}
}

2.4 使用Http协议上传并解析Excel文件

func HttpReadExcel() {f := func(read io.Reader) {file, err := excelize.OpenReader(read)if err != nil {fmt.Println(err)return}for _, item := range file.GetSheetList() {rows, _ := file.GetRows(item)// rows是一个二维数组for i := range rows {strs := rows[i]for j := range strs {str := rows[i][j]fmt.Println(str)}}}}http.HandleFunc("/excel", func(w http.ResponseWriter, r *http.Request) {file, _, err := r.FormFile("file")if err != nil {fmt.Println(err)return}fileBytes, err := ioutil.ReadAll(file)if err != nil {fmt.Println(err)return}reader := bytes.NewReader(fileBytes)f(reader)w.Write([]byte("Hello Http Get!"))})http.ListenAndServe(":8080", nil)
}

2.5 使用Http协议将数据转换为Excel文件并下载

func HttpDownloadExcel() {fun := func(fileName string) *bytes.Reader {f := excelize.NewFile()f.SetCellValue("Sheet1", "B1", 100)err := f.SaveAs(fileName)if err != nil {fmt.Println(err)}var buffer bytes.Buffer_ = f.Write(&buffer)return bytes.NewReader(buffer.Bytes())}http.HandleFunc("/downloadExcel", func(w http.ResponseWriter, r *http.Request) {reader := fun("Book2.xlsx")// 重新设置文件名称w.Header().Set("Content-Disposition", "attachment; filename="+"Book2.xlsx")io.Copy(w, reader)})http.ListenAndServe(":8080", nil)
}

3 小总结

以上功能只需灵活扩展后基本上就可以覆盖大部分业务了,但是有一点需要注意,在2.5使用Http协议将数据转换为Excel文件并下载这个操作中,需要将文件进行重命名,这个名称可以自定义,也可以由服务端指定,但是需要以相关文件类型的名称做后缀,否则会输出zip压缩文件,很难看懂。

今天的分享就到这里~

一文搞懂Go读写Excel文件相关推荐

  1. 一文搞定Qt读写excel以及qt读写xml数据

    一文搞定Qt读写excel以及qt读写xml数据 最终的实现效果图 RC_ICONS = logo.ico .pro文件同级目录下加入 logo.ico 图标文件,运行文件,文件的图标就被写入软件 u ...

  2. 一文搞懂linux的proc文件

    目录 proc文件夹是干嘛用? proc下都有什么系统信息? /proc/bus /proc/buddyinfo /proc/cgroups /proc/cmdline /proc/consoles ...

  3. 一文搞懂socket读写数据接口API

    对文件的读写操作read和write同样适用于socket.但是socket编程接口提供了专门的几个socket读写数据的接口. UDP数据读写函数 recvfrom(从另一个IP接收数据) ssiz ...

  4. 一文搞懂Linux下的文件的标准输入、标准输出、输出重定向问题

    Linux下一切皆文件,所谓的终端那个黑框也可以视为一个文件,在Linux驱动开发中各个设备也可以被认为是文件操作,所以文件的操作很重要.我们通常将键盘叫做标准输入设备.将显示器叫做标准输出设备,下面 ...

  5. python处理office文件的第三方库_Python读写Excel文件第三方库汇总,你想要的都在这儿!...

    Python Python开发 Python语言 Python读写Excel文件第三方库汇总,你想要的都在这儿! ---恢复内容开始--- 常见库简介 xlrd xlrd是一个从Excel文件读取数据 ...

  6. python怎么读excelsheet_python3 excle(python怎么读写excel文件)

    python读取已经打开的3个word和excle文件的路径 用 win32com 操控 word和Excel就可以实现 咋样把python写入excle中 # 需安装 xlrd-0.9.2 和 xl ...

  7. C++读写EXCEL文件方式比较 .

    C++读取Excel的XLS文件的方法有很多,但是也许就是因为方法太多,大家在选择的时候会很疑惑. 由于前两天要做导表工具,比较了常用的方法,总结一下写个短文, 1.OLE的方式 这个大约是最常用的方 ...

  8. 一文搞懂 Python 的 import 机制

    一.前言 希望能够让读者一文搞懂 Python 的 import 机制 1.什么是 import 机制? 通常来讲,在一段 Python 代码中去执行引用另一个模块中的代码,就需要使用 Python ...

  9. python语言语句快的标记是什么_一文搞懂Python程序语句

    原标题:一文搞懂Python程序语句 程序流 Python 程序中常用的基本数据类型,包括: 内置的数值数据类型 Tuple 容器类型 String 容器类型 List 容器类型 自然的顺序是从页面或 ...

最新文章

  1. ITSM四大管理工具的比较
  2. 阿里古谦:阿里互联网架构的6大最佳实践-博客-云栖社区-阿里云
  3. Redis : redis事务
  4. 基于Axis服务端的webservice客户端实现
  5. IBM AIX:Java进程大小监视
  6. eclipse物联网_Eclipse如何推动物联网发展
  7. 多人姿态识别框架——AlphaPose
  8. linux多线程学习(二)——线程的创建和退出
  9. linux cut 命令详解
  10. python 百度ai json解析_百度AI识别调用的简单例子
  11. httpd在嵌入式中应用
  12. w10用计算机卸载,win10电脑卸载系统内置应用软件的简单方法
  13. 企业信息化将推动企业组织结构和管理模式的变革
  14. jquery设置输入框为只读_文本框只读_jquery如何设置文本框只读
  15. 分享两个视频转场作品
  16. RFID标签的基础知识(3)--了解芯片(之超高频标签芯片篇)
  17. 千锋python培训班课程
  18. DFT的简单介绍(上)
  19. 计算机网络脆弱性评估方法研究
  20. 我的世界服务器地图文件丢失,我的世界地图被毁了或找不到了 ? 大神手把手教你奇迹恢复...

热门文章

  1. 千里之行始于足下——虚幻引擎学习之路(一)
  2. 网站建设说明书(不断具体中……)
  3. Flutter 1.12 最新 hotfix 与 2020 路线计划
  4. 263的EM-迈入统一通信
  5. webpack的css压缩不兼容IOS8问题探索
  6. 关于outlook2019/2016发送到outlook2010/2013的约会/日历中图片不显示的问题
  7. 2022考研复习第九周
  8. 语义分割-Unsupervised Domain Adaptation in Semantic Segmentation:a Review语义分割中的无监督领域自适应:综述
  9. 【免费毕设】JAVA局域网飞鸽传书软件设计与实现(源代码+论文)
  10. 阿里云轻量级应用服务器