导出百万量数据到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();
     }
 }
相关推荐
WarrenMondeville3 小时前
1.Unity面向对象-单一职责原则
unity·设计模式·c#
寒风暖哥5 小时前
Oracle视图查询返回空数据集的分析
oracle·c#
万兴丶5 小时前
Unity用C#完成抖音小游戏接入引力引擎(Gravity Engine)完整指南,一篇文章讲清楚!
unity·c#·游戏引擎·抖音
biuyyyxxx6 小时前
Power Query功能区 - 主页
笔记·学习·excel
CDA数据分析师干货分享6 小时前
【经验贴】机械工程本科,CDA数据分析师学习及转行经验
数据挖掘·数据分析·excel·cda证书·cda数据分析师
福赖7 小时前
《C#反射机制》
开发语言·c#
向上的车轮7 小时前
熟悉C#如何转TypeScript?
开发语言·typescript·c#
我是唐青枫7 小时前
C#.NET ReaderWriterLockSlim 深入解析:读写锁原理、升级锁与使用边界
开发语言·c#·.net
The Sheep 20238 小时前
C# 操作XML
xml·前端·c#
JosieBook8 小时前
【C#】C# 中的 enum、struct 和 class 对比总结
开发语言·算法·c#