概述:
- 接下来的代码演示基于Gin框架。
- Excel具体使用技巧可查看Github:https://github.com/qax-os/excelize
- 运行上述代码,浏览器上输入"127.0.0.1: 1080/downlaod",此时便会获取想要Excel文件
package main
import (
"fmt"
"github.com/gin-gonic/gin"
"github.com/xuri/excelize/v2"
"strconv"
"time"
)
func main() {
router := gin.Default()
router.GET("/download", func(c *gin.Context) {
err := downloadExcel(c)
if err != nil {
fmt.Sprintf("下载文件失败,error:%v", err.Error())
}
//c.JSON(200, gin.H{
// "message": "Success",
//})
})
router.Run(":1080")
}
func downloadExcel(c *gin.Context) error {
f := excelize.NewFile()
index := f.NewSheet("Sheet1")
headers := []string{"ID", "姓名", "年龄"}
letters := []string{"A", "B", "C"}
for k, v := range headers {
f.SetCellValue("Sheet1", letters[k]+"1", v)
}
f.SetCellValue("Sheet1", "A"+strconv.Itoa(2), 1)
f.SetCellValue("Sheet1", "B"+strconv.Itoa(2), "Lewis")
f.SetCellValue("Sheet1", "C"+strconv.Itoa(2), 18)
f.SetActiveSheet(index)
// 保存文件到本地
//if err := f.SaveAs("./" + "Book1.xlsx"); err != nil {
// fmt.Println(err.Error())
//}
c.Writer.Header().Set("Content-Type", "application/octet-stream")
disposition := fmt.Sprintf("attachment; filename=\"%s_%s.xlsx\"", "demo-", time.Now().Format("20060102 150405"))
c.Writer.Header().Set("Content-Disposition", disposition)
_ = f.Write(c.Writer)
return nil
}
问题:
1.如果在调用downloadExcel()方法下面,调用c.JSON()方法(正常不需要调用),当打开excel会提示"需要尝试修复"之类的提示,只要点击修复即可打开,去掉c.JSON()就正常了;此问题出现我个人猜想应该是调用c.JSON()方法导致Header中信息改变导致,具体也不知道,如果有哪位大神可以解释一下,感谢!!!