继续上篇小编发布的Excel导入数据而言,那么对于导出文件 他们都是常见的需求
今天就将步骤以及代码奉上
使用工具:Visual Studio 2022
框架 .Net WebApi Core
-
下载Nuget包:NPOI
-
引用功能
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
-
业务代码
/// <summary>
/// 将数据写入Excel,并导出.xlsx文件
/// </summary>
/// <returns></returns>
[HttpGet("exprot2(导出文件.excel)")]
public async Task<ActionResult> Export2()
{
// 创建一个工作簿
IWorkbook workbook = new XSSFWorkbook();
// 创建一个工作表
ISheet sheet = workbook.CreateSheet("Sheet1");
// 添加表头
IRow headerRow = sheet.CreateRow(0);
//当前行创建列
headerRow.CreateCell(0).SetCellValue("ID");
headerRow.CreateCell(1).SetCellValue("Status/状态");
headerRow.CreateCell(2).SetCellValue("CreatedTime/录入时间");
headerRow.CreateCell(3).SetCellValue("更新时间");
headerRow.CreateCell(4).SetCellValue("是否有效");
headerRow.CreateCell(5).SetCellValue("是否删除");
headerRow.CreateCell(6).SetCellValue("录入id");
headerRow.CreateCell(7).SetCellValue("录入人");
headerRow.CreateCell(8).SetCellValue("更新人id");
headerRow.CreateCell(9).SetCellValue("更新人姓名");
headerRow.CreateCell(10).SetCellValue("审批人");
headerRow.CreateCell(11).SetCellValue("日志种类");
headerRow.CreateCell(12).SetCellValue("发布版本");
headerRow.CreateCell(13).SetCellValue("基因");
headerRow.CreateCell(14).SetCellValue("变异");
headerRow.CreateCell(15).SetCellValue("起始位置");
headerRow.CreateCell(16).SetCellValue("末尾位置");
headerRow.CreateCell(17).SetCellValue("范围内突变类型");
headerRow.CreateCell(18).SetCellValue("肿瘤类型英文");
headerRow.CreateCell(20).SetCellValue("肿瘤类型中文");
headerRow.CreateCell(21).SetCellValue("药物英文");
headerRow.CreateCell(22).SetCellValue("药物中文");
headerRow.CreateCell(23).SetCellValue("ONCOKB证据等级");
headerRow.CreateCell(24).SetCellValue("oncokb跨癌种证据等级");
headerRow.CreateCell(25).SetCellValue("突变说明");
headerRow.CreateCell(26).SetCellValue("本癌种临床证据中文");
headerRow.CreateCell(27).SetCellValue("跨癌种临床证据中文");
headerRow.CreateCell(28).SetCellValue("临床证据英文");
headerRow.CreateCell(29).SetCellValue("TIER");
headerRow.CreateCell(30).SetCellValue("备注");
headerRow.CreateCell(31).SetCellValue("ABCD本癌种");
headerRow.CreateCell(32).SetCellValue("本癌种药物应答");
headerRow.CreateCell(33).SetCellValue("ABCD跨癌种");
headerRow.CreateCell(34).SetCellValue("跨癌种药物应答");
headerRow.CreateCell(35).SetCellValue("临床证据原始");
//这个循环是 设置每列的宽度,如果不需要可以省略
#region 列宽
for (int n = 0; n < 35; n++)
{
sheet.SetColumnWidth(n, 20 * 256);
}
#endregion
//查询数据库数据
//AsNoTracking()可以使查询速度优化加快,但是不可以对其进行增产改的举动,具体可以自行百度搜索原因
List<TargetGeneUse> geneUses = await _context.TargetGeneUses.AsNoTracking().ToListAsync();
//编程默认excel第一行是0,第二行是1,第一行我们已经写好标题,那就应该再第二行开始写入数据
int i = 1;
//循环表数据依次将数据写入
foreach (var item in geneUses)
{
//创建行
IRow dataRow = sheet.CreateRow(i);
//下边的都是创建列和写入值
dataRow.CreateCell(0).SetCellValue(item.Id.ToString());
dataRow.CreateCell(1).SetCellValue(item.Status);
dataRow.CreateCell(2).SetCellValue(item.CreatedTime.ToString("yyyy-MM-dd HH:mm:ss"));
dataRow.CreateCell(3).SetCellValue(item.UpdatedTime.ToString("yyyy-MM-dd HH:mm:ss"));
dataRow.CreateCell(4).SetCellValue(item.IsValid);
dataRow.CreateCell(5).SetCellValue(item.IsDeleted);
dataRow.CreateCell(6).SetCellValue(item.CreateId.ToString());
dataRow.CreateCell(7).SetCellValue(item.CreateName);
dataRow.CreateCell(8).SetCellValue(item.UpdateId.ToString());
dataRow.CreateCell(9).SetCellValue(item.UpdateName);
dataRow.CreateCell(10).SetCellValue(item.ApproveId.ToString());
dataRow.CreateCell(11).SetCellValue(item.LogCategory);
dataRow.CreateCell(12).SetCellValue(item.PublishName);
dataRow.CreateCell(13).SetCellValue(item.Gene);
dataRow.CreateCell(14).SetCellValue(item.Alteration);
dataRow.CreateCell(15).SetCellValue(item.StartPosition);
dataRow.CreateCell(16).SetCellValue(item.EndPosition);
dataRow.CreateCell(17).SetCellValue(item.MutationType);
dataRow.CreateCell(18).SetCellValue(item.CancerTypesEn);
dataRow.CreateCell(19).SetCellValue(item.CancerTypesCn);
dataRow.CreateCell(20).SetCellValue(item.DrugsEn);
dataRow.CreateCell(21).SetCellValue(item.DrugsCn);
dataRow.CreateCell(22).SetCellValue(item.OncoKbEvidenceLevel);
dataRow.CreateCell(23).SetCellValue(item.OncoKbOtherCancerEvidenceLevel);
dataRow.CreateCell(24).SetCellValue(item.MutationDescription);
dataRow.CreateCell(25).SetCellValue(item.ClinicalEvidenceCn);
dataRow.CreateCell(26).SetCellValue(item.OtherCancerClinicalEvidenceCn);
dataRow.CreateCell(27).SetCellValue(item.ClinicalEvidenceEn);
dataRow.CreateCell(28).SetCellValue(item.Tier);
dataRow.CreateCell(29).SetCellValue(item.Note);
dataRow.CreateCell(30).SetCellValue(item.EvidenceLevel);
dataRow.CreateCell(31).SetCellValue(item.DrugResponse);
dataRow.CreateCell(32).SetCellValue(item.OtherCancerEvidenceLevel);
dataRow.CreateCell(33).SetCellValue(item.OtherCancerDrugResponse);
dataRow.CreateCell(34).SetCellValue(item.ClinicalEvidenceRaw);
i++;
}
//存储目录
var path = Path.Combine(Directory.GetCurrentDirectory(), "File", "Excel");
//查看是否存在,不存在创建
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
var filename = $"{DateTime.Now.ToString("yyyyMMdd HHmmss")}.xlsx";
// 保存工作簿
var filePath = Path.Combine(path, filename);
using (var fileStream = new FileStream(filePath, FileMode.Create))
{
workbook.Write(fileStream, true);
}
// 导出文件
var provider = new FileExtensionContentTypeProvider();
if (!provider.TryGetContentType(filePath, out var contentType))
{
contentType = "application/octet-stream";
}
var fileContent = System.IO.File.ReadAllBytes(filePath);
return File(fileContent, contentType, filename);
}
至此导出文件结束,如果需要Excel导入的,请参考如下
.Net Core Excel 导入 之 读取数据并且入库_小涛668的博客-CSDN博客
OK,拜拜