具体参考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
}