1 前端处理方案
import ExportJsonExcel from 'js-export-excel';
downloadExcel = () => {
// currentPro 是列表数据
const { wallet } = this.props;
console.log(wallet.data)
var option={};
let dataTable = [];
if (wallet.data) {
for (let i in wallet.data.list) {
if(wallet.data){
let obj = {
'流水号': wallet.data.list[i].No,
'金额': wallet.data.list[i].Amount,
'付款人': wallet.data.list[i].PayName,
}
dataTable.push(obj);
}
}
}
option.fileName = '资金统计'
option.datas=[
{
sheetData:dataTable,
sheetName:'sheet',
sheetFilter:['流水号','金额','付款人'],
sheetHeader:['流水号','金额','付款人'],
}
];
var toExcel = new ExportJsonExcel(option); //new
toExcel.saveExcel();
}
2 后端处理方案(beego)
后端代码,使用github.com/tealeg/xlsx:
col_name :=[]string{"col1","col2","col3","col4","col5","col6","col7","col8","col9"}
row := sheet.AddRow()
for _,c := range col_name{
cell := row.AddCell()
cell.Value = c
}
col :=[]string{"col","col2","col3","col4","col5","col6","col7","col8","col9"}
for _,ac :=range data{
row := sheet.AddRow()
row.SetHeightCM(1) //设置每行的高度
for _,c := range col{
cell := row.AddCell()
if ac[c]!=nil{
cell.Value = ac[c].(string)
}
}
}
this.Ctx.Output.Header("Pragma","public"); //1
this.Ctx.Output.Header("Expires","0"); //2
this.Ctx.Output.Header("Cache-Control","must-revalidate, post-check=0, pre-check=0");//3
this.Ctx.Output.Header("Content-Type","application/force-download");//4
this.Ctx.Output.Header("Content-Type","application/octet-stream");//5
this.Ctx.Output.Header("Content-Type","application/vnd.ms-excel;");//6
this.Ctx.Output.Header("Content-Type","application/download");//7
this.Ctx.Output.Header("Content-Disposition","attachment;filename=data.xlsx");//8
this.Ctx.Output.Header("Content-Transfer-Encoding","binary");//9
err := file.Write(this.Ctx.Output.Context.ResponseWriter)
if err != nil {
panic(err)
}
//this.ServeJsonOk()
return
前端直接下载文件:
downExcel=()=> {
var oReq = new XMLHttpRequest();
oReq.open("POST", '/v1/xxx/xxx', true);
oReq.responseType = "blob";
oReq.setRequestHeader("Content-Type", "application/json");
oReq.onload = function (oEvent) {
var content = oReq.response;
var elink = document.createElement('a');
elink.download = '用户数据.xlsx';//xlsx 因为后台输入是scv格式,用xlsx显示的不理想
elink.style.display = 'none';
var blob = new Blob([content]);
elink.href = URL.createObjectURL(blob);
document.body.appendChild(elink);
elink.click();
document.body.removeChild(elink);
};
oReq.send(JSON.stringify({"excel":1}));
}