使用的库
"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)
}
)
}
发表回复