.Net Excel导出文件 (查询到的数据写入Excel,并导出)

该文章展示了如何在.NETWebAPI项目中利用NPOI库创建Excel工作簿,设置表头,从数据库获取数据并写入工作表,最后保存并导出为.xlsx文件。示例代码包括创建工作簿、工作表,设置表头,调整列宽,以及从数据库查询数据并填充到Excel的过程。
摘要由CSDN通过智能技术生成

 继续上篇小编发布的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,拜拜

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农小小涛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值