AspNet怎么用Npoi导入导出Excel? | Asp.Net Excel导入导出方法

Asp.Net使用Npoi导入导出Excel的方法

在Asp.Net应用程序中处理Excel文件是常见需求,NPOI作为免费、开源且强大的.NET库,完美支持xls与xlsx格式,为数据导入导出提供了高效解决方案。

AspNet怎么用Npoi导入导出Excel

.net,C#,winform NPOI导入导出Excel,包括2003和2007以上版本
加载中
.net,C#,winform NPOI导入导出Excel,包括2003和2007以上版本

环境准备与基础配置

  1. 安装NPOI库
    通过NuGet包管理器安装必需包:

    Install-Package NPOI
    Install-Package NPOI.OOXML   # 支持xlsx格式
    Install-Package NPOI.OpenXml4Net   # 依赖项
  2. 引用命名空间

    using NPOI.SS.UserModel;
    using NPOI.XSSF.UserModel;   // xlsx处理
    using NPOI.HSSF.UserModel;   // xls处理
    using System.IO;

Excel数据导出实战(DataTable → Excel文件)

public void ExportToExcel(DataTable dataTable, string filePath)
{
    IWorkbook workbook;
    // 根据扩展名判断创建xls或xlsx工作簿
    if (Path.GetExtension(filePath).Equals(".xlsx", StringComparison.OrdinalIgnoreCase))
        workbook = new XSSFWorkbook();
    else
        workbook = new HSSFWorkbook();
    ISheet sheet = workbook.CreateSheet("Sheet1");
    // 创建标题行
    IRow headerRow = sheet.CreateRow(0);
    for (int i = 0; i < dataTable.Columns.Count; i++)
    {
        headerRow.CreateCell(i).SetCellValue(dataTable.Columns[i].ColumnName);
    }
    // 填充数据行
    for (int rowIdx = 0; rowIdx < dataTable.Rows.Count; rowIdx++)
    {
        IRow dataRow = sheet.CreateRow(rowIdx + 1);
        for (int colIdx = 0; colIdx < dataTable.Columns.Count; colIdx++)
        {
            dataRow.CreateCell(colIdx).SetCellValue(dataTable.Rows[rowIdx][colIdx].ToString());
        }
    }
    // 自适应列宽(关键优化)
    for (int i = 0; i < dataTable.Columns.Count; i++)
    {
        sheet.AutoSizeColumn(i);
    }
    // 写入文件流
    using (FileStream fs = new FileStream(filePath, FileMode.Create))
    {
        workbook.Write(fs);
    }
}

关键优化点:

  • 格式自适应:根据文件扩展名自动选择HSSF(xls)或XSSF(xlsx)工作簿
  • 性能提升:使用AutoSizeColumn自动调整列宽提升可读性
  • 内存管理:严格使用using语句确保文件流及时释放

Excel数据精准导入(Excel文件 → DataTable)

public DataTable ImportFromExcel(string filePath, bool hasHeader = true)
{
    using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
    {
        IWorkbook workbook;
        // 根据文件头判断格式
        if (Path.GetExtension(filePath).Equals(".xlsx", StringComparison.OrdinalIgnoreCase))
            workbook = new XSSFWorkbook(fs);
        else
            workbook = new HSSFWorkbook(fs);
        ISheet sheet = workbook.GetSheetAt(0); // 读取第一个工作表
        DataTable dataTable = new DataTable();
        IRow headerRow = sheet.GetRow(0);
        int cellCount = headerRow.LastCellNum;
        // 构建DataTable列结构
        for (int i = 0; i < cellCount; i++)
        {
            string columnName = hasHeader ? 
                headerRow.GetCell(i)?.ToString() : $"Column{i}";
            dataTable.Columns.Add(columnName ?? $"Column{i}");
        }
        // 确定数据起始行(是否跳过标题行)
        int startRow = hasHeader ? 1 : 0;
        for (int rowIdx = startRow; rowIdx <= sheet.LastRowNum; rowIdx++)
        {
            IRow row = sheet.GetRow(rowIdx);
            if (row == null) continue;
            DataRow dataRow = dataTable.NewRow();
            for (int colIdx = 0; colIdx < cellCount; colIdx++)
            {
                dataRow[colIdx] = row.GetCell(colIdx)?.ToString() ?? string.Empty;
            }
            dataTable.Rows.Add(dataRow);
        }
        return dataTable;
    }
}

异常处理重点:

  • 空行跳过:遇到空行自动跳过避免空引用异常
  • 空单元格处理:使用操作符安全访问单元格
  • 格式智能识别:通过文件扩展名自动匹配处理引擎

进阶技巧与性能优化

  1. 大文件分块处理

    AspNet怎么用Npoi导入导出Excel

    // 使用SXSSFWorkbook处理百万级数据
    SXSSFWorkbook workbook = new SXSSFWorkbook(-1); // 启用临时文件缓冲
    // 每写入100行刷新磁盘缓存
    workbook.SetCompressTempFiles(true); 
  2. 单元格样式深度定制

    ICellStyle headerStyle = workbook.CreateCellStyle();
    headerStyle.FillForegroundColor = IndexedColors.Grey25Percent.Index;
    headerStyle.FillPattern = FillPattern.SolidForeground;
    IFont font = workbook.CreateFont();
    font.FontName = "微软雅黑";
    font.IsBold = true;
    headerStyle.SetFont(font);
    // 应用样式到标题行
    foreach (ICell cell in headerRow.Cells)
    {
        cell.CellStyle = headerStyle;
    }
  3. 公式计算支持

    cell.SetCellFormula("SUM(B2:B10)"); // 设置计算公式
    // 触发公式重新计算
    IFormulaEvaluator evaluator = workbook.GetCreationHelper().CreateFormulaEvaluator();
    evaluator.EvaluateAll(); 

常见陷阱与解决方案

  1. 内存溢出问题

    • 场景:处理100MB+的xlsx文件
    • 方案:改用SXSSFWorkbook流式处理
      SXSSFWorkbook wb = new SXSSFWorkbook(100); // 内存保留100行
  2. 日期格式错乱

    • 根源:Excel内部以浮点数存储日期
    • 修复:
      if (DateUtil.IsCellDateFormatted(cell))
      {
        DateTime dateValue = cell.DateCellValue;
      }
  3. 字体渲染异常

    AspNet怎么用Npoi导入导出Excel

    • 现象:Linux环境中文乱码
    • 方案:显式注册字体
      Environment.SetEnvironmentVariable("FONTCONFIG_PATH", "/usr/share/fonts");

关键技术指标对比
| 处理方式 | 10000行耗时 | 内存峰值 | 功能完整性 |
|—————-|————-|———-|————|
| NPOI (XSSF) | 1.8s | 210MB | ★★★★☆ |
| NPOI (SXSSF) | 2.1s | 45MB | ★★★★☆ |
| EPPlus | 1.5s | 190MB | ★★★★☆ |
| OpenXML SDK | 3.2s | 60MB | ★★☆☆☆ |


NPOI在Asp.Net中实现了Excel处理的高自由度与深度控制,特别适合需要精细操作单元格、公式或处理旧版xls的场景,当您需要处理10万行以上的数据时,是否考虑过采用分页加载机制?在实际项目中您遇到的最棘手的Excel导入导出问题是什么?欢迎分享您的实战经验!

首发原创文章,作者:王坚‌,如若转载,请注明出处:https://idctop.com/aspnet%e6%80%8e%e4%b9%88%e7%94%a8npoi%e5%af%bc%e5%85%a5%e5%af%bc%e5%87%baexcel%ef%bc%9f-asp-net-excel%e5%af%bc%e5%85%a5%e5%af%bc%e5%87%ba%e6%96%b9%e6%b3%95/

赞 (0)
Catch2框架轻量吗?单头文件C++测试工具深度测评
上一篇 2026年2月12日 19:31
国内大宽带高防服务器哪里买?租用高防服务器多少钱一月
下一篇 2026年2月12日 19:34

相关推荐

  • Excel累积曲线的制作方法是什么,关键步骤有哪些?

    Excel累积曲线是数据分析中展示数据累积分布趋势的核心图表,掌握其制作方法能显著提升报表的专业性与可读性,excel累积曲线怎么做:核心概念与数据准备在动手绘制之前,必须先理解累积曲线到底在表达什么,它是一条从0%逐渐上升到100%的曲线,横轴代表数据类别或数值区间,纵轴代表累积到该点的百分比或绝对数值,行业……

    2026年7月15日
    1300
  • AI智能名片是什么,AI智能名片如何快速裂变获客

    在数字化商业生态中,商务社交的效率直接决定了企业获客的成本与转化的上限,传统的纸质名片因其信息静态、难以追踪、易丢失等弊端,已无法满足现代销售管理的精细化需求,核心结论在于:ai智能名片不仅仅是一个电子化的联系方式展示工具,它本质上是一套基于大数据与人工智能技术的微型CRM(客户关系管理)系统与销售自动化引擎……

    2026年2月21日
    14800
  • 北京多分支访问慢怎么解决,租用中心节点服务器如何汇聚?

    北京多分支访问慢的根源在于各分支独立直连总部或公有云,链路质量参差不齐,而租用中心节点服务器做流量汇聚,能把分散的访问请求统一收口到高带宽、低延迟的中转枢纽,配合智能路由和缓存,从架构上解决跨网、跨地域的延迟问题,中心节点服务器汇聚如何解决北京多分支访问慢北京的企业网络环境有个典型特征:分支多、运营商杂、跨网延……

    2026年10月14日
    000
  • 如何在Excel中返回地址,Excel返回地址的公式是什么

    在Excel中返回地址主要依赖ADDRESS函数,配合MATCH和INDEX可实现动态查找地址,这是构建高效表格的核心技能,返回地址excel函数怎么用?看这篇就够了很多人在处理Excel表格时,都遇到过需要获取某个单元格地址的场景,无论是制作动态图表、构建数据验证,还是编写复杂的嵌套公式,返回地址都是一项基础……

    2026年7月20日
    1300
  • 服务器2008STAndard是什么版本,服务器2008标准版功能特点详解

    Windows Server 2008 Standard 作为微软服务器操作系统发展史上的经典版本,至今仍在部分企业的特定业务场景中发挥着关键作用,其核心价值在于极高的系统稳定性、对传统应用软件的完美兼容性以及经过长期验证的安全架构,尽管微软官方已经停止了主流支持和扩展支持,但对于许多不愿或无需进行大规模IT架……

    2026年4月6日
    7700
  • 英特尔服务器怎么做riud0,RAID0磁盘阵列怎么配置

    英特尔服务器配置RAID 0,核心路径是进BIOS开启VMD/SATA RAID模式,再用Ctrl+I或英特尔管理软件建阵列,全程大概10分钟,但性能翻倍的同时数据安全性几乎为零,英特尔服务器怎么做RIUD0:先看懂两个前提很多朋友把“英特尔服务器”和“组装台式机”混为一谈,上来就问怎么按Ctrl+I,你得先确……

    2026年10月6日
    100
  • [ASP.NET提醒怎么调试?]-调试异常提醒的解决方案大全,[ASP.NET提醒功能报错怎么办?]-常见提醒问题排查与修复指南

    ASP.NET提醒:提升用户体验的关键功能ASP.NET提醒功能是现代Web应用不可或缺的部分,它通过实时通知用户关键事件(如新消息、系统更新或错误警报),显著提升交互效率和用户满意度,在ASP.NET框架中,实现高效提醒需要结合技术工具如SignalR、AJAX和电子邮件通知,同时确保安全性和性能优化,核心在……

    2026年2月11日
    11830
  • 戴尔官网怎么找到s150服务器阵列卡驱动?,驱动怎么下载

    在戴尔官网找到S150服务器的阵列卡驱动,直接访问官方支持页面,输入服务标签或选择PowerEdge T150/R150等对应型号,在“驱动与下载”分类中筛选“SAS RAID”或“Serial ATA”控制器,即可找到适用于S150软阵列的完整驱动包,戴尔S150阵列卡驱动下载的官方路径通过服务标签快速定位驱……

    2026年7月25日
    800
  • 服务器一线二线到底怎么看,服务器一线二线有什么区别?

    服务器一线二线没有官方标准,本质是行业里按品牌知名度、市场占有率、售后体系成熟度形成的口头分类,一线品牌靠综合服务能力立足,二线品牌靠性价比和灵活定制取胜,服务器一线二线怎么区分?先搞懂这个说法的来源你去机房转一圈,跟运维老师傅聊服务器,大概率会听到“一线”“二线”这种说法,它不是工信部或者哪个标准委员会定的等……

    2026年10月5日
    000
  • 服务器cc攻击防护怎么做,高防服务器能防住吗

    服务器CC攻击防护的核心在于精准识别恶意请求与正常流量,并构建多层级的动态防御体系,单纯依赖带宽堆砌或单一防火墙策略已无法应对当前高度模拟化的应用层攻击,唯有结合智能行为分析、频率限制与弹性架构,才能从根本上保障业务连续性,深入剖析CC攻击的本质与危害CC攻击(Challenge Collapsar)不同于传统……

    2026年4月4日
    18900

发表回复

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

评论列表(1条)

  • smart491
    smart491 2026年2月19日 22:28

    终于不用为Excel那些莫名其妙的错误码头疼了,NPOI确实好用。