1、前端vue3代码
<template>
<div>
<el-button type="warning" @click="exportToExcel">导出Excel</el-button>
</div>
</template>
<script lang="ts" setup>
const exportToExcel =async () => {
getSortTaskList4Export({}).then(response=>{
let elink = document.createElement("a"); //a链接
elink.style.display = "none";
let blob = new Blob([response.data]);
let filename = (new Date()).getTime() + ".xlsx"
elink.setAttribute('download', filename);
elink.href = URL.createObjectURL(blob);
document.body.appendChild(elink);
elink.click();
})
};
</script>
import instance, { ProductHost } from './filter'
export const getSortTaskList4Export = async (parms: {}) => {
instance.defaults.headers.common['Authorization'] = "Bearer " + localStorage["accessToken"];
return instance.post(ProductHost + "/getSortTaskList4Export", parms,{responseType: "blob"})
}
2、后端c#代码
app.MapPost("/getSortTaskList4Export", [Authorize] (HttpContext context, ISortTaskService service, PageReq<ParamUn5T> pageReq) =>
{
var role = context.User.Claims.FirstOrDefault(t => t.Type == "RoleId")?.Value ?? string.Empty;
return service.GetList4Export(context,role, pageReq);
});
IResult ISortTaskService.GetList4Export(HttpContext context,string role, PageReq<ParamUn5T> req)
{
FileStream strm = GenerateExcel();
var type ="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
return Microsoft.AspNetCore.Http.Results.File(strm, contentType: type, "excel.xlsx", enableRangeProcessing: true); //enableRangeProcessing 是否启动断点续传
}
private FileStream GenerateExcel()
{
var stream = new FileStream("output.xlsx",FileMode.Create);
ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
using (var package = new ExcelPackage(stream))
{
var worksheet = package.Workbook.Worksheets.Add("Sheet3");
worksheet.Cells[1, 1].Value = "Hello";
worksheet.Cells[1, 2].Value = "World";
// 更多的工作表操作...
package.Save();
}
stream.Position = 0;
return stream;
}