当前位置: 首页 > news >正文

在C#中使用NPOI将表格中的数据导入excel中

在C#中,使用NPOI库将表格数据导入Excel的操作相对直接。NPOI是.NET版本的POI,可以帮助我们在没有安装Microsoft Office的情况下读写Office文件,如xls和xlsx。以下是使用NPOI将DataTable导出到Excel的基本步骤:

  1. 创建工作簿:首先,你需要创建一个IWorkbook对象,这是Excel文件的开始。

  2. 创建工作表:使用workbook.CreateSheet("Sheet1")创建一个新的工作表。

  3. 创建表头:通过遍历DataTable的列来创建Excel文件的表头。

  4. 填充数据:遍历DataTable的每一行,并为每个单元格填充数据。

  5. 写入文件:最后,将工作簿写入到文件流中,保存为Excel文件。

下面是一个简单的示例代码,展示了如何将DataTable导出到Excel文件:

using NPOI.XSSF.UserModel; // 用于处理xlsx文件
using NPOI.HSSF.UserModel; // 用于处理xls文件
using System.Data;
using System.IO;public void ExportToExcel(DataTable dt, string filePath)
{IWorkbook workbook;// 根据文件扩展名选择工作簿类型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 < dt.Columns.Count; i++){headerRow.CreateCell(i).SetCellValue(dt.Columns[i].ColumnName);}// 填充数据for (int i = 0; i < dt.Rows.Count; i++){IRow row = sheet.CreateRow(i + 1);for (int j = 0; j < dt.Columns.Count; j++){row.CreateCell(j).SetCellValue(dt.Rows[i][j].ToString());}}// 写入文件using (FileStream fileStream = new FileStream(filePath, FileMode.Create, FileAccess.Write)){workbook.Write(fileStream);}
}

在上述代码中,我们首先检查文件扩展名来决定创建XSSFWorkbook(用于.xlsx文件)还是HSSFWorkbook(用于.xls文件)。然后,我们创建一个工作表,并填充表头和数据。最后,我们将工作簿写入到指定的文件路径。

实际中第一步

 private void BtnDerive_Click(object sender, EventArgs e){SaveFileDialog saveFileDialog = new SaveFileDialog();saveFileDialog.Filter = "Excel files (*.xlsx)|*.xlsx";saveFileDialog.Title = "选择导出文件保存位置";saveFileDialog.FileName = GetFileName();if (saveFileDialog.ShowDialog() == DialogResult.OK){Export(dataGridView1, saveFileDialog.FileName);}}private string GetFileName(){return $"产品类型表_{DateTime.Now:yyyyMMddHHmmss}.xlsx";}private void Export(DataGridView dgv, string fileName){try{IWorkbook wb = new XSSFWorkbook();//NPOI 使用HSSFWorkbook 类来处理 xls,XSSFWorkbook 类来处理 xlsx。//它们都继承接口 IWorkbook,通过 IWorkbook 来统一处理 xls 和 xlsx 格式的文件ISheet sheet = wb.CreateSheet();IRow row;//获取DataGridView的列名,其中 i 表示低级列,i从0开始row = sheet.CreateRow(0);// 生成标题,注意第一列是“操作”列,不处理for (int k = 1; k < dgv.Columns.Count; k++){row.CreateCell(k - 1).SetCellValue(dgv.Columns[k].HeaderText.ToString());}for (int i = 0; i < dgv.Rows.Count; i++){row = sheet.CreateRow(i + 1);for (int k = 1; k < dgv.Columns.Count; k++){string value = dgv.Rows[i].Cells[k].Value == null ? "" : dgv.Rows[i].Cells[k].Value.ToString();row.CreateCell(k - 1).SetCellValue(value);}}using (var fs = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite)){wb.Write(fs); //写入到Excel中}MessageBox.Show("保存成功,文件名:" + fileName, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);}catch (Exception ex){MessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);}}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 信息安全数学基础(15)欧拉定理
  • 第二十九章 添加数字签名 - 指定 KeyInfo 的规范化方法
  • 【Kubernetes】常见面试题汇总(二十七)
  • 【原创 架构设计】多级缓存的应用、常见问题与解决方式
  • 【无人机设计与控制】基于蜣螂优化算法求解多无人机集群路径规划问题
  • 【波束管理】
  • leetcode第80题:删除有序数组的重复项(||)
  • MatrixOne助力一道创新打造高性能智能制造AIOT系统
  • java进程与线程
  • 基于单片机无线智能报警系统的设计
  • 华为昇腾智算中心-智算中心测试方案与标准
  • Java Integer 缓存机制:小镇的居民与大城市的拥堵
  • python内置模块pathlib.Path类操作目录和文件
  • Redis数据结构之list列表
  • 【编程底层原理】mysql的redo log undo log bin log日志的作用,以及何时生成,涉及到哪些参数变量
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • [译] 怎样写一个基础的编译器
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • Android组件 - 收藏集 - 掘金
  • echarts的各种常用效果展示
  • ES学习笔记(12)--Symbol
  • gf框架之分页模块(五) - 自定义分页
  • Java读取Properties文件的六种方法
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 什么软件可以剪辑音乐?
  • -- 数据结构 顺序表 --Java
  • 智能合约Solidity教程-事件和日志(一)
  • 你对linux中grep命令知道多少?
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • 选择阿里云数据库HBase版十大理由
  • # 透过事物看本质的能力怎么培养?
  • # 移动硬盘误操作制作为启动盘数据恢复问题
  • ###项目技术发展史
  • #mysql 8.0 踩坑日记
  • #考研#计算机文化知识1(局域网及网络互联)
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • (2024)docker-compose实战 (9)部署多项目环境(LAMP+react+vue+redis+mysql+nginx)
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (二)pulsar安装在独立的docker中,python测试
  • (二)丶RabbitMQ的六大核心
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (七)Knockout 创建自定义绑定
  • (亲测有效)推荐2024最新的免费漫画软件app,无广告,聚合全网资源!
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (三十五)大数据实战——Superset可视化平台搭建
  • (原創) 物件導向與老子思想 (OO)
  • (转)使用VMware vSphere标准交换机设置网络连接
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • .Net 中的反射(动态创建类型实例) - Part.4(转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part4.aspx)...
  • .NETCORE 开发登录接口MFA谷歌多因子身份验证
  • .net程序集学习心得
  • .NET运行机制
  • /ThinkPHP/Library/Think/Storage/Driver/File.class.php  LINE: 48
  • @Bean, @Component, @Configuration简析
  • @SpringBootApplication 包含的三个注解及其含义