使用的库
"github.com/xuri/excelize/v2"
后端的代码
f := excelize.NewFile() defer func() { if err := f.Close(); err != nil { fmt.Println(err) } }() sheetName := "Sheet1" //新增工作表 index, err := f.NewSheet(sheetName) f.SetActiveSheet(index) //第一行的样式, 加粗, 字体14 styleID, _ := f.NewStyle(&excelize.Style{ Font: &excelize.Font{ Bold: true, Size: 14, // 字体大小设置为14号字 }, }) //插入第一行的内容 if err = f.SetSheetRow(sheetName, "A1", &[]any{code.DBNAME, code.DBLocation, fact.Name}); err != nil { global.Logger.Errorf("往xlsx文件追加行失败:%v", err) app.NewResponse(c).ToErrorResponse(code.ServerError) return } //设置第一行样式 if err = f.SetRowStyle(sheetName, 1, 1, styleID); err != nil { global.Logger.Errorf("设置xlsx文件样式失败:%v", err) app.NewResponse(c).ToErrorResponse(code.ServerError) return } //设置行宽度 if err = f.SetColWidth(sheetName, prefix, "C", 20); err != nil { global.Logger.Errorf("设置xlsx文件追加行失败:%v", err) app.NewResponse(c).ToErrorResponse(code.ServerError) return } nowStr := time.Now().Format(time.DateTime) filename := "test" + nowStr c.Header("Content-Disposition", "attachment; filename="+filename) c.Header("filename", filename) buff, err := f.WriteToBuffer() if err != nil { app.NewResponse(c).ToErrorResponse(code.ServerError) return } c.Data(200, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", buff.Bytes())
前端的代码
exportWinTillByFact(_type, fid, params, setLoading) { this.axios.get(`fact/${_type}/${fid}/xlsx`, { params, responseType: 'blob' }).then(res => { const url = window.URL.createObjectURL(new Blob([res.data], {type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'})); const link = document.createElement('a'); link.href = url; const fileName = decodeURI(res.headers['filename']); link.setAttribute('download', fileName); document.body.appendChild(link); link.click(); document.body.removeChild(link) }).catch(error => { const { data: { msg }, status } = error.response message.error(`Error Code:${status} Message: ${msg}`) }).finally( e => { setLoading(false) } ) }
发表回复