导出百万量数据到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();
     }
 }
相关推荐
小羊没烦恼!6 小时前
铁道部新客票系统设计(二)
开发语言·前端·数据库·python·oracle·c#·php
昂好的day7 小时前
VisionMaster 通信模块实战(上):Modbus、TCP 收发、协议组装解析
开发语言·网络·网络协议·tcp/ip·c#
波力海苔夹心脆67510 小时前
C# 正则表达式零基础入门:从“看得懂“到“会用“
经验分享·后端·mysql·正则表达式·c#
昂好的day12 小时前
VisionMaster(VM) 标定工具详解(上):为什么必须标定 + 九点标定手眼标定
开发语言·数码相机·c#
小羊没烦恼!17 小时前
深入浅出SQL Server中的死锁
java·开发语言·前端·数据库·后端·spring·c#
帆张芳显18 小时前
前端表格公式能力新选择|智表 ZCell 公式引擎深度剖析
前端·excel·canva可画·excel插件
地图小课堂19 小时前
Bigemap Pro 导入 Excel、CSV、TXT 点位表格教程
excel
我的愿望是成为富婆20 小时前
2027校招准备:从Excel操作到数据分析,还缺业务、SQL与统计思维
sql·数据分析·excel
czhc11400756631 天前
同值短路与单一真值源:属性不是命令,状态只有一个家
c#
下页、再停留1 天前
【C#桌面客户端系列学习-15】生成可视化图表之折线图、柱状图、饼状图
开发语言·c#