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

相关推荐

  • 共建智慧云教室如何实现?智慧教室建设方案有哪些

    在数字化转型的浪潮中,教育信息化已从单纯的硬件堆砌迈向算力与数据深度融合的新阶段,共建智慧云教室不仅是教学环境的升级,更是底层算力架构的重构,对于学校、培训机构及企业培训中心而言,选择一套稳定、高效且具备高扩展性的服务器集群,是构建高质量智慧课堂的基石,本文基于真实部署环境,对主流云服务器在教育场景下的表现进行……

    2026年6月17日
    3110
  • AIoT边缘AI芯片是什么?AIoT边缘AI芯片有哪些应用场景

    AIoT边缘AI芯片已成为驱动万物互联向万物智联跨越的关键引擎,其核心价值在于将计算力从云端下沉至网络边缘,彻底解决了延迟、带宽和隐私三大痛点,随着智能安防、自动驾驶和工业物联网的爆发式增长,数据处理不再依赖遥远的云端数据中心,而是直接在设备端或边缘网关完成,这种架构变革不仅实现了毫秒级响应,更大幅降低了网络带……

    2026年3月17日
    12500
  • ASP.NET服务器控件ID、ClientID和UniqueID有什么区别?详解三者差异及使用场景

    在ASP.NET Web Forms开发中,服务器控件的ID、ClientID和UniqueID属性是处理控件标识的核心概念,它们服务于不同的目的,理解其差异对于编写健壮、可维护且功能正确的Web应用程序至关重要,核心区别简述:ID: 这是开发者在设计时(通常在.aspx/.ascx文件中)为服务器控件指定的逻……

    程序开发 2026年2月11日
    11100
  • 微软是哪个国家开发的品牌?微软是美国开发的品牌

    微软开发 品牌的核心价值在于:它不仅是技术能力的集合体,更是企业级创新生态的底层操作系统——以开发者为中心、以生产力为锚点、以跨平台协同为路径,构建覆盖云-端-边缘的全栈式开发闭环,以下从四大维度展开说明:技术底座:企业级开发的可信基石微软构建了全球最完整的开发工具矩阵,其技术栈具备三大不可替代性:统一开发平台……

    2026年4月18日
    5200
  • 江苏电销机器人需满足哪些江苏管局要求?,怎么办理

    江苏企业选择电销机器人时,必须优先确认其符合江苏省通信管理局的规范要求,包括但不限于线路资质、用户授权机制、呼叫频次限制等,这是避免业务中断和罚款的前提,江苏电销机器人的合规要求全解析江苏省通信管理局对电销机器人的监管核心在于“外呼行为合规”与“线路资质真实”,忽略这些要求,轻则线路关停,重则追究法律责任,以下……

    2026年8月4日
    1200
  • 广州视频监控系统怎么选?广州视频监控安装公司哪家好

    2026年广州视频监控系统已全面迈入“AI多模态感知+边缘计算”时代,成为超大城市敏捷治理与精细运营的数字底座,2026广州视频监控系统演进与核心架构技术代际跃迁:从“看得见”到“懂场景”感知维度升级:传统被动记录转向主动预测,系统融合可见光、雷达与热成像,实现全天候多维感知,边缘算力下沉:边缘节点占比超75……

    2026年4月27日
    6100
  • 什么是分布式缓存机制,分布式缓存如何实现高可用性?

    分布式缓存机制通过将高频访问数据存储在内存集群中,有效缓解了数据库的I/O压力,是构建高可用、高性能分布式系统的核心组件,Redis与Memcached的区别与选择在构建缓存层时,开发者面临的首要问题是如何在 Redis 和 Memcached 之间做出决策,虽然两者都属于内存数据库,但在数据结构支持、持久化能……

    2026年7月14日
    1500
  • 个人计算机数据如何防护?电脑数据丢失怎么恢复

    在数字化转型的深水区,服务器已不再仅仅是存储数据的容器,而是企业核心资产的安全防线与业务连续性的基石,随着勒索软件攻击的频发、数据泄露事件的常态化以及合规监管(如《数据安全法》、《个人信息保护法》)的日益严格,构建“内生安全”的服务器架构已成为IT决策者不可回避的战略命题,本文旨在通过深度技术拆解与实测数据,探……

    2026年6月30日
    1410
  • mac开发linux怎么样,mac开发linux用什么工具好

    对于开发者而言,Mac 系统凭借其 Unix-like 内核特性,已成为进行 Linux 开发的最佳终端选择,核心结论在于:通过构建本地虚拟化环境、利用强大的命令行工具链以及配置高效的容器化工作流,开发者完全可以在 Mac 上获得原生的 Linux 开发体验,无需额外购置硬件即可实现无缝的跨平台开发, 这种方案……

    2026年3月23日
    9500
  • 沈阳单片机开发多少钱?单片机开发外包价格方案

    从环境搭建到项目落地核心开发环境搭建 (沈阳工程师常用配置)硬件选择:STC89C52RC (入门首选): 沈阳电子市场现货充足,资料丰富,抗干扰强,适合工业控制基础项目(如温控器、简单流水线控制),STM32F103C8T6 (主流进阶): Cortex-M3内核,性价比高,沈阳本地技术服务支持完善,适用于物……

    2026年2月9日
    17500

发表回复

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

评论列表(1条)

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

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