【办公软件】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 。 请问这样的…...
Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...
多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...
sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...
基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...
