go语言excel导入导出 (go语言读取excel表格)

坚持每日一读一练。不为其它,只为督促和鞭策自己,不断保持谦虚谨慎之心,敬畏世界之大,敬畏知识之日新月异,避免靠老经验固步自封盲目自大,力争活到老学到老。

go语言实现大excel导入,go语言分组导出数据到excel

场景描述:在学校统计核酸人数时,需要把多个班级中符合条件的数据汇总到一张表中,如果每个都打开复制粘贴一遍,费时费力。所以可以用编程实现减少操作量

思路:读取文件夹中的excel文件,并按名称排序,然后根据条件,把筛选出的数据汇总到一个表中。

采用go+excelize

目录结构如下

go语言实现大excel导入,go语言分组导出数据到excel

func main() { // main函数,是程序执行的入口
	fmt.Println("wcy 的小程序") // 在终端打印
	var ClassList []Class = InitClass()
	var relativePath string = "./excel"
	var result []Class
	//读出相对路径下的文件列表
	pathList, _ := ReadFiles(relativePath)
	// 获取班级数据结构体
	result, _ = GetClassRelativePath(ClassList, pathList)
	// 读取每个文件中的数据中"未返庆家庭成员"sheet页数据,将数据存入多维数组
	var tempList [][]string
	for i := 0; i < len(result); i++ {
		if result[i].RelativePath != "" {
			var temp = GetExcelDate(result[i].RelativePath, "未返庆家庭成员")
			tempList = append(tempList, temp...)
		}
	}
	fmt.Printf(" 查询出的数据:%v\n", tempList)
	// 导出一张整表
	SaveToExcel(tempList, "未返庆家庭成员")
}

相关的函数

// 读取文件名信息
func ReadFiles(relativePath string) (pathList []string, err error) {
	if relativePath == "" {
		return nil, errors.New("目录为空")
	}
	var List []string
	var FileInfo []os.FileInfo

	if FileInfo, err = ioutil.ReadDir(relativePath); err != nil {
		fmt.Println("读取  文件夹出错")
		return nil, errors.New("读取  文件夹出错")
	}

	for _, fileInfo := range FileInfo {
		// fmt.Println(fileInfo.Name())
		// //获取文件后缀
		fileSuffix := path.Ext(fileInfo.Name())
		// fmt.Println("fileSuffix =", fileSuffix)

		// //获取文件名
		// filenameOnly := strings.TrimSuffix(fileInfo.Name(), fileSuffix)
		// fmt.Println("filenameOnly =", filenameOnly)
		if fileSuffix == ".xlsx" {
			List = append(List, fileInfo.Name())
		}

	}
	// fmt.Println(List)
	return List, nil
}

type Class struct {
	Id           int    `json:"id"`
	Name         string `json:"name"`
	RelativePath string `json:"relativePath"`
}

// 初始化班级列表
func InitClass() (list []Class) {
	name := [15]string{"一", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一", "十二", "十三", "十四", "十五"}
	var s []Class
	var class Class
	for i := 1; i <= 15; i++ {
		class = Class{
			Id:           i,
			Name:         "高一" + name[i-1] + "班",
			RelativePath: "",
		}
		s = append(s, class)
	}
	return s
}