ASP.NET读取Excel哪种方法好?三种读取教程详解

在ASP.NET开发中高效读取Excel数据常见三种方法:使用OleDb连接字符串直接查询、借助EPPlus开源库解析或通过NPOI组件处理,下面通过完整代码示例详解实现方案。

ASP.NET读取Excel哪种方法好?三种读取教程详解


OleDb连接器(适合简单数据提取)

原理:将Excel文件视为数据库,通过ADO.NET执行SQL查询

// 连接字符串需区分Excel版本
string connStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 12.0;HDR=YES'";
using (OleDbConnection conn = new OleDbConnection(string.Format(connStr, filePath)))
{
    // 查询Sheet1工作表
    OleDbDataAdapter da = new OleDbDataAdapter("SELECT  FROM [Sheet1$]", conn);
    DataTable dt = new DataTable();
    da.Fill(dt);  // 数据加载到DataTable
    // 遍历数据行
    foreach (DataRow row in dt.Rows)
    {
        Console.WriteLine(row["ProductName"] + " | " + row["Price"]);
    }
}

适用场景

  • 快速读取标准格式的xls/xlsx文件
  • 无需处理复杂单元格格式
  • 开发环境已安装Access Database Engine

EPPlus库(推荐处理xlsx格式)

优势:无需Office依赖,支持公式计算与高级样式

ASP.NET读取Excel哪种方法好?三种读取教程详解

// 通过NuGet安装EPPlus
using (ExcelPackage package = new ExcelPackage(new FileStream(filePath, FileMode.Open)))
{
    ExcelWorksheet worksheet = package.Workbook.Worksheets[0];
    int rowCount = worksheet.Dimension.Rows;
    // 从第2行开始读取(跳过标题)
    for (int row = 2; row <= rowCount; row++)
    {
        string id = worksheet.Cells[row, 1].GetValue<string>();
        DateTime orderDate = worksheet.Cells[row, 2].GetValue<DateTime>();
        // 处理合并单元格
        if(worksheet.Cells[row,3].Merge) 
        {
            string mergedValue = worksheet.MergedCells[row,3].First().Value.ToString();
        }
    }
}

性能优化技巧

// 禁用公式计算提升读取速度
package.Workbook.Calculate();
package.Workbook.CalcMode = ExcelCalcMode.Manual;

NPOI组件(最佳跨平台方案)

核心价值:同时支持.xls和.xlsx,兼容Linux环境

// NuGet安装NPOI
IWorkbook workbook;
using (FileStream fs = new FileStream(filePath, FileMode.Open))
{
    workbook = Path.GetExtension(filePath).ToLower() == ".xls" 
        ? new HSSFWorkbook(fs)   // 处理xls
        : new XSSFWorkbook(fs);  // 处理xlsx
}
ISheet sheet = workbook.GetSheetAt(0);
for (int rowIdx = 0; rowIdx <= sheet.LastRowNum; rowIdx++)
{
    IRow row = sheet.GetRow(rowIdx);
    if (row == null) continue;
    // 获取单元格值(自动识别类型)
    ICell cell = row.GetCell(0);
    string cellValue = cell?.ToString() ?? string.Empty;
    // 处理日期格式
    if (cell.CellType == CellType.Numeric && DateUtil.IsCellDateFormatted(cell))
    {
        DateTime dateValue = cell.DateCellValue;
    }
}

内存管理关键

ASP.NET读取Excel哪种方法好?三种读取教程详解

// 使用事件驱动模式处理超大文件
public void ProcessLargeExcel(string path)
{
    using (var fs = new FileStream(path, FileMode.Open))
    {
        IExcelDataReader reader = ExcelReaderFactory.CreateReader(fs);
        while (reader.Read())  // 逐行流式读取
        {
            // 实时处理单行数据
        }
    }
}

方案选型指南

特性 OleDb EPPlus NPOI
文件格式支持 xls/xlsx 仅xlsx xls/xlsx
外部依赖 需ACE驱动
内存消耗 中等 可流式处理
样式/公式支持 基础 完整 完整
跨平台能力 Windows only 跨平台 跨平台

决策建议

  1. 需处理旧版.xls → 选择NPOI
  2. 服务端无Office环境 → 排除OleDb
  3. 100MB+超大文件 → 采用NPOI事件流模式
  4. 需生成复杂报表 → EPPlus为首选

避坑提示:使用EPPlus时需注意GPL许可证限制,商业项目建议购买商业授权,NPOI的GetCell()方法可能返回null,务必做空值防御。

首发原创文章,作者:王坚‌,如若转载,请注明出处:https://test.idctop.com/article/16259.html

(0)
如何用OWC操作Excel?ASPNet实例代码教程
上一篇 2026年2月8日 11:34
如何实现aspx定时刷新页面?ASP.NET页面自动刷新技巧详解
下一篇 2026年2月8日 11:37

相关推荐

  • Excel表如何快速生成目录?一键自动提取目录方法

    利用Excel生成目录最核心的方法是使用“名称管理器”配合HYPERLINK函数,或者在Excel 365及WPS新版中直接使用内置的“生成目录”插件功能,前者兼容性好,后者操作更直观,很多职场人在处理几十页甚至上百页的Excel报表时,最头疼的就是找不到具体数据在哪,手动翻找不仅效率低,还容易出错,只要掌握几……

    程序开发 2026年7月8日
    22710
  • VB串口开发如何快速实现通信?,vb串口开发入门教程

    VB串口开发实战指南:高效连接硬件世界在工业控制、仪器通信和嵌入式系统领域,VB串口开发是连接计算机与硬件设备的黄金桥梁,通过MSComm控件,开发者可快速构建稳定可靠的串行通信应用,实现数据采集和设备控制的核心功能, 核心组件:MSComm控件基础引入控件:通过工程->部件菜单,勾选”Microsoft……

    2026年2月16日
    19400
  • 开发者沙龙有哪些值得参加的?开发者沙龙活动推荐

    开发者 沙龙是技术团队实现知识沉淀、生态共建与人才孵化的高效入口,其核心价值在于将分散的个体经验转化为可复用的组织资产,并推动技术决策与业务目标的深度对齐,以下从四大维度展开说明:开发者 沙龙的三大核心价值加速技术决策闭环每场活动平均缩短决策周期30%(据2023年国内头部互联网企业内部调研数据)通过真实场景复……

    程序开发 2026年4月17日
    6200
  • 为什么Excel宏无法运行?Excel宏启用安全设置

    Excel宏无法运行通常是因为安全性设置阻止了代码执行、文件未保存为启用宏的格式,或VBA项目被锁定,通过调整信任中心设置并检查文件格式即可解决,排查宏无法运行的首要原因:安全设置与文件格式当你在Excel中点击“运行”按钮却毫无反应,或者弹出安全警告时,大多数情况下并非代码本身有错,而是Excel的“门卫”把……

    2026年7月5日
    15710
  • 同父域下如何实现SSO单点登录?

    在数字化转型的深水区,企业级应用架构正经历从单体向微服务、从本地部署向混合云迁移的深刻变革,在此背景下,统一身份认证不再仅仅是安全合规的底线要求,更是提升用户体验、降低运维成本的核心基础设施,在众多解决方案中,共同父域下的单点登录(SSO)因其架构简洁、安全性高、用户体验无缝等优势,成为构建现代企业数字门户的首……

    2026年6月22日
    2200
  • 服务器维护需要学习哪些技能,怎么快速入门

    服务器维护需要学习操作系统、网络、安全、脚本和监控工具,核心是掌握Linux和Windows服务器的日常运维命令及故障排查能力,无论是刚入行的IT新人还是转行做运维,底层逻辑都一样:先搭好知识骨架,再填充具体工具,下面按实战优先级拆解,帮你少走弯路,服务器维护需要学什么?必备技能拆解操作系统:Linux是必修……

    2026年7月25日
    1100
  • 韩国CN2原生IP火爆来袭是真的吗?韩国CN2原生IP价格多少

    819云互联推出的韩国CN2原生IP服务,凭借低延迟和高稳定性,成为跨境业务加速的首选方案,目前库存紧张,建议立即锁定资源,为什么韩国CN2原生IP成为跨境网络新宠在跨境业务日益频繁的当下,网络连接的稳定性直接决定了业务效率,许多用户发现,普通的国际线路往往在高峰时段出现严重的丢包和延迟波动,而韩国CN2原生I……

    2026年6月30日
    1400
  • 广告机开发怎么做,广告机软件开发费用多少

    广告机开发的本质是构建一个高稳定性的多媒体信息发布系统,其核心在于底层系统的深度定制、多媒体播放引擎的优化以及远程通信协议的健壮性,成功的广告机程序开发不仅仅是播放视频,更是要确保设备在无人值守环境下能够7×24小时稳定运行,并能即时响应云端下发的指令,这要求开发者从硬件驱动层、应用框架层到云端服务层进行全链路……

    2026年2月16日
    17700
  • ajax返回值js乱码怎么办?ajax返回中文乱码解决方法

    AJAX返回值出现JS乱码的核心原因是服务器响应头Content-Type编码设置与前端解析编码不一致,通常通过统一设置为UTF-8并检查BOM头即可彻底解决,在Web开发中,前后端数据交互是日常操作,但AJAX请求返回数据时出现乱码,往往让开发者排查半天,这不仅仅是字符显示问题,更涉及HTTP协议底层的数据传……

    2026年5月30日
    4400
  • 如何选择分布式部署方案?,分布式部署方案的架构设计有哪些?

    分布式部署方案设计指南分布式部署旨在通过将应用程序部署在多个物理或虚拟节点上,实现系统的高可用性、高扩展性和容错能力,以下是一个完整的分布式部署方案框架,分布式架构的核心目标高可用性 (High Availability): 通过冗余设计消除单点故障 (SPOF),确保系统在部分节点失效时仍能正常运行,可扩展性……

    2026年7月13日
    15400

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

评论列表(3条)

  • 马酷7615
    马酷7615 2026年2月16日 04:39

    这篇文章写得非常好,内容丰富,观点清晰,让我受益匪浅。特别是关于使用的部分,分析得很到位,给了我很多新的启发和思考。感谢作者的精心创作和分享,期待看到更多这样高质量的内容!

  • 山山5160
    山山5160 2026年2月16日 06:19

    读了这篇文章,我深有感触。作者对使用的理解非常深刻,论述也很有逻辑性。内容既有理论深度,又有实践指导意义,确实是一篇值得细细品味的好文章。希望作者能继续创作更多优秀的作品!

  • cuteuser768
    cuteuser768 2026年2月16日 07:39

    读了这篇文章,我深有感触。作者对使用的理解非常深刻,论述也很有逻辑性。内容既有理论深度,又有实践指导意义,确实是一篇值得细细品味的好文章。希望作者能继续创作更多优秀的作品!