Go生成Excel文件并下载及问题

概述

  • 接下来的代码演示基于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中信息改变导致,具体也不知道,如果有哪位大神可以解释一下,感谢!!!

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值