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

场景描述:在学校统计核酸人数时,需要把多个班级中符合条件的数据汇总到一张表中,如果每个都打开复制粘贴一遍,费时费力。所以可以用编程实现减少操作量
思路:读取文件夹中的excel文件,并按名称排序,然后根据条件,把筛选出的数据汇总到一个表中。
采用go+excelize
目录结构如下

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
}