如何用go导出excel文件

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维护的具体版本,里面有源码实现以及更多功能

http://github.com/360EntSecGroup-Skylar/excelize

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值