github.com/360EntSecGroup-Skylar/excelize
github.com/tealeg/xlsx
可以使用以上两个库
代码如下:
// jsonResult 返回 JSON 格式的结果
func (c *TemplateController) jsonResult(code int, msg string, data interface{}) {
c.Data["json"] = map[string]interface{}{
"code": code,
"msg": msg,
"data": data,
}
c.ServeJSON()
}
// ImportTemplate 导入系统
func (c *TemplateController) ImportTemplate() {
// 获取上传的文件
file, h, err := c.GetFile("fileInput")
if err != nil {
fmt.Println("获取文件时发生错误:", err)
c.Ctx.WriteString("获取文件失败")
return
}
ext := path.Ext(h.Filename)
// 验证后缀名是否符合要求
AllowExtMap := map[string]bool{
".xlsx": true,
}
if _, ok := AllowExtMap[ext]; !ok {
c.Ctx.WriteString("后缀名不符合上传要求")
return
}
// 打开Excel文件
xlsx, err := excelize.OpenReader(file)
if err != nil {
fmt.Println("打开Excel文件失败:", err)
return
}
rows := xlsx.GetRows("Template")
// 遍历Excel的每一行
for i, row := range rows {
if i > 0 { // 跳过表头
Id := row[0]
ProductCode := row[1]
Creator := row[2]
Parent := row[3]
Remark := row[4]
// 打印准备插入的数据
//fmt.Printf("准备插入数据: Id=%s, ProductCode=%s, Creator=%s, Parent=%s, Remark=%s\n", Id, ProductCode, Creator, Parent, Remark)
// 插入数据到数据库
_, err := Db.Exec("INSERT INTO Materia (Id, ProductCode, Creator, Parent, Remark) VALUES (?, ?, ?, ?, ?)", Id, ProductCode, Creator, Parent, Remark)
if err != nil {
fmt.Println("插入数据失败:", err) // 打印具体的错误信息
continue // 继续处理下一行
}
fmt.Println("插入成功:", Id, ProductCode, Creator, Remark)
}
}
c.Ctx.WriteString("文件已上传,数据已保存到数据库")
}
导入完成