Go读取Excel并添加修改内容,最后下载

具体参考bd-api:ctrl.ZdPush

// 下载导入模版
func (*ZdPush) DownloadImportTemplate(c *gin.Context) {

	file, err := new(biz.ZdPush).DownloadImportTemplate()
	if err != nil {
		renderError(c, err)
		return
	}
	if err := renderExcel_binary_then_delete(c, file); err != nil {
		renderError(c, err)
	}
}
func renderExcel_binary_then_delete(c *gin.Context, file *os.File) error {
	// 将xlsx文件改为 []byte
	// data, err := os.ReadFile(fileName)
	data, err := ioutil.ReadAll(file)
	if err != nil {
		return err
	}

	defer func() {
		fileName := file.Name()
		file.Close()
		if err := os.Remove(fileName); err != nil {
			logrus.Error("removing file: ", fileName, ", error:", err)
		}
		logrus.Info("removed file: ", fileName)
	}()

	c.Header("Content-Type", "application/xlsx")
	c.Writer.Write(data)
	c.Writer.Flush()

	return nil
}

func (obj *ZdPush) DownloadImportTemplate() (file *os.File, err error) {
	f, err := excelize.OpenFile("./userdata/zd-push.xlsx")
	if err != nil {
		return
	}
	var zdCategoryList []orm.ZdCategory
	err = obj.repo.DB().Model(&orm.ZdCategory{}).Find(&zdCategoryList).Error
	if err != nil {
		return
	}
	index := f.NewSheet("Sheet2")
	if len(zdCategoryList) > 0 {
		for i, item := range zdCategoryList {
			key := fmt.Sprintf("A%d", i+1)
			f.SetCellValue("Sheet2", key, item.Name)
		}
		f.SetActiveSheet(index)
	}
	newFileUrl := "./userdata/上传物料模版.xlsx"
	err = f.SaveAs(newFileUrl)
	if err != nil {
		return
	}
	file, err = os.Open(newFileUrl)
	if err != nil {
		return
	}
	return
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值