一文搞懂Go读写Excel文件
2023-09-11 14:16:32 时间
先给大家看下我们今天的主角:一只可爱的囊地鼠正在准备食用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()
// 创建一个sheet
index := 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)
// 保存Excel
if 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压缩文件,很难看懂。
今天的分享就到这里~
相关文章
- html table表格导出excel的方法 html5 table导出Excel HTML用JS导出Excel的五种方法 html中table导出Excel 前端开发 将table内容导出到excel HTML table导出到Excel中的解决办法 js实现table导出Excel,保留table样式
- Go 数组模拟环形队列
- Go 语言范围(Range)
- Go学习入门
- go类型转换strconv详解
- Go程序设计语言2.1 名称
- Go: Custom Sort
- go build命令(go语言编译命令)完全攻略
- cmd/go: unsupported GOOS/GOARCH pair linux /amd64
- Go语言基本语法 (上)
- Excel VLOOKUP实用教程之 03 使用下拉列表作为查找值vlookup?(教程含数据excel)
- Excel VLOOKUP实用教程之 10 在使用 VLOOKUP 函数时处理错误?(教程含数据excel)
- Excel VLOOKUP实用教程之 09 VLOOKUP 与多个条件一起使用?(教程含数据excel)
- Excel VLOOKUP实用教程之 08 VLOOKUP如果实现区分大小写的查找?(教程含数据excel)
- Excel VLOOKUP实用教程之 07 vlookup如何解决肉眼看完全匹配,但是就是返回N/A错误(教程含数据excel)
- Excel VLOOKUP实用教程之 06 vlookup如何从使用通配符进行部分查找?(教程含数据excel)
- Python Excel自动化之 如何根据某一列快速对比两excel文件不同并输出不同内容
- Excel VLOOKUP实用教程之 06 vlookup如何从使用通配符进行部分查找?(教程含数据excel)
- Excel VLOOKUP实用教程之 04 vlookup如何实现三变量查找,三个条件字段查询数据?(教程含数据excel)
- Excel VLOOKUP实用教程之 10 在使用 VLOOKUP 函数时处理错误?(教程含数据excel)
- GO语言练习:struct基础练习
- 初识GO语言——安装Go语言
- 【答读者问】把Go基础学完后,是学web方向还是区块链方向?
- python openpyxl 操作excel xlrd.biffh.XLRDError: Excel xlsx file; not supported错误修改
- CAD表格怎么转换成Excel表格?CAD表格转EXCEL步骤
- ng : 无法加载文件 D:nodejsnode_globalng.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies。