导出百万量数据到Excel表

EXcel最大支持导出的数据量是1048576条。

但要快速导出成功的话 以往的导出方法就不再适用了

这时候可以用到MiniExcel类库

cs 复制代码
/// <summary>
/// 数据导出到Excel快速版
/// </summary>
/// <param name="dataReader"></param>
/// <param name="param"></param>
/// <returns></returns>
public virtual async Task DataToExcelFastAsync(object dataReader, string param)
{
    var input = JsonConvert.DeserializeObject<ExcelExportParam>(param);
    try
    {
        input.input.TaskStatus = (int)ExcelTaskStatusEnum.完成;

        //miniExcel(导出文件更快更强, 但是文件会变大)
        var config = new OpenXmlConfiguration()
        {
            TableStyles = TableStyles.None,
            AutoFilter = false,
        };

        // avoid to load all data into memory
        await MiniExcel.SaveAsAsync(input.input.FilePath, dataReader, configuration: config);
        await _downLoadTaskAppService.DownLoadTaskCreateOrUpdate(input.input);
    }
    catch (Exception ex)
    {
        input.input.TaskStatus = (int)ExcelTaskStatusEnum.失败;
        input.input.ErrorMsg = ex.Message;
        await _downLoadTaskAppService.DownLoadTaskCreateOrUpdate(input.input);
    }
}

这是我导出写的例子 导出百万条数据还是很快的 不过缺点是excel 只能显示最多104万条 超过的条数就不会再显示 想要全部显示 可能还需要进一步 分成多个表格、或改变导出格式等方式 这个后面再做研究。。。

cs 复制代码
 public async Task BarCodeBalanceExportBcpkAsync(ExcelExportArgs args)
 {
     DownLoadTaskListDto dto = args.dto;
     //将DownLoadTask表中的请求参数反序列化为对象
     var input = JsonConvert.DeserializeObject<ExportBarCodeBalanceListInput>(dto.Input);
     input.input = ObjectMapper.Map<DownLoadTaskListDto, DownLoadTaskCreateOrUpdateInput>(dto);
     input.Filter.StartTime = input.Filter.StartTime?.Date;
     input.Filter.EndTime = input.Filter.EndTime?.Date.AddDays(1);
     var sql = await _stkBarCodeBalancesDapperRepository.BarcodeBalanceListNewBcpkAsync(input.Filter);
     var connectionString = _configuration.GetValue<string>("ConnectionStrings:Wms");

     await using (var con = new SqlConnection(connectionString))
     {
         await con.OpenAsync();
         await using (var transaction = await con.BeginTransactionAsync())
         {
             try
             {
                 input.input.TaskStatus = (int)ExcelTaskStatusEnum.完成;
                 var reader = await con.ExecuteReaderAsync(sql, transaction: transaction);

                 var config = new OpenXmlConfiguration()
                 {
                     TableStyles = TableStyles.None,
                     AutoFilter = false,
                 };

                 // avoid to load all data into memory
                 await MiniExcel.SaveAsAsync(input.input.FilePath, reader, configuration: config);
                 await _downLoadTaskAppService.DownLoadTaskCreateOrUpdate(input.input);
                 await reader.CloseAsync();
                 await reader.DisposeAsync();
             }
             catch (Exception ex)
             {
                 input.input.TaskStatus = (int)ExcelTaskStatusEnum.失败;
                 input.input.ErrorMsg = ex.Message;
                 await _downLoadTaskAppService.DownLoadTaskCreateOrUpdate(input.input);
             }
             //await _excelManagerAppService.DataToExcelFastAsync<ExportBarCodeBalanceListInput>(input, reader);

         }
         await con.CloseAsync();
     }
 }
相关推荐
唐青枫34 分钟前
C#.NET PInvoke 深入解析:封送、内存布局与原生互操作实战
c#·.net
软件黑马王子4 小时前
24.Editor 资源加载:主要作用和基本原理
开发语言·前端框架·c#
慧都小妮子4 小时前
用 Python 批量把 PDF 参考文献排成 MLA 格式:Spire.Doc for Python 实战
python·pdf·c#·spire.doc·mla格式·参考文献排版·pdf批量处理
weixin_493503678 小时前
商会系统里的在线文件预览:PDF/Word/Excel 三种实现与选型(Node + 前端实战)
pdf·word·excel
UIU1148 小时前
补码运算与整数溢出(上
学习·c#·补码·补码运算
曹牧9 小时前
C#:模态对话框
开发语言·c#
咕白m6259 小时前
C# 如何限制 PDF 复制、打印权限?
c#·.net
yume_sibai10 小时前
正则表达式完全指南(基础语法 + 实战应用 + 性能优化 + 最佳实践)
开发语言·正则表达式·c#
Nil20810 小时前
leetcode 79单词搜索
开发语言·c#
神仙别闹10 小时前
基于C#实现(WinForm)文件管理系统
java·开发语言·c#