导出百万量数据到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();
     }
 }
相关推荐
czhc114007566310 小时前
7.29:树形;
c#
cm04Z9c9111 小时前
C#摸鱼实录——IoC与DI案例详解
开发语言·c#
geovindu16 小时前
CSharp:Chain of Responsibility Pattern
开发语言·后端·设计模式·c#·.net·责任链模式·行为模式
颜x小18 小时前
[C#]泛型类与泛型方法
开发语言·c++·c#
caishenzhibiao19 小时前
顺势交易矩阵主图 同花顺期货通指标
java·c语言·c#
SunnyDays101119 小时前
Python 将 Excel(XLS/XLSX)转换为 JSON:导出工作簿、工作表、单元格区域与自定义 JSON 结构
python·json·excel·excel 转 json·导出 excel 到 json·xlsx 转 json·xls 转 json
TDengine (老段)19 小时前
TDengine Node.js 与 C# 连接器 — Web 服务与 .NET 集成
大数据·数据库·node.js·c#·.net·时序数据库·tdengine
河西石头20 小时前
再谈C#的抽象类和接口:从“适配器”到“毛坯房”的设计哲学
开发语言·c#·接口·依赖注入·抽象类·依赖倒挂
颜x小20 小时前
[C#]——接口与继承
开发语言·c++·c#
chatexcel21 小时前
ChatExcel AI Word 升级:多模态读资料、按模板生成、智能排版配图,还能批注修订和联动Excel 复核
人工智能·ai·word·excel·ai写作