Go 单表头结构体导入导出
首先感谢 github.com/xuri/excelize/v2 基础库对excel表格的支持,本文在此基础上进行功能的api扩展方便,(web/其他)有结构体导出与导入需求的封装优化,当前版本 v0.0.2
基本用法
安装
- go get github.com/heliangrui/excel
复制代码 当前版本v0.0.2,也可指定版本安装,以防版本变化- go get github.com/heliangrui/excel@0.0.2
复制代码 结构体标签
- excelName 列名
- excelIndex 列序号
- toExcelFormat 列转excel函数名称
- toDataFormat excel转data函数名称
- excelColWidth 列宽度
导出示例
- type NameStruct struct{
- Name string `excelName:"姓名" excelIndex:"1" excelColWidth:"30"`
- Age string `excelName:"年龄" excelIndex:"3"`
- Sex int `excelName:"性别" excelIndex:"1" toExcelFormat:"ToExcelSexFormat"`
- }
- func (n NameStruct) ToExcelSexFormat() string{
- if n.Sex == 0 {
- return "女"
- }
- return "男"
- }
复制代码- func main() {
- //创建数据源
- data := createData()
- //创建导出对象
- export := excel.NewExcelExport("test", NameStruct{})
- //销毁对象
- defer export.Close()
- //导出
- err = export.ExportSmallExcelByStruct(data).WriteInFileName("test.xlsx").Error()
- if err != nil {
- fmt.Println("生成失败", err.Error())
- }
- }
- func createData() []NameStruct {
- var names []NameStruct
- for i := 0; i < 10; i++ {
- names = append(names, NameStruct{name: "hlr" + strconv.Itoa(i), age: strconv.Itoa(i),Sex: i})
- }
- return names
- }
复制代码- func main() {
- //创建数据源
- data := createData()
- //创建导出对象
- export := excel.NewExcelExport("test", NameStruct{})
- //销毁对象
- defer export.Close()
- //导出 模拟分页
- for i := 0; i < 10; i++ {
- export.ExportData(result, i*10)
- }
- err = export.WriteInFileName("test.xlsx").Error()
- if err != nil {
- fmt.Println("生成失败", err.Error())
- }
- }
复制代码 导入实例
- func main() {
- //接受数据
- var result []NameStruct
- //创建导入对象
- importFile := excel.NewExcelImportFile("111.xlsx", NameStruct{})
- //对象销毁
- defer importFile.Close()
-
- //数据填充
- err := importFile.ImportDataToStruct(&result).Error()
- //数据显示
- if err != nil {
- fmt.Println("生成失败", err.Error())
- } else {
- marshal, _ := json.Marshal(result)
- fmt.Println(string(marshal))
- }
- }
复制代码- func main() {
- //接受数据
- var result []NameStruct
- //创建导入对象
- importFile := excel.NewExcelImportFile("111.xlsx", NameStruct{})
- //对象销毁
- defer importFile.Close()
- // 方式二 逐行遍历
- err := importFile.ImportRead(func(row NameStruct) {
- fmt.Println(row.Name)
- }).Error()
- }
复制代码 定义表头样式
- export := excel.NewExcelExport("test", NameStruct{})
- //获取默认表头样式
- header := excel.CreateDefaultHeader()
- //编辑默认header
- // .......
- export.SetHeadStyle(header)
复制代码- {
- Border: []excelize.Border{
- {Type: "left", Color: "050505", Style: 1},
- {Type: "top", Color: "050505", Style: 1},
- {Type: "bottom", Color: "050505", Style: 1},
- {Type: "right", Color: "050505", Style: 1},
- },
- Fill: excelize.Fill{Type: "gradient", Color: []string{"#a6a6a6", "#a6a6a6"}, Shading: 1},
- Font: nil,
- Alignment: &excelize.Alignment{
- Horizontal: "center",
- Indent: 1,
- JustifyLastLine: true,
- ReadingOrder: 0,
- RelativeIndent: 1,
- ShrinkToFit: false,
- TextRotation: 0,
- Vertical: "",
- WrapText: false,
- },
- Protection: nil,
- NumFmt: 0,
- DecimalPlaces: 0,
- CustomNumFmt: nil,
- Lang: "",
- NegRed: false,
- }
复制代码 感谢阅读
后续有时间,将支持多表头
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |