go中Excelize处理excel表实现带数据校验的文件导出

 更新时间:2023年06月25日 09:36:17   作者:微雨停了  
本文主要介绍了go中Excelize处理excel表实现带数据校验的文件导出,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

1 Excelize介绍

Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库。官方文档:https://xuri.me/excelize/zh-hans/

引入方法

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

2 相关需求与实现

2.1 数据的excel文件导出

需求:入参是一个map,其键是每个sheet页的名字,其值是一个二维切片。在每个sheet页中依次写入切片中的数据。返回文件名和错误信息。

代码:

// 写入数据到export/*.xlsx
// datas: map[sheet]每个sheet页的数据
// return: 文件名, error
func WriteExcel(datas map[string][][]string) (string, error) {
	file := excelize.NewFile()
	for sheetName, data := range datas {
		index, _ := file.NewSheet(sheetName)
		for i, row := range data {
			for j, val := range row {
				// 列行数字索引转excel坐标索引
				cellName, _ := excelize.CoordinatesToCellName(j+1, i+1)
				//fmt.Println("cellName:", cellName)
				// 设置,写入
				file.SetCellValue(sheetName, cellName, val)
			}
		}
		// 创建表格
		file.SetActiveSheet(index)
	}
	filename := "aaa" + ".xlsx"
	_, err := os.ReadDir("aaa/")
	if err != nil {
		// 不存在就创建
		err = os.MkdirAll("aaa/", fs.ModePerm)
		if err != nil {
			fmt.Println(err)
		}
	}
	// 删除默认工作表
	file.DeleteSheet("Sheet1")
	err = file.SaveAs("aaa/" + filename)
	if err != nil {
		return "", err
	}
	return filename, nil
}
func main() {
	datas := make(map[string][][]string)
	datas["xxx"] = [][]string{{"A1", "B1", "C1", "d1", "E1", "G1", "H1", "I1"}, {"A2", "B2", "C2"}, {"A3", "B3", "C3"}}
	datas["yyy"] = [][]string{{"X1", "Y1", "Z1"}, {"X2", "Y2", "Z2"}, {"X3", "Y3", "Z3"}}
	fileName, err := WriteExcel(datas)
	if err != nil {
		fmt.Println("Write excel error: ", err)
		return
	}
	fmt.Println("Write excel success, file name is: ", fileName)

输出文件:

2.2 带数据校验的excel文件导出

需求:入参是一个map,其键是每个sheet页的名字,其值是一个二维切片。在每个sheet页中依次写入切片中的数据。返回文件名和错误信息。数据校验:A列只能输入a,aa,aaa,aaaa;B列只能输入b,bb;C列只能输入c,cc,ccc。

代码:

func WriteExcelValidation(datas map[string][][]string, validations map[string][]string) (string, error) {
	file := excelize.NewFile()
	for sheetName, data := range datas {
		// 创建sheet
		index, _ := file.NewSheet(sheetName)
		// 有效性校验
		for col, validation := range validations {
			dv := excelize.NewDataValidation(true)
			dv.SetSqref(col + "2:" + col + "1048576")
			err := dv.SetDropList(validation)
			if err != nil {
				return "", err
			}
			file.AddDataValidation(sheetName, dv)
		}
		for i, row := range data {
			for j, val := range row {
				// 列行数字索引转excel坐标索引
				cellName, _ := excelize.CoordinatesToCellName(j+1, i+1)
				// 设置,写入
				file.SetCellValue(sheetName, cellName, val)
			}
		}
		// 创建表格
		file.SetActiveSheet(index)
	}
	filename := "bbb" + ".xlsx"
	// 创建目录
	_, err := os.ReadDir("aaa/")
	if err != nil {
		// 不存在就创建
		err = os.MkdirAll("aaa/", fs.ModePerm)
		if err != nil {
			return "", err
		}
	}
	file.DeleteSheet("Sheet1")
	err = file.SaveAs("aaa/" + filename)
	if err != nil {
		return "", err
	}
	return filename, nil
}
func main() {
	validations := make(map[string][]string)
	validations["A"] = []string{"a", "aa", "aaa", "aaaa"}
	validations["B"] = []string{"b", "bb"}
	validations["E"] = []string{"c", "cc", "ccc"}
	datas := make(map[string][][]string)
	datas["xxx"] = [][]string{{"A1", "B1", "C1", "d1", "E1", "G1", "H1", "I1"}, {"A2", "B2", "C2"}, {"A3", "B3", "C3"}}
	datas["yyy"] = [][]string{{"X1", "Y1", "Z1"}, {"X2", "Y2", "Z2"}, {"X3", "Y3", "Z3"}}
	fileName, err := WriteExcelValidation(datas, validations)
	if err != nil {
		fmt.Println("Write excel error: ", err)
		return
	}
	fmt.Println("Write excel success, file name is: ", fileName)
}

输出文件:

 到此这篇关于go中Excelize处理excel表实现带数据校验的文件导出的文章就介绍到这了,更多相关go Excelize excel导出内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Go之interface的具体使用

    Go之interface的具体使用

    这篇文章主要介绍了Go之interface的具体使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • golang实现简单rpc调用过程解析

    golang实现简单rpc调用过程解析

    这篇文章主要介绍了golang实现简单rpc调用,包括RPC具体实现结合实例代码给大家讲解的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • Go微服务项目配置文件的定义和读取示例详解

    Go微服务项目配置文件的定义和读取示例详解

    这篇文章主要为大家介绍了Go微服务项目配置文件的定义和读取示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • golang语言编码规范的实现

    golang语言编码规范的实现

    这篇文章主要介绍了golang语言编码规范的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • Go语言简介和环境配置

    Go语言简介和环境配置

    Go语言保证了既能到达静态编译语言的安全和性能,又达到了动态语言开发速度和易维护性,有人形容Go语言:Go= C + Python , 说明Go语言既有C静态语言程序的运行速度,又能达到Python动态语言的快速开发,这篇文章主要介绍了Go介绍和环境配置,需要的朋友可以参考下
    2022-07-07
  • 浅析golang github.com/spf13/cast 库识别不了自定义数据类型

    浅析golang github.com/spf13/cast 库识别不了自定义数据类型

    这篇文章主要介绍了golang github.com/spf13/cast库识别不了自定义数据类型,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-08-08
  • Golang操作excel的方法

    Golang操作excel的方法

    这篇文章主要介绍了Golang操作excel的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • 文字解说Golang Goroutine和线程的区别

    文字解说Golang Goroutine和线程的区别

    goroutine 是 Go语言中的轻量级线程实现,由 Go 运行时(runtime)管理,使用每一个 go 关键字将会额外开启一个新的协程 goroutine,今天通过本文给大家介绍下Golang Goroutine和线程的区别,感兴趣的朋友一起看看吧
    2022-03-03
  • golang给函数参数设置默认值的几种方式小结(函数参数默认值

    golang给函数参数设置默认值的几种方式小结(函数参数默认值

    在日常开发中我们有时候需要使用默认设置,下面这篇文章主要给大家介绍了关于golang给函数参数设置默认值的几种方式小结的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-01-01
  • Go Slice进行参数传递如何实现详解

    Go Slice进行参数传递如何实现详解

    这篇文章主要为大家介绍了Go Slice进行参数传递如何实现的过程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12

最新评论