C# NPOI导出EXCEL并实现在WEB端下载
1.后端Datatable转EXCEL代码如下:
public byte[] DataTableToExcel(DataTable data) { ISheet sheet = null; IWorkbook workbook = new XSSFWorkbook(); try { if (workbook != null) { sheet = workbook.CreateSheet("Sheet1"); } //读取标题 IRow rowHeader = sheet.CreateRow(0); for (int i = 0; i < data.Columns.Count; i++) { ICell cell = rowHeader.CreateCell(i); cell.SetCellValue(data.Columns[i].ColumnName); } //读取数据 for (int i = 0; i < data.Rows.Count; i++) { IRow rowData = sheet.CreateRow(i + 1); for (int j = 0; j < data.Columns.Count; j++) { ICell cell = rowData.CreateCell(j); cell.SetCellValue(data.Rows[i][j].ToString()); } } NpoiMemoryStream ms = new NpoiMemoryStream(); ms.AllowClose = false; workbook.Write(ms); ms.Flush(); ms.Seek(0, SeekOrigin.Begin); var result = ms.ToArray(); ms.AllowClose = true; workbook.Close(); ms.Dispose(); return result; } catch (Exception ex) { throw ex; } }
1.将上述代码取到的数据转为File传回前端
var file = excelHelper.DataTableToExcel(data);
return File(file, "application/mx-excel", "fileContents.xlsx");
3.前端拿到数据生成超链接下载excel:
ar xhr = new XMLHttpRequest();
xhr.open("POST", "/Test/xxx?param='test'" , true);
xhr.responseType = "blob";
xhr.onload = function (oEvent) {
var content = xhr.response;
if (content.type == 'application/json') {
const fr = new FileReader(); //FileReader可以读取Blob内容
fr.readAsText(content, 'utf-8');
fr.onload = function (e) {
let resData = JSON.parse(fr.result); // 解析对象成功,说明是json数据
if (resData.success == "false") {
that.$message.error('导出失败' + resData.errorMessage);
}
}
}
else {
var elink = document.createElement('a');
elink.download = new Date().getTime() + "导出.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);
that.$message.success('导出成功');
}
$('#loading').hide();
$('#kv-explorer').val("");
};
xhr.send();
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?