导出百万量数据到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();
     }
 }
相关推荐
格林威2 小时前
C#图像处理:使用imagemagick实现像素放大水印转换等多种功能
android·开发语言·图像处理·人工智能·计算机视觉·c#·视觉检测
胖纸不争6 小时前
Clasp:一个带插件系统的 .NET 10 命令行工具箱
c#·net core
曹牧14 小时前
C#:数字的定义和表示方式
算法·c#
Young_Gnay16 小时前
.NET 之 WebApi学习笔记 (持续更新)
后端·c#
李高钢17 小时前
WPF MVVM Light 入门:从零到Hello World
c#·wpf
曹牧18 小时前
C#:函数参数指定默认值
开发语言·c#
李高钢19 小时前
WPF MVVM Light(三):RelayCommand 命令与 Messenger 消息
前端·c#·wpf
葡萄城技术团队19 小时前
为什么很多企业最终都会重新评估“自研 Excel”的成本?
excel
qq_1508419920 小时前
从CVI(C)到Pyside(python)/Qt(C++)/VS(C#)的一点吐槽
c++·qt·c#
AI刀刀1 天前
能生成 word 文档的文心在导出时易出现排版错乱,AI 导出鸭精准优化版式,提升文档完整性
人工智能·c#·word·excel·ai导出鸭