Excel数据读写的简易封装
参考方案:《使用 Golang 创建和读取 Excel 文件(字节跳动技术团队)》
https://juejin.cn/post/7117578224854368263
go get -u github.com/melf-xyzh/go-excel
生成一个默认的Excel导入模板
// 创建一个excelConfig(每个Excel文件需要一个)
exTemp := extemplate.ExcelConfig{}
使用自定义配置生成Excel导入版本
exTemp2 := extemplate.ExcelConfig{
SheetName: "车辆导入模板", // 工作表名称
FileName: "车辆导入模板.xlsx", // 导出后的文件名
DefaultColWidth: 40, // 默认列宽
DefaultRowHeight: 300, // 默认行高(无效)
SpecialColWidth: map[string]float64{ // 特殊列宽
"B": 10,
},
SpecialRowHeight: map[int]float64{ // 特殊行高
1: 50,
},
Style: map[string]exstyle.Style{ // 自定义单元格格式
"A1,F3": exstyle.NewExStyle(exconst.DefaultFontFamily, exconst.DefaultFontSize, exconst.DefaultHorizontalAlign, exconst.DefaultVerticalAlign),
"A1,F1": exstyle.NewExStyle("黑体", 50, "center", "center"),
},
MergeCell: map[string]string{ // 需要合并的单元格
"A1": "D3",
},
}
生成文件对象
// 获取Excel导入模板
file, err := exTemp.GetTemplate("信息导入模板", []string{"第1列", "第2列", "第3列", "第4列", "第5列", "第6列"})
if err != nil {
panic(err)
}
通过结构体生成导入模板
// 定义结构体
type User struct {
Id string `json:"id" ex:"column:ID;width:10;required;"`
Name string `json:"name" ex:"column:姓名;width:30;required;"`
NickName string `json:"nickName" ex:"column:昵称;width:20;required;"`
Phone string `json:"phone" ex:"column:手机号;width:15;required;"`
Age int `json:"age" ex:"column:年龄;width:10;required;"`
Sex string `json:"sex" ex:"column:性别;width:10;required;select:男、女"`
School // 允许存在匿名字段
}
type School struct {
SchoolName string `ex:"column:学校;width:30;required;"`
SchoolAddress string `ex:"column:学校地址;width:50;required;"`
}
// 创建一个excelConfig(每个Excel文件需要一个)
exTemp3 := extemplate.ExcelConfig{
SheetName: "车辆导入模板", // 工作表名称
FileName: "车辆导入模板" + exconst.DefaultExcelFileName + ".xlsx", // 导出后的文件名
}
user := User{
Id: "001",
Name: "张三",
NickName: "别人家的孩子",
Phone: "123456789",
Age: 30,
Sex: "男",
}
// 获取Excel导入模板
file, err := exTemp3.GetTemplateByStruct("信息导入模板", user)
if err != nil {
panic(err)
}
生成阶梯模板
// 获取Excel导入模板
_, err := exTemp.GetLadderTemplate("乘法表", []string{"1", "2", "3", "4", "5","6", "7", "8", "9"})
if err != nil {
panic(err)
}
保存Excel文件
// 保存Excel文件
err = exTemp.ExportFile("fs")
if err != nil {
panic(err)
}
通过结构体读入数据
user := User{}
// 通过结构体读取数据,并进行校验
// rows, err := extemplate.LoadExcelByStruct("./", "book1.xlsx", user, 2)
// rows, err := extemplate.LoadExcelByStruct("./", "book1.csv", user, 2)
rows, err := extemplate.LoadExcelByStruct("./", "book1.xls", user, 2)
if err != nil {
panic(err)
}
for _, row := range rows {
fmt.Println(row)
}
常规方式读取数据
// rows, err = extemplate.LoadExcel("./", "book1.xls", 8)
// rows, err = extemplate.LoadExcel("./", "book1.xls", 8)
rows, err = extemplate.LoadExcel("./", "book1.xlsx", 8)
if err != nil {
panic(err)
}
读取阶梯模板
rows, err := extemplate.LoadLadderExcel("./","乘法表.xlsx",10,1,1)
if err != nil {
panic(err)
}
for _, row := range rows {
fmt.Println(row)
}
待开发
标签名 | 说明 |
---|---|
- | 忽略该字段 ex:"-" |
column | 指定导出Excel 时的列名ex:"column:姓名;" |
width | 指定导出Excel 时的列宽ex:"width:30;" |
required | 必填 ex:"required;" |
select | 单选 ex:"select:男、女;" |
multiSelect | 多选 ex:"multiSelect:A1、A2、A3、B1、B2、C1、C2、C3、C4、C5、C6、D、E、F、M、N、P;" |
unique | 唯一 ex:"unique;" |
len | 导入Excel 时的数据长度校验ex:"len:2-5"(2-5位) ex:"len:3"(固定为3位) |
re | 正则校验 ex:"re:^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z0-9]{4,5}[A-Z0-9挂学警港澳]{1}$" |
> | 数值下限校验 ex:">:0" |
>= | 数值下限校验 ex:">=:0" |
< | 数值上限校验 ex:"<:100" |
<= | 数值上限校验 ex:"<=:100" |