【办公软件】C#调用NPOI实现Excel文件的加载、导出功能
文章目录
- 1. 引言
- 2. 环境准备
- 3. 示例代码
- 4. 结果
- 5. 总结
1. 引言
本文将介绍如何使用C#和NPOI库实现Excel文件的读写操作,并通过加载文件和导出文件的按钮进行封装。NPOI是一个强大的.NET库,可以轻松处理Excel文件。我们将学习如何使用NPOI打开现有的Excel文件、读取数据,并将数据写入到Excel文件中。
2. 环境准备
在开始之前,请确保已安装以下环境:
- Visual Studio(任何版本)
- NPOI库
3. 示例代码
下面是一个示例代码,演示了如何使用C#和NPOI实现Excel文件的读写操作,并封装在函数中,同时添加加载文件和导出文件的按钮:
using System;
using System.Data;
using System.IO;
using System.Windows.Forms;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;class Program
{static void Main(string[] args){Application.Run(new Form1());}
}public class Form1 : Form
{private Button loadButton;private Button exportButton;private DataTable dataTable;public Form1(){loadButton = new Button();loadButton.Text = "加载文件";loadButton.Click += LoadButton_Click;exportButton = new Button();exportButton.Text = "导出文件";exportButton.Click += ExportButton_Click;Controls.Add(loadButton);Controls.Add(exportButton);}private void LoadButton_Click(object sender, EventArgs e){OpenFileDialog openFileDialog = new OpenFileDialog();openFileDialog.Filter = "Excel文件 (*.xlsx)|*.xlsx";openFileDialog.Title = "选择要加载的Excel文件";if (openFileDialog.ShowDialog() == DialogResult.OK){string filePath = openFileDialog.FileName;dataTable = LoadExcelFile(filePath);}}private void ExportButton_Click(object sender, EventArgs e){if (dataTable == null){MessageBox.Show("请先加载Excel文件!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);return;}SaveFileDialog saveFileDialog = new SaveFileDialog();saveFileDialog.Filter = "Excel文件 (*.xlsx)|*.xlsx";saveFileDialog.Title = "选择要导出的Excel文件路径";if (saveFileDialog.ShowDialog() == DialogResult.OK){string filePath = saveFileDialog.FileName;ExportExcelFile(filePath, dataTable);}}private DataTable LoadExcelFile(string filePath){DataTable dataTable = new DataTable();FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read);XSSFWorkbook workbook = new XSSFWorkbook(file);ISheet sheet = workbook.GetSheetAt(0);// 读取表头IRow headerRow = sheet.GetRow(0);for (int i = 0; i < headerRow.LastCellNum; i++){dataTable.Columns.Add(headerRow.GetCell(i).ToString());}// 读取数据for (int row = 1; row <= sheet.LastRowNum; row++){IRow currentRow = sheet.GetRow(row);DataRow dataRow = dataTable.NewRow();for (int col = 0; col < currentRow.LastCellNum; col++){dataRow[col] = currentRow.GetCell(col)?.ToString();}dataTable.Rows.Add(dataRow);}file.Close();Console.WriteLine("加载文件完成!");return dataTable;}private void ExportExcelFile(string filePath, DataTable dataTable){XSSFWorkbook workbook = new XSSFWorkbook();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 row = 0; row < dataTable.Rows.Count; row++){IRow newRow = sheet.CreateRow(row + 1);for (int col = 0; col < dataTable.Columns.Count; col++){newRow.CreateCell(col).SetCellValue(dataTable.Rows[row][col]?.ToString());}}FileStream writeFile = new FileStream(filePath, FileMode.Create, FileAccess.Write);workbook.Write(writeFile);writeFile.Close();Console.WriteLine("导出文件完成!");}
}
4. 结果
运行代码后,将能够通过加载文件按钮选择要加载的Excel文件,并在控制台中显示文件中的数据。同时,还可以通过导出文件按钮选择要导出的Excel文件路径,并将数据写入到文件中。
5. 总结
本文介绍了如何使用C#和NPOI库实现Excel文件的读写操作,并通过加载文件和导出文件的按钮进行封装。通过使用NPOI的API,我们可以轻松地处理Excel文件,读取其中的数据并进行写入。希望本文对你有所帮助!
相关文章:
【办公软件】C#调用NPOI实现Excel文件的加载、导出功能
文章目录 1. 引言2. 环境准备3. 示例代码4. 结果5. 总结 1. 引言 本文将介绍如何使用C#和NPOI库实现Excel文件的读写操作,并通过加载文件和导出文件的按钮进行封装。NPOI是一个强大的.NET库,可以轻松处理Excel文件。我们将学习如何使用NPOI打开现有的Ex…...
UVA 11990 “Dynamic‘‘ Inversion 区域树 + 树状数组
一、题目大意 我们有 1 2 3 ... n 这些数字组成的一个排列数组 a ,需要从这个排列中取出m个数字,要求计算出出每次取出数字之前,数组中的逆序数(逆序数就是 i < j,但是 ai > aj的数) 二、解题思路 …...
邮件钓鱼分析
三大协议 SPF Sender Policy Framework 的缩写,一种以IP地址认证电子邮件发件人身份的技术。 注:收信人怀疑币是假的,查看这个送信包裹里面记录的发出地是不是央行,如果是黑市有可能是黑钱 DKIM 加密签名和域名关联。 注&am…...
Android 小技巧
1. Android Studio下载地址 Android 开发者 | Android Developers (google.cn) 2.Android Aosp 在线查看地址: AOSPXRef 3.Android 官方文档地址: Android 开源项目 | Android Open Source Project (google.cn)...
Centos MySQL --skip-grant-tables详解
跳过权限验证,导出数据备份 主机系统:Centos7 64位 数据库版本:MySQL5.7.40 使用–skip-grant-tables场景 1、忘记管理员密码 2、修改管理员密码 mysql -uroot -p显示错误内容如下: ERROR 1045 (28000): Access denied for …...
Linux:进程控制的概念和理解
文章目录 进程的创建fork函数写时拷贝的原理fork函数的用法和失败原因 进程终止进程的退出进程异常的问题 进程终止进程退出 进程等待什么是进程等待?为什么要进行进程等待?如何进行进程等待?父进程如何知道子进程的退出信息? wai…...
ubuntu20.04编译安装nginx
目录 一.更新系统软件包列表二.安装编译Nginx所需的依赖三.下载Nginx源代码四.解压源代码文件五.进入解压后的Nginx目录六.配置编译选项七.编译并安装Nginx八.启动Nginx服务九.验证Nginx是否正常运行十.Nginx命令十一.配置软链接 在Ubuntu 20.04上编译安装Nginx,你可…...
操作系统的分页
操作系统的分页功能与内存管理密切相关。为了更好地理解这一点,我们先简要概述分页的基本概念,然后解释其与页面调度和存储效率的关系。 分页的基本概念 分页是操作系统中的一种内存管理策略。物理内存被划分为固定大小的块,称为“页面”或“…...
微服务环境搭建
JDK安装:https://blog.csdn.net/JHYPXS/article/details/134155680 mysql安装:https://blog.csdn.net/JHYPXS/article/details/102566304 nacos安装:https://nacos.io/zh-cn/docs/v2/quickstart/quick-start.html...
ffmpeg 截取命令
从00:00:03.500开始截取往后长度到结尾的mp3音频(这个更有用,测试好用) ffmpeg -i d:/c.mp3 -ss 00:00:03.500 d:/output.mp3 将两个音频合并成一个音频(测试好用) ffmpeg -i "concat:d:/c.mp3|d:/output.mp3&…...
TypeScript深度剖析:TypeScript 中枚举类型应用场景?
文章目录 一、是什么二、使用数字枚举字符串枚举异构枚举本质 三、应用场景 一、是什么 枚举是一个被命名的整型常数的集合,用于声明一组命名的常数,当一个变量有几种可能的取值时,可以将它定义为枚举类型 通俗来说,枚举就是一个对象的所有可能取值的集…...
[推荐]SpringBoot,邮件发送附件含Excel文件(含源码)。
在阅读本文前,可以先阅读我的上一篇文章: SpringBoot,使用JavaMailSender发送邮件(含源码)。 ,本文使用的代码案例涉及到的 jar包、application.properties配置与它相同。 先看一下效果。 图一 图二 在下方代码案例中,…...
node学习之包管理器
一、概念介绍 **1.1 包是什么 ** 『包』英文单词是 package ,代表了一组特定功能的源码集合 **1.2 包管理工具 ** 管理『包』的应用软件,可以对「包」进行 下载安装 , 更新 , 删除 , 上传 等操作 借助包管理工具&…...
自动驾驶车辆轨迹跟踪
相对于传统的模型预测控制(MPC),简化的车辆模型通常会导致预测结果不准确,这对车辆的转弯等行为具有负面影响。因此作者提出了一种轨迹规划和跟踪框架: 该框架应用人工势场来获得目标轨迹;并利用具有PID反…...
React的useEvent 和 ahooks 的 useMemorizedFn 的深度分析和对比
父组件 const TestParent: React.FC<any> () > {const [State, setState] useState(0);const changeFun useCallback(() > {console.log(useCallback closure 里的 State, State);}, [State]);const changeFun_useEvent useEvent(() > {console.log(useEv…...
基于goframe2.5.4、vue3、tdesign-vue-next开发的全栈前后端分离的管理系统
goframe-admin goframe-admin V1.0.0 平台简介 基于goframe2.5.4、vue3、tdesign-vue-next开发的全栈前后端分离的管理系统。前端采用tdesign-vue-next-starter 、vue3、pinia、tdesign-vue-next。 特征 高生产率:几分钟即可搭建一个后台管理系统认证机制&#x…...
LInux之在同一Tomcat下使用不同的端口号访问不同的项目
🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是君易--鑨,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的博客专栏《LInux实战开发》。🎯🎯 …...
梦百合上榜2023鼎革奖数字化转型先锋榜
10月26日,第六届“鼎革奖”数字化转型先锋榜单揭晓,梦百合家居凭借数字化生产的卓越成果——SAP管理平台及供应链项目,入选2023【鼎革奖】数字化转型先锋榜年度供应链转型典范,梦百合家居COO 崔慧明同步入选2023【鼎革奖】数字化转型先锋榜年度首席运营官。 据了解,「鼎革奖」数…...
沉痛悼念科研分公司
今天上班途中,遇到了上家公司的同事王强。他正准备去体检中心体检。几句寒暄之后,得知他是要入职选煤公司了。 我们所在的公司比较大,总公司下设有几十个分、子公司,我和他曾经在一家子公司——科研分公司。现在的科研分公司解散…...
Django的网站项目开发好了,该用何种方案在Centos上部署【答:Gunicorn(uWSGI)+Nginx】
问:用Django开发的网站开发好了,现在要部署上线。 系统为Centos 7.x 现在我安装好Django和相关依赖后,我用命令 python manage.py runserver 127.0.0.1:8010 启动Django 然后安装配置好Nginx,并把用的请求转发到 127.0.0.1:8010 。 请问这样的…...
Unity/Unreal开发者必看:用四元数彻底告别万向死锁,让你的3D角色旋转丝滑起来
Unity/Unreal开发者必看:用四元数彻底告别万向死锁,让你的3D角色旋转丝滑起来 在游戏开发中,角色的旋转控制是一个看似简单却暗藏玄机的技术点。许多开发者都遇到过这样的场景:当角色抬头到90度时,水平旋转突然变得诡异…...
思科ASA防火墙“升级困境“破解“——飞将让50人团队平滑过渡远程办公
一、客户需求介绍 一家50人规模的企业服务公司,此前使用思科ASA 5506防火墙承载本地上网和远程办公需求,但因以下需求陷入瓶颈: 思科ASA 5506性能不足,设备自带的AnyConnect许可证不够用;保留移动办公员工习惯&…...
2026届毕业生推荐的六大降重复率平台解析与推荐
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 要是为了切实有效地去降低文本所具备的AIGC也就是人工智能生成内容的特征,那就建…...
[具身智能-231]:OpenCV的库文件为啥是cv2, 而不是cv?
这是一个非常经典的问题!很多初学者在写代码时都会感到困惑:明明安装的是 opencv-python,为什么导入时却要写 import cv2?而且这个 "2" 到底代表 OpenCV 2 还是 OpenCV 3/4?简单直接的回答是:cv2…...
CEEMDAN-VMD-Transformer-GRU二次分解+编码器+门控循环单元多元时间序列预测
一、研究背景 实际工程与科学数据(如振动信号、电力负荷、金融时序)常呈现非线性、非平稳特征,单一预测模型难以充分提取多尺度信息。为此,结合自适应信号分解(CEEMDAN、VMD)与深度学习(Transfo…...
【技术干货】Qwen 3.6 Plus 实战:用百万上下文打造“代理式”AI 编码工作流
摘要 本文从工程视角拆解 Qwen 3.6 Plus:百万 token 上下文、面向“代理式编码”的能力,以及闭源旗舰开源工具的组合策略。结合实际项目需求,给出如何通过 OpenAI 兼容 API接入该类模型,并构建仓库级代码助手的完整 Python 示例和…...
算法分析与设计
欢迎来到我的软考中级——软件设计师备考合集。这里不只是一份简单的知识点堆砌,而是我在备考征途中,对庞杂知识体系进行深度梳理与内化的结晶。 面对浩瀚的考纲,从计算机组成原理的底层逻辑,到操作系统的进程调度;从数…...
看门狗悖论:对波普尔可证伪主义划界标准的归谬反驳
看门狗悖论:对波普尔可证伪主义划界标准的归谬反驳摘要卡尔・波普尔提出的可证伪性标准,被学界长期奉为科学与非科学的核心划界原则。该原则主张:一个命题若具备被经验事实反驳的逻辑可能,即可归入科学命题范畴。然而,…...
Poppins字体完整指南:免费获取专业级多语言排版解决方案
Poppins字体完整指南:免费获取专业级多语言排版解决方案 【免费下载链接】Poppins Poppins, a Devanagari Latin family for Google Fonts. 项目地址: https://gitcode.com/gh_mirrors/po/Poppins 你是否正在寻找一款既美观又支持多语言的免费字体来提升设计…...
用Unity 2D碰撞体+Effector,5分钟实现《星露谷物语》式的磁铁吸附效果
用Unity 2D碰撞体Effector实现《星露谷物语》式磁铁吸附效果 在《星露谷物语》这类农场模拟游戏中,角色靠近可收集物品时自动吸附的设计极大提升了操作流畅度。这种看似简单的交互背后,其实隐藏着Unity物理系统的巧妙运用。本文将手把手教你如何用2D碰撞…...
