如何提高读取Excel的效率,NPOI多线程读取详解

NPOI实战:优化Excel导出性能与用户体验的双赢策略 本文深入探讨了如何利用NPOI在.NET Core平台上优化Excel导出性能与用户体验。通过流式写入、样式复用、行列操作优化和异步导出等策略,显著提升处理大数据量时的效率,同时结合智能格式识别和响应式布局设计,为用户提供更友好的交互体验。 阅读详情

如何提高读取Excel的效率

当Excel中的数据量大,达到几十万条,使用Excel文件可能会变得很慢. 以下是一些建议来提高读取Excel的效率:

1. 选择合适的Excel库

在读取Excel文件时, 选择合适的Excel库可以显著提高效率. 一些常用的Excel库包括:

2. 使用单元格范围

在读取Excel数据时, 不要逐行读取, 而是使用单元格范围. 这种方式可以减少对Excel文件的读取次数, 从而提高读取效率.

以下是一个使用单元格范围的示例:

using (var package = new ExcelPackage(new FileInfo(filePath)))
{
    ExcelWorksheet worksheet = package.Workbook.Worksheets[worksheetName];
    var range = worksheet.Cells[2, 1, 50000, 20]; // 选择2-50000行, 1-20列的单元格范围
    var data = range.Value; // 读取单元格范围中的数据
}

3. 使用多线程

使用多线程可以在读取Excel文件时提高效率. 例如, 可以使用一个线程读取Excel文件, 另一个线程处理数据.

以下是一个使用多线程的示例:

using (var package = new ExcelPackage(new FileInfo(filePath)))
{
    ExcelWorksheet worksheet = package.Workbook.Worksheets[worksheetName];
    var range = worksheet.Cells[2, 1, 50000, 20]; // 选择2-50000行, 1-20列的单元格范围

    // 使用多线程读取单元格范围中的数据
    var thread = new Thread(() => {
        var data = range.Value; // 读取单元格范围中的数据
        // 进行数据处理
    });
    thread.Start();
}

4. 关闭Excel应用程序

在读取Excel文件后, 要确保关闭Excel应用程序. 否则, Excel应用程序可能会保留在后台, 导致系统内存占用过高.

以下是一个关闭Excel应用程序的示例:

using (var package = new ExcelPackage(new FileInfo(filePath)))
{
    ExcelWorksheet worksheet = package.Workbook.Worksheets[worksheetName];
    var range = worksheet.Cells[2, 1, 50000, 20]; // 选择2-50000行, 1-20列的单元格范围
    var data = range.Value; // 读取单元格范围中的数据

    // 关闭Excel应用程序
    package.Dispose();
}

以上是一些改善读取Excel效率的建议. 根据Excel文件的大小和数据结构, 可以选择不同的方法来提高读取效率.

以下是使用NPOI多线程读取Excel的实例:

using System.Threading.Tasks;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;

// ...

public void ReadExcelWithMultipleThreads(string filePath, string worksheetName)
{
    var workbook = new XSSFWorkbook(filePath);
    var worksheet = workbook.GetSheet(worksheetName);
    var range = new CellRangeAddress(1, worksheet.LastRowNum, 0, worksheet.GetRow(0).LastCellNum - 1); // 获取单元格范围

    // 将单元格范围中的数据分块, 每块1000行
    var chunks = range.Chunks(1000);
    var tasks = new List<Task>();

    foreach (var chunk in chunks)
    {
        var task = Task.Run(() =>
        {
            for (var i = chunk.FirstRow; i <= chunk.LastRow; i++)
            {
                var row = worksheet.GetRow(i);
                if (row == null) continue;

                for (var j = chunk.FirstColumn; j <= chunk.LastColumn; j++)
                {
                    var cell = row.GetCell(j);
                    if (cell == null) continue;

                    var cellValue = cell.ToString();
                    // 处理单元格数据
                }
            }
        });
        tasks.Add(task);
    }

    Task.WaitAll(tasks.ToArray());

    workbook.Close();
}

在此示例中, 使用CellRangeAddress.Chunks()方法将单元格范围分成多个块, 每个块包含1000行. 然后, 使用Task.Run()方法将每个块的读取操作分配给一个线程. 最后, 使用Task.WaitAll()等待所有线程完成后关闭Excel工作簿.

请注意, 在此示例中, 仅使用了一个工作表. 如果要同时读取多个工作表, 则需要根据需要进行修改.

CellRangeAddress.Chunks()方法在NPOI的2.5.x版本及以上版本中可以使用。

CellRangeAddress在NPOI中的命名空间为NPOI.SS.Util。

感谢您的提醒,确实在NPOI的早期版本中没有CellRangeAddress.Chunks()方法。如果您使用的是早期版本,可以考虑手动分块,或者升级NPOI到2.5.x及以上版本。在NPOI 2.5.x及以上版本中,CellRangeAddress.Chunks()方法可以用于将单元格范围分成多个块,以便于在多线程环境下高效读取Excel文件。

另外,CellRangeAddress的命名空间是NPOI.SS.Util。

以下是手动实现分块的代码,达到Chunks()方法的效果:

using System.Collections.Generic;
using NPOI.SS.Util;

// ...

public void ReadExcelManually(string filePath, string worksheetName)
{
    var workbook = new XSSFWorkbook(filePath);
    var worksheet = workbook.GetSheet(worksheetName);
    var range = new CellRangeAddress(1, worksheet.LastRowNum, 0, worksheet.GetRow(0).LastCellNum - 1); // 获取单元格范围
    var chunkSize = 1000; // 每个块的大小
    var chunks = new List<CellRangeAddress>();

    // 将单元格范围分成多个块, 每个块包含chunkSize行
    for (var i = range.FirstRow; i <= range.LastRow; i += chunkSize)
    {
        var firstRow = i;
        var lastRow = i + chunkSize - 1;
        if (lastRow > range.LastRow) lastRow = range.LastRow;
        chunks.Add(new CellRangeAddress(firstRow, lastRow, range.FirstColumn, range.LastColumn));
    }

    foreach (var chunk in chunks)
    {
        for (var i = chunk.FirstRow; i <= chunk.LastRow; i++)
        {
            var row = worksheet.GetRow(i);
            if (row == null) continue;

            for (var j = chunk.FirstColumn; j <= chunk.LastColumn; j++)
            {
                var cell = row.GetCell(j);
                if (cell == null) continue;

                var cellValue = cell.ToString();
                // 处理单元格数据
            }
        }
    }

    workbook.Close();
}

在此示例中,我们手动将单元格范围分成多个块,每个块包含1000行,然后使用嵌套循环逐个读取单元格,并在每个单元格上执行必要的操作。需要注意的是,手动分块可能需要更多的代码,但是它可以在NPOI的早期版本中使用。

不过,可能需要根据自己的具体情况进行调整。如果你的数据结构与示例代码不同,你可能需要修改块的大小或循环的索引。

NPOI读写Excel NPOI读写Excel 1、整个Excel表格叫做工作表:WorkBook(工作薄),包含的叫页(工作表):Sheet;行:Row;单元格Cell。 2、NPOI是POI的C#版本,NPOI的行和列的index都是从0开始 3、POI读取Excel有两种格式一个是HSSF,另一个是XSSF。 HSSF和XSSF的区别如下: HSSF is the POI Project's pure Java implementation of the Excel '97(-2007) file format. XS 阅读详情

相关推荐

C#如何用NPOI创建、读取、更新Excel文件

NPOI Workbook ISheet IRow ICell

weixin_44279482的博客 5505

[编程工具]使用NPIO(C#)读取xls,xlsx(Excel)表格

提供了NPIO对excel的简单操作和一个样例,以供参考

Blue_carrot_的博客 5807

C#【必备技能篇】使用NPOI实现对excel的读取和写入

C#【必备技能篇】使用NPOI实现对excel的读取和写入

星Yeah 的博客 6857

C# NPOI操作Excel汇总

C#操作Excel有多种方法,如通过数据库的方式来读写Excel的OleDb方式,但是OleDb方式需要安装微软office,还可以通过COM组件方式操作Excel,也需要安装微软Excel。如果不想安装微软办公套餐可以使用ClosedXML、EPPlus、NPOI。本文主要是介绍NPOI的常用使用方法。Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。

小龙在线 7209

NPOI库操作Excel文件实战教程

NPOI是一个开源的.NET库,用于读取和写入Microsoft Office格式的文件,特别适用于处理Excel文件(.xls和.xlsx格式)。它提供了广泛的API接口,使得开发者可以轻松地在.NET应用程序中操作Excel文档,而无需安装Microsoft Office。NPOI支持创建、读取、修改和写入Excel文档的多种操作。包括但不限于:- 简单和复杂的单元格操作(如读取单元格值,设置单元格样式)- 行和列的增删改查- 创建和操作工作表(Sheet)

weixin_36483050的博客 1529

C# 使用NPOI库操作Excel文件实战教程

C#(读作C Sharp)是一种由微软公司开发的现代、类型安全的面向对象的编程语言。作为.NET框架的一部分,C#以其简洁的语法、强大的功能和跨平台特性,成为了企业和开发者的首选。自从2002年首次推出以来,C#不断进化,至今已经发展到多个版本,每个新版本都带来了新的特性和改进。NPOI是.NET平台上一个开源库,用于处理Microsoft Office文档格式。

weixin_27645199的博客 1131

CWinform使用NPOI导入Excel数据:简化数据处理,提升工作效率

CWinform使用NPOI导入Excel数据:简化数据处理,提升工作效率 去发现同类优质开源项目:https://gitcode.com/ CWinform使用NPOI导入Excel数据,一款高效便捷的C# Winform环境下数据导入工具,助您轻松应对Excel数据处理挑战。 项目介绍 CWinform使用NPOI导入Excel数据是一款基于C# Winform应用程序的开源项目,它利用NPO...

gitblog_06726的博客 781

.NET中NPOI库的Excel文件读写指南

NPOI是.NET环境中用于操作Microsoft Office格式文件的一个库,支持多种Office文件格式,包括但不限于Excel、Word、PowerPoint和Outlook等。使用NPOI,开发者可以在不需要安装Microsoft Office的情况下读写这些文件,非常适合进行办公自动化处理和数据导出入任务。NPOI支持在Excel中使用公式进行计算,并可以设置数据验证以确保用户输入的数据符合预期。下面是如何在NPOI中使用公式和数据验证的示例:// 创建一个单元格并设置公式。

weixin_32836713的博客 803

NPOI读取Excel并用DataGridView显示:高效数据处理新工具

NPOI读取Excel并用DataGridView显示:高效数据处理新工具 去发现同类优质开源项目:https://gitcode.com/ 在众多数据处理工具中,NPOI读取Excel并用DataGridView显示无疑是一款独特且实用的开源项目。本文将详细介绍该项目的核心功能、技术背景、应用场景以及项目特点,帮助您快速掌握这一高效的数据处理方法。 项目介绍 NPOI读取Excel并用DataG...

gitblog_06743的博客 315

C# NPOI库开发指南:构建Excel处理DLL

NPOI库是.NET平台下进行Microsoft Office文档处理的一个开源项目,允许开发者在不安装Microsoft Office的情况下读取和创建各种类型的Microsoft Office文档,特别是Excel文件。它对.NET开发者来说是一个功能强大的工具,能够简化Office文档处理的操作。

weixin_34640289的博客 1134

精通NPOI:在.NET中实现Excel文件的高效读写

NPOI是一个基于.NET平台的开源库,主要用于读写Microsoft Office格式的文件。它对MS Office的文件格式提供了全面的支持,如Excel、Word、PowerPoint等。与传统的Office COM组件相比,NPOI无需安装Office即可操作这些文件,极大的简化了操作流程。在.NET开发环境中,DataTable是用于存储数据的标准组件之一,它支持行和列的数据结构,非常适合用于处理结构化数据。一个DataTable对象可以包含多个DataRow对象和。

weixin_35899324的博客 1315

C#开发者必备:NPOI-Excel数据导入导出教程及实例

NPOI是一个基于.NET的库,用于处理Microsoft Office格式文件。它支持读写Microsoft Word(.doc/.docx)、Excel(.xls/.xlsx/.xlsm)和PowerPoint(.ppt/.pptx)等文件格式。NPOI提供了一种与文件格式无关的方式来处理Office文件,使得开发者可以在不安装Microsoft Office的情况下,轻松创建和管理文档内容。MVC设计模式是一种广泛用于开发用户界面的应用程序架构模式,它促进了程序的分层开发,每个层负责特定的任务。

weixin_34885746的博客 1538

掌握NPOI:高效读写Excel的.NET库(含xls/xlsx支持)

本文还有配套的精品资源,点击获取 简介:NPOI是一个开源库,用于处理Microsoft Office文件,尤其是Excel文档,支持xls和xlsx两种格式。本压缩包包含NPOI系列DLL文件和XML文档,包括对Excel的基本读写功能、对OOXML格式的支持、Open XML格式的定义、以及.NET平台上流行的压缩和解压缩库ICSharpCode.SharpZipLib...

weixin_42588672的博客 2599

NPOI:高效操作Excel的利器

NPOI:高效操作Excel的利器 去发现同类优质开源项目:https://gitcode.com/ 在处理Excel文档时,尤其是面对复杂需求,如自定义列样式、合并单元格、字体格式化(如加粗)等个性化场景,NPOI 是一个不可或缺的工具。本资源提供了利用 NPOI 进行数据导出和Excel操作的示例,特别适合那些需要精细控制Excel文档格式的应用。 核心功能点: 全面读取:能够完整地读取Ex...

gitblog_09743的博客 608

C#封装NPOI实现Excel导入导出功能

NPOI是一个开源的.NET库,它支持在不依赖Microsoft Office的情况下读写Excel文件,包括较低版本的.xls和较新版本的.xlsx格式。NPOI库使用简单,功能强大,非常适合需要处理Excel文件的.NET开发者。策略模式的核心是策略接口,它定义了一个算法家族,并让它们之间可以互相替换。在导入导出场景中,我们可以定义一个简单的接口来规范导入导出的行为:配置列(ExcelConfigColumn)是实现灵活的Excel文件导入导出功能的关键组件。

weixin_33610780的博客 1053

C#使用NPOI库实现Excel文件导入导出的全面教程

NPOI库是一个在.NET平台上操作Microsoft Office文档的开源库,它提供了一种方式来创建、修改和显示Office文档,而无需安装Microsoft Office。它的主要特性包括:支持多种Office格式:NPOI不仅可以处理旧版本的Excel格式(.xls),还支持最新的Excel格式(.xlsx)。不依赖Office:使用NPOI可以避免因为安装了不同版本的Microsoft Office而出现格式不兼容问题。

weixin_35516273的博客 1291

C NPOI 导入和导出EXCEL

C# NPOI 导入和导出EXCEL 去发现同类优质开源项目:https://gitcode.com/ 本仓库提供了一个C#使用NPOI库对EXCEL文件进行导入、显示和导出的示例资源。通过此示例,您可以轻松实现以下功能: 读取EXCEL文件内容; 显示EXCEL文件数据; 导出数据至新的EXCEL文件。 功能特点 支持多种EXCEL文件格式,如.xls和.xlsx; 提供详细的操作步骤,便...

gitblog_06707的博客 283

C#与Npoi库实现Excel自动化处理

Npoi库作为.NET平台上的开源库,提供了读写Microsoft Office格式文件的能力。它有几个主要的版本:NPOI.SS: 提供对Excel文件(.xls和.xlsx)中工作表(sheet)的支持。NPOI.HSSF: 专门支持旧版Excel文件格式.xls。NPOI.XSSF: 专门支持新版Excel文件格式.xlsx。适用场景- 如果您的应用需要处理较老的Excel文件,则可能需要HSSF。- 如果是较新的文件,则XSSF会是更好的选择。

weixin_29859471的博客 1041
上一篇: Oracle数据导入到SQL Server的详细步骤和注意事项
下一篇: WPFCommand详解C#上位机学起来
Documentlv
博客等级 码龄14年 55粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值