1.首先把最重要的包引入
"github.com/360EntSecGroup-Skylar/excelize"
2. 初始化Excel文件
在处理Excel导出任务时,我们首先需要初始化一个新的Excel文件。使用`excelize.NewFile()`创建一个空的Excel文件实例,为后续的数据填充做准备。
f := excelize.NewFile()
sheet := "Sheet1"
f.NewSheet(sheet)
3. 设置表头样式
为了使生成的Excel文件更加专业和易于阅读,我们为表头设置了特定的样式。通过`headerStyleJSON`定义的样式,我们使用`f.NewStyle()`方法应用这些样式到表头(表头也=也就是最开始的那一行)。
const (
headerStyleJSON = `{
"font": {
"bold": true,
"italic": false,
"family": "Arial",
"size": 14,
"color": "#FFFFFF" //更换成你想要的字体font
},
"fill": {
"type": "solid",
"color": "#4F81BD" // 更换为你想要的背景色
}
}`
)
里面还可以设置是否让表头字位置是否处于中心以及border是否加粗等,把这个变量放在import包等下面提高代码有序性。
4.生成表头并填充到excel
根据你要的信息可以生成一个名为head的数组并循环该数组填充表头并填充渲染样式
//这边根据你的业务情况写createHeader函数来生成动态表头数组比如[用户名、地址、邮箱]
header := createHeader(args)
//接下来填充表头到sheet1
headerStyle, err := f.NewStyle(headerStyleJSON)
if err != nil {
return "", "", 0, 0, err
}
for i, v := range header {
cell := fmt.Sprintf("%s%d", getExcelColumnName(i), 1)
f.SetCellValue(sheet, cell, v)
//这边是给表头填充样式
f.SetCellStyle(sheet, cell, cell, headerStyle)
}
这边要注意的是excel表格的填充策略(核心逻辑):每行对应的列是由A,B,C这样的顺序字母不断递增,没列对应的行是由1,2,3,4这样的整数逐行递增
5.填充行数据到excel
rowIndex := 2 // 从第二行开始填充数据
// 创建一个示例发票
invoice := Invoice{
Code: "123456",
Number: "7890",
Amount: 1000.00,
TaxAmount: 160.00,
BuyerName: "张三",
SellerName: "李四",
}
// 填充数据到对应行
f.SetCellValue(sheet, fmt.Sprintf("A%d", rowIndex), invoice.Code) // 发票代码
f.SetCellValue(sheet, fmt.Sprintf("B%d", rowIndex), invoice.Number) // 发票号码
f.SetCellValue(sheet, fmt.Sprintf("C%d", rowIndex), invoice.Amount) // 金额
f.SetCellValue(sheet, fmt.Sprintf("D%d", rowIndex), invoice.TaxAmount) // 税额
f.SetCellValue(sheet, fmt.Sprintf("E%d", rowIndex), invoice.BuyerName) // 购买方名称
f.SetCellValue(sheet, fmt.Sprintf("F%d", rowIndex), invoice.SellerName) // 销售方名称
7. 自动适应列宽
为了确保所有数据都能在Excel中良好展示,我们为每一列设置了自动适应宽度的功能。
for i := range header {
colName := getExcelColumnName(i)
f.SetColWidth(sheet, colName, colName, 20) // 设置默认宽度为20
}
以上只是简单提供一个实例模板,还有很多细节以及具体思路流程要根据自己业务情况来实现,希望有所帮助谢谢!话可以看看360维护的具体版本,里面有源码实现以及更多功能