栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

Golang操作Excel的模块Excelize学习总结-流式写入

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Golang操作Excel的模块Excelize学习总结-流式写入

流式写入
  • 创建一个流式的写入器
    func (f *File) NewStreamWriter(sheet string) (*StreamWriter, error)

  • 按行写入
    func (sw *StreamWriter) SetRow(axis string, values []interface{}, opts ...RowOpts) error

  • 添加表格
    func (*excelize.StreamWriter).AddTable(hcell string, vcell string, format string) error

  • 合并单元格
    func (*excelize.StreamWriter).MergeCell(hcell string, vcell string) error

  • 结束流式写入
    func (*excelize.StreamWriter).Flush() error

  • 设置列宽
    func (*excelize.StreamWriter).SetColWidth(min int, max int, width float64) error

流式写入 和 普通写入的区别
流式写入整行 数据 func (sw *StreamWriter) SetRow(axis string, values []interface{}, opts ...RowOpts) error
参数 values 可以是只有值的 切片,也可以是 excelize.Cell 结构体类型的切片
普通写入整行 func (*excelize.File).SetSheetRow(sheet string, axis string, slice interface{}) error
参数只能是值类型的切片,如果是结构体类型的,就会按打印的方式赋值给单元格
流式写入 添加表格时,如果第三个参数为空,就不会创建表格
普通的创建表格,如果第三个参数是空,只会在第一行添加上筛选

示例文件 main.go

package main

import (
	"fmt"
	"math/rand"

	"github.com/bxcodec/faker/v3"
	"github.com/xuri/excelize/v2"
)

func main() {
	wb := excelize.NewFile()
	wb.Path = "../excel_files/TMP_07.xlsx"

	sheetName := wb.GetSheetName(wb.GetActiveSheetIndex())
	// 生成流写入对象
	streamSheet, err := wb.NewStreamWriter(sheetName)
	if err != nil {
		fmt.Println(err)
	}
	// 设置一整行的值   只有值
	// 先构造数据
	// 姓名  年龄  性别  工资
	// 使用faker 模块构造测试数据
	for i := 0; i < 10; i++ { // 行
		var row = make([]interface{}, 4)
		row[0] = faker.Name()
		row[1] = rand.Intn(100)
		row[2] = faker.Gender()
		row[3] = rand.Intn(10000) / 100

		streamSheet.SetRow(fmt.Sprintf("A%d", i), row)
	}

	// 值 + 样式
	// 先定义样式
	sty_idx1, err := wb.NewStyle(`{"alignment":{
		"horizontal":"center",
		"vertical":"center"
	},"number_format":0
	,"fill":{
		"type":"pattern",
		"color":["#FF00FF"],
		"pattern":1
	}}`)
	if err != nil {
		fmt.Println(err)
	}

	sty_idx2, _ := wb.NewStyle(`{"alignment":{
		"horizontal":"center",
		"vertical":"center"
	},"number_format":1}`)

	sty_idx3, _ := wb.NewStyle(`{"alignment":{
		"horizontal":"center",
		"vertical":"center"
	},"number_format":2}`)

	// 直接用excelize.Cell 结构体创建单元格,然后添加
	for i := 0; i < 10; i++ { // 行
		var row = make([]interface{}, 4)
		row[0] = excelize.Cell{StyleID: sty_idx1, Value: faker.Name()}
		row[1] = excelize.Cell{StyleID: sty_idx2, Value: rand.Intn(100)}
		row[2] = excelize.Cell{StyleID: sty_idx1, Value: faker.Gender()}
		row[3] = excelize.Cell{StyleID: sty_idx3, Value: rand.Intn(10000) / 100}

		streamSheet.SetRow(fmt.Sprintf("A%d", i+15), row)
	}
	// 流式添加表格  好像没有作用
	if err := streamSheet.AddTable("A1", "D10", ``); err != nil {
		fmt.Println(err)
	}
	// 带样式的
	if err := streamSheet.AddTable("AA1", "Ak6", `{
		"table_name":"table",
		"table_style":"TableStyleMedium3",
		"show_row_stripes":true
	}`); err != nil {
		fmt.Println(err)
	}
	// 设置列宽
	if err := streamSheet.SetColWidth(1, 4, 18); err != nil {
		fmt.Println(err)
	}

	// 合并单元格
	if err := streamSheet.MergeCell("F1", "F10"); err != nil {
		fmt.Println(err)
	}

	// 执行了 flush 才算是写进去了
	streamSheet.Flush()

	// 非流式写入整行数据
	// 构造数据
	sheet_idx := wb.NewSheet("Sheet2")
	sheetName2 := wb.GetSheetName(sheet_idx)
	// 先设置表头  最后一个参数是指针
	if err := wb.SetSheetRow(sheetName2, "A1", &[]string{"NAME", "AGE", "GENDER", "PRICE"}); err != nil {
		fmt.Println(err)
	}
	if err := wb.SetSheetRow(sheetName2, "A2", &[]string{"姓名", "年龄", "性别", "工资"}); err != nil {
		fmt.Println(err)
	}
	// 构造数据并整行插入数据  不支持excelize.Cell对象的方式
	for i := 0; i < 10; i++ {
		var row = make([]interface{}, 4)
		for j := 0; j < len(row); j++ {
			switch j {
			case 0:
				row[j] = faker.Name()
			case 1:
				row[j] = rand.Intn(100)
			case 2:
				row[j] = faker.Gender()
			case 3:
				row[j] = rand.Intn(10000) / 100
			}
		}
		if err := wb.SetSheetRow(sheetName2, fmt.Sprintf("A%d", i+3), &row); err != nil {
			fmt.Println(err)
		}
	}

	wb.Save()
}

更多内容去到大佬的文档或者视频
作者大佬的文档 : https://xuri.me/excelize/zh-hans/
作者大佬的视频 : https://www.bilibili.com/video/BV1hU4y1F7wQ

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/907057.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号