【Go】excelize库实现excel导入导出封装,基于excel模板导出excel
package main
import (
"fmt"
"github.com/xuri/excelize/v2"
"os"
)
// 根据模板导出Excel
func ExportExcelByTemplate(filename string, sheetName string, rows [][]interface{}) error {
// 打开模板文件
f, err := excelize.OpenFile(filename)
if err != nil {
return err
}
// 获取模板中的工作表
index := f.GetSheetIndex(sheetName)
if index == -1 {
return fmt.Errorf("工作表 %s 不存在", sheetName)
}
// 根据模板创建新的工作表
newSheetIndex := f.NewSheetAfter("模板", "导出", excelize.SheetStateVisible)
// 复制模板内容到新工作表
if err := f.CopySheet(index, newSheetIndex); err != nil {
return err
}
// 填充数据到新工作表
for _, row := range rows {
if err := f.SetSheetRow("导出", "A"+fmt.Sprintf("%d", len(row)+1), &row); err != nil {
return err
}
}
// 保存文件
if err := f.SaveAs(filename); err != nil {
return err
}
return nil
}
func main() {
// 模拟数据
data := [][]interface{}{
{1, "张三", 25},
{2, "李四", 30},
}
// 调用函数导出Excel
if err := ExportExcelByTemplate("template.xlsx", "模板", data); err != nil {
fmt.Fprintf(os.Stderr, "导出失败: %v\n", err)
} else {
fmt.Println("导出成功")
}
}
这段代码首先定义了一个ExportExcelByTemplate
函数,该函数接受模板文件名、工作表名和数据切片作为参数。它打开模板文件,获取模板的工作表,然后创建一个新的工作表,并将模板的内容复制到新工作表中。接着,它遍历数据切片,将每行数据填充到新工作表的相应位置。最后,它保存文件。在main
函数中,我们模拟了一些数据并调用了ExportExcelByTemplate
函数来导出Excel文件。
评论已关闭