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://test.idctop.com/article/26692.html

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

相关推荐

  • AI智能监控是干什么的,智能监控系统有什么用?

    AI智能监控的核心在于利用计算机视觉和深度学习技术,将传统被动的视频录制转变为主动的实时感知与智能分析系统,它不再仅仅依赖人工盯着屏幕回看录像,而是让摄像头具备了“看懂”和“思考”的能力,能够自动识别画面中的异常行为、物体特征及潜在风险,并实时发出预警,从而实现从“事后追溯”向“事前预防”和“事中干预”的根本性……

    2026年2月16日
    21800
  • 坚果g9连接服务器失败怎么解决,是什么原因?

    当坚果g9投影仪出现“连接服务器失败”提示,绝大多数情况并非硬件故障,而是网络环境、固件版本或服务器临时状态导致的,按照以下步骤排查,通常能在几分钟内恢复正常,无需送修,坚果g9连接服务器失败的原因搞清楚问题源头,才能对症下药,坚果g9投影仪依赖稳定的网络与后台服务器完成激活、内容加载和系统更新,一旦某个环节出……

    2026年8月20日
    1100
  • 莱卡云韩国CN2 VPS好用吗?莱卡云适合做跨境电商吗

    莱卡云韩国原生CN2 VPS在跨境业务中表现稳健,其低延迟和高稳定性使其成为境外电商及游戏服搭建的优质选择,但价格偏高且需自备网络优化,在跨境电商和海外业务部署的领域,服务器节点的选择直接决定了业务的生死,对于需要连接中国大陆用户或进行跨境数据传输的场景,普通的海外VPS往往面临丢包率高、延迟波动大的痛点,莱卡……

    2026年6月27日
    1600
  • 公司网站云服务器怎么买?云服务器租用费用多少钱一年

    在数字化转型的浪潮中,服务器稳定性与访问速度直接决定了企业网站的生存质量与用户体验,对于初创企业、中小企业乃至大型集团而言,选择一款性价比极高且性能卓越的云服务器,是降低IT成本、提升业务效率的关键决策,经过对主流云服务商的深度测试与长期跟踪,我们为您呈现这份关于高性价比云服务器的专业测评报告,助您在2026年……

    2026年6月24日
    2000
  • 服务器如何回调客户端?服务器回调客户端失败怎么解决

    服务器回调客户端是指服务端在完成特定任务或状态变更后,主动通过HTTP、WebSocket等协议向客户端发起请求以推送最新数据的通信机制,其核心价值在于打破传统轮询带来的高延迟与资源浪费,实现实时性交互,在传统的Web开发模式中,客户端往往需要不断向服务器发送请求以获取最新状态,这种方式不仅消耗大量带宽,还导致……

    2026年7月12日
    5500
  • AIoT最新战报有哪些?AIoT行业发展现状分析

    AIoT行业正处于从“连接爆发”向“智能价值兑现”跨越的关键分水岭,2024年最新产业数据显示,单纯追求设备连接数的增长模式已触及天花板,以大模型为代表的生成式AI技术正在重塑物联网的底层逻辑,“边缘算力+垂直大模型”成为产业竞争的制高点,企业若不能在端侧推理与场景化解决方案上建立壁垒,将面临被淘汰的风险, 市……

    2026年3月21日
    10600
  • Linux Vim开发环境配置教程?高效搭建Linux Vim环境指南

    Linux Vim 开发环境终极配置指南Vim 是 Linux 开发者的效率引擎,深度定制后能提供媲美现代 IDE 的强大功能与流畅体验,核心基础:打造稳固起点高效编辑基石: 激活 set number relativenumber 结合行号与相对行号,set smartindent 实现智能缩进,set ta……

    2026年2月11日
    21100
  • ftp是属于一种网站发布方式_FTP

    FTP是一种经典的网站发布方式,但如今它的使用场景正在缩水——如果你还在用明文FTP上传网站,建议立刻切换到SFTP或WebDAV,FTP网站发布方式:它依然靠谱吗?FTP全称File Transfer Protocol,诞生于上世纪70年代,是互联网上最古老的文件传输协议之一,在网站建设的早期,几乎所有站长都……

    2026年8月13日
    200
  • 机构客户开发怎么做?大客户开发策略与技巧详解

    机构客户开发的核心在于构建“信任链”与“价值网”的深度融合,单纯的产品推销已难以奏效,必须转向以解决方案为导向的顾问式服务,通过专业能力建立权威,通过持续服务积累信任,最终实现从单一交易到战略合作伙伴关系的跃升, 精准画像:锁定高价值目标客群机构客户与个人客户存在本质区别,决策链条长、理性程度高、利益诉求复杂……

    2026年3月23日
    14300
  • 南京独立服务器租用交付周期多久?,验收要点有哪些?

    南京独立服务器租用的交付周期通常在1-3个工作日,验收时务必重点核对硬件配置、网络带宽和磁盘性能,否则表面上的低价可能带来业务稳定性隐患,很多用户只盯着价格和CPU型号,结果机器到手后才发现内存不对、带宽跑不满,甚至机房IP在某个运营商线路下频繁丢包,下面我从交付周期和验收要点两个核心维度拆解,帮你避开这些坑……

    程序开发 2026年8月9日
    1200

发表回复

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

评论列表(1条)

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

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