【C#】.net core 6.0 webapi 使用core版本的NPOI的Excel读取数据以及保存数据
欢迎来到《小5讲堂》
这是《C#》系列文章,每篇文章将以博主理解的角度展开讲解。
温馨提示:博主能力有限,理解水平有限,若有不对之处望指正!

目录
- 背景
- 读取并保存
- NPOI信息
- NPOI 插件介绍
- 基本功能
- 示例代码
- 写入 Excel 文件的示例
- 相关文章
背景
好久没使用C#操作过Excel等文件,刚好今天有位大学同学问到博主。
他有100多个excel表格文件,需要提取每个文件的第二行数据统一保存到一张表里。
后面又需要把所有文件的excel数据全部放到同一个张表,NPOI插件是插件首选。
读取并保存
创建一个新的工作簿,定义表头,创建表头行。
读取某个文件夹目录,遍历所有文件夹下的所有excel文件,并读取行数据,遍历每个列的行数据,追加到新的工作簿行里,最后进行保存输出到本地。
// 读取xlsx
private void ReadExcelFiles(string folderPath)
{if (!Directory.Exists(folderPath)){MessageBox.Show("指定的文件夹路径不存在");return;}// ===创建一个新的工作簿===IWorkbook workbook = new XSSFWorkbook();ISheet sheet = workbook.CreateSheet("Sheet1");// 定义表头string[] headers = {"字段1", "字段2", "字段3", "字段4", "字段5"};// 创建表头行IRow headerRow = sheet.CreateRow(0);for (int i = 0; i < headers.Length; i++){headerRow.CreateCell(i).SetCellValue(headers[i]);}// ===创建一个新的工作簿===int rowIndex = 1;var files = Directory.GetFiles(folderPath, "*.xlsx");foreach (var file in files){try{if (!File.Exists(file)){MessageBox.Show($"文件 {file} 不存在");continue;}using (var fileStream = new FileStream(file, FileMode.Open, FileAccess.Read)){IWorkbook workbook2 = new XSSFWorkbook(fileStream);ISheet sheet2 = workbook2.GetSheetAt(0); // 获取第一个工作表// 获取行数int rowCount = sheet2.PhysicalNumberOfRows;for (int rr = 0; rr < rowCount; rr++){IRow row = sheet2.GetRow(rr + 1); // 获取第二行if (row != null){var rowValues = row.Cells.Select(cell => cell.ToString()).ToArray();IRow dataRow = sheet.CreateRow(rowIndex);for (int i = 0; i < rowValues.Length; i++){dataRow.CreateCell(i).SetCellValue(rowValues[i]);}}rowIndex++;}}}catch (Exception ex){MessageBox.Show($"读取文件 {Path.GetFileName(file)} 时发生错误: {ex.Message}");}}// ===保存文件===string filePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "alldata.xlsx");using (var fs = new FileStream(filePath, FileMode.Create, FileAccess.Write)){workbook.Write(fs);}// ===/保存文件===
}

NPOI信息
NPOI 是一个用于处理 Microsoft Office 文件的开源库,它提供了对 Excel、Word 和 PowerPoint 文件的读写功能。
NPOI 支持处理 .xls 和 .xlsx 格式的 Excel 文件,.doc 和 .docx 格式的 Word 文件,.ppt 和 .pptx 格式的 PowerPoint 文件。
以下是 NPOI 的基本功能和插件介绍:
NPOI 插件介绍
1.NPOI: 核心库,用于读取和写入 Office 文件的基本操作。它包含处理 Excel、Word 和 PowerPoint 文件的功能。
2.NPOI.OOXML: 支持 .xlsx 格式的 Excel 文件(即 Office 2007 及以后版本)。这是 NPOI 的一个扩展库,提供对 Excel 2007 及以后版本格式的支持。
3.NPOI.OpenXml4Net: 支持 .docx 和 .pptx 格式的文件(即 Office 2007 及以后版本)。它用于处理 Open XML 格式的文件。
4.NPOI.HSSF: 支持 .xls 格式的 Excel 文件(即 Office 97-2003 版本)。用于读取和写入旧版本的 Excel 文件。
5.NPOI.SS.UserModel: 提供了处理 Excel 文件的通用接口,包括 IWorkbook、ISheet 和 IRow 等接口,适用于各种格式的 Excel 文件。
基本功能
1.Excel 文件操作
- 读取 Excel 文件: 通过 NPOI 读取 .xls 和 .xlsx 文件的数据,包括单元格内容、行和列的索引等。
- 写入 Excel 文件: 可以创建新的 Excel 文件或修改现有文件,包括设置单元格的格式、字体、颜色等。
- 数据操作: 读取和写入单元格内容,操作行和列,插入和删除行列,合并单元格等。
- 样式和格式: 设置单元格的样式,包括字体、颜色、边框、对齐方式等。
2.Word 文件操作 - 读取 Word 文件: 获取 .doc 和 .docx 文件中的文本、表格、段落等。
- 写入 Word 文件: 创建新的 Word 文档或修改现有文档,包括添加文本、表格、图片等。
- 格式设置: 设置段落格式、字体样式、字体大小、文本颜色等。
3.PowerPoint 文件操作 - 读取 PowerPoint 文件: 提取 .ppt 和 .pptx 文件中的幻灯片内容、文本、图片等。
- 写入 PowerPoint 文件: 创建新的 PowerPoint 演示文稿或修改现有的演示文稿,包括添加幻灯片、设置幻灯片的内容和样式等。
示例代码
读取 Excel 文件的示例
using System;
using System.IO;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel; // 对于 .xlsx 格式
// using NPOI.HSSF.UserModel; // 对于 .xls 格式class Program
{static void Main(){string filePath = "your_file_path.xlsx";using (FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read)){IWorkbook workbook = new XSSFWorkbook(fileStream); // 对于 .xlsx 文件ISheet sheet = workbook.GetSheetAt(0);foreach (IRow row in sheet){foreach (ICell cell in row){Console.Write($"{cell.ToString()} ");}Console.WriteLine();}}}
}
写入 Excel 文件的示例
using System;
using System.IO;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel; // 对于 .xlsx 格式
// using NPOI.HSSF.UserModel; // 对于 .xls 格式class Program
{static void Main(){string filePath = "your_file_path.xlsx";IWorkbook workbook = new XSSFWorkbook();ISheet sheet = workbook.CreateSheet("Sheet1");IRow row = sheet.CreateRow(0);ICell cell = row.CreateCell(0);cell.SetCellValue("Hello, NPOI!");using (FileStream fileStream = new FileStream(filePath, FileMode.Create, FileAccess.Write)){workbook.Write(fileStream);}}
}
这些示例展示了如何使用 NPOI 进行基本的文件读写操作。如果你需要更详细的文档或具体功能的实现,可以参考 NPOI 的 官方文档 或其 GitHub 页面。
相关文章
【C#】.net core 6.0 webapi 使用core版本的NPOI的Excel读取数据以及保存数据
【C#】pdf按页分割文件,以及分页合并,效果还不错,你值得拥有
【C#】未能加载文件或程序集“CefSharp.Core.Runtime.dll”或它的某一个依赖项。找不到指定的模块。
【C#】.net core 6.0 在program时间格式统一json格式化,并列举program默认写法和简化写法
【C#】.net core 6.0 ApiController,API控制器方法,API接口以实体类作为接收参数应该注意的点
【C#】 SortedDictionary,查找字典中是否存在给定的关键字
【C#】.net core 6.0 MVC返回JsonResult显示API接口返回值不可被JSON反序列化
【C#】.net core 6.0 使用第三方日志插件Log4net,配置文件详细说明
【C#】使用代码实现龙年春晚扑克牌魔术(守岁共此时),代码实现篇
【C#】使用代码实现龙年春晚扑克牌魔术(守岁共此时),流程描述篇
【C#】约瑟夫原理举例2个代码实现
【C#】List泛型数据集如何循环移动,最后一位移动到第一位,以此类推
【C#】获取文本中的链接,通过正则表达式的方法获取以及优化兼容多种格式
温故而知新,不同阶段重温知识点,会有不一样的认识和理解,博主将巩固一遍知识点,并以实践方式和大家分享,若能有所帮助和收获,这将是博主最大的创作动力和荣幸。也期待认识更多优秀新老博主。
相关文章:
【C#】.net core 6.0 webapi 使用core版本的NPOI的Excel读取数据以及保存数据
欢迎来到《小5讲堂》 这是《C#》系列文章,每篇文章将以博主理解的角度展开讲解。 温馨提示:博主能力有限,理解水平有限,若有不对之处望指正! 目录 背景读取并保存NPOI信息NPOI 插件介绍基本功能示例代码写入 Excel 文件…...
C++推荐的oj网站
洛谷 信息学奥赛一本通 C语言网 codeforces 杭电oj...
springmvc处理http请求的底层逻辑
http-nio-8088-Poller线程中在org.apache.tomcat.util.net.NioEndpoint.Poller#run这个函数里循环检测selector,若发现有SocketEvent.OPEN_READ事件则会将SelectionKey.attachment中的内容作为入参包装成runable,然后由org.apache.tomcat.util.threads.T…...
干货满满,从零到一:编程小白如何在大学成为编程大神?
✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…...
前端-如何通过docker打包Vue服务成镜像并在本地运行(本地可以通过http://localhost:8080/访问前端服务)
1、下载安装docker,最好在vs code里安装docker的插件。 下载链接:https://www.docker.com/products/docker-desktop 🎉 Docker 简介和安装 - Docker 快速入门 - 易文档 (easydoc.net) 2、准备配置文件-dockerfile文件和nginx.conf文件 do…...
零基础学习【Mybatis】这一篇就够了
Mybatis 查询resultType使用resultMap使用单条件查询多条件查询模糊查询返回主键 动态SQLifchoosesetforeachsql片段 配置文件注解增删改查结果映射 查询 resultType使用 当数据库返回的结果集中的字段和实体类中的属性名一一对应时, resultType可以自动将结果封装到实体中 r…...
Shell入门(保姆级教学)
Shell是一种命令行解释器,也是一种脚本语言,广泛应用于Unix和类Unix系统中,例如Linux。它是用户与操作系统内核交互的桥梁,通过Shell可以执行系统命令、管理文件系统、处理文本数据等。本文将带你入门Shell编程,涵盖基…...
【JDK11和JDK8并行与切换】
一、JDK11安装 1、下载jdk11,点击.exe安装在:C:\Program Files\Java\jdk-11\ 2、配置JAVA_HOME 变量名为JAVA_HOME 变量值为jdk安装路径 3、配置PATH 找到系统变量里的PATH 双击或者单击后点击编辑 点击右上角的新建 新建两条 %JAVA_HOME%\bin …...
vue大数据量列表渲染性能优化:虚拟滚动原理
前面咱完成了自定义JuanTree组件各种功能的实现。在数据量很大的情况下,我们讲了两种实现方式来提高渲染性能:前端分页和节点数据懒加载。 前端分页小节:Vue3扁平化Tree组件的前端分页实现 节点数据懒加载小节:Element Tree Plu…...
昇思25天学习打卡营第1天|快速入门
目录 昇思MindSpore介绍MindSpore的API来快速实现一个简单的深度学习模型通过资料更深入的了解昇思MindSpore 昇思MindSpore介绍 今天有幸学习了昇思MindSpore,让我们来简单的了解一下它 昇思MindSpore是一个全场景深度学习框架,旨在实现易开发、高效执行…...
LinkedList 实现 LRU 缓存
LRU(Least Recently Used,最近最少使用)缓存是一种缓存淘汰策略,用于在缓存满时淘汰最久未使用的元素。 关键: 缓存选什么结构? 怎么实现访问顺序? import java.util.*;public class LRUCac…...
ubuntu安装workon
pip install virtualenvpip install virtualenvwrapper配置virtualenvwrapper。在你的shell配置文件(比如.bashrc,.bash_profile或.zshrc)中添加以下内容:export WORKON_HOME$HOME/.virtualenvs export VIRTUALENVWRAPPER_PYTHON/…...
(面试必看!)锁策略
文章导读 引言考点一、重量级锁 VS 轻量级锁1、定义与原理2、主要区别3、适用场景 考点二、乐观锁 VS 悲观锁1、悲观锁(Pessimistic Locking)2、乐观锁(Optimistic Locking)3、总结 考点三、读写锁1、读写锁的特性2、读写锁的实现…...
RAGflow:开源AI框架的创新与应用
在当今科技飞速发展的时代,人工智能(AI)已经成为各行各业不可或缺的一部分。特别是在文档处理和数据分析领域,AI的应用更是无处不在。今天,我要向大家介绍一个开源的AI框架引擎——RAGflow。它能够在深度文档理解方面执…...
AI的学习明确路径
1.不要一开始学习数学。 首先,学习python的语法和工具包。 python的工具包有:numpy,pandas,matlap,sciklt-learn. 然后,学习机械学习算法,学习1.树模型,随机森林 。 2.神经网络。 上kaggle中,找人家的经…...
【C++】巧用缺省参数与函数重载:提升编程效率的秘密武器
C语法相关知识点可以通过点击以下链接进行学习一起加油!命名空间 本章将分享缺省参数与函数重载相关知识,为了更加深入学习C打下了坚实的基础。本章重点在于缺省参数与函数重载使用前提与注意事项 🌈个人主页:是店小二呀 …...
mysql排查死锁的几个查询sql
SHOW PROCESSLIST; select * from information_schema.INNODB_TRX; select * from information_schema.INNODB_LOCKS; select * from information_schema.INNODB_LOCK_WAITS;...
快速部署私有化大模型 毕昇(使用docker-compose方式)
docker安装 1. # Linux系统安装docker,以CentOS/RHEL为例,其他操作系统请参考docker官方安装方法 # 如果已经安装过docker 期望重装,先卸载 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \d…...
B端:导航条就框架提供的默认样式吗?非也,看过来。
导航条不一定必须使用框架提供的默认样式,你可以根据项目需求和设计风格进行自定义。通过使用框架提供的自定义选项、CSS样式覆盖、自行设计或者使用其他UI库或组件,你可以实现独特且符合需求的导航条样式。 下面发一些参考给友友们,可以让设…...
idea的git与SVN切换
1、选择setting->Version Control,新增或者编辑,选择目录,使用git或者svn管理 2、选择项目中的vcs.xml,打开选择要用的,注释掉不用的版本即可...
轴承‘健康度’预测新思路:用LSTM处理振动信号,我对比了PyTorch和TensorFlow 2.x的实现差异
轴承健康预测实战:PyTorch与TensorFlow 2.x的LSTM实现深度对比 在工业设备维护领域,轴承作为旋转机械的核心部件,其健康状态直接影响整机运行安全。传统基于阈值的报警方式往往滞后于实际故障发生,而采用LSTM(长短期记…...
Llama-3.2V-11B-cot惊艳效果:多对象遮挡场景下的因果关系链推演
Llama-3.2V-11B-cot惊艳效果:多对象遮挡场景下的因果关系链推演 1. 视觉推理新标杆 在计算机视觉领域,多对象遮挡场景下的因果关系推演一直是个技术难题。传统方法往往只能识别可见部分,而无法理解遮挡背后的逻辑关系。Llama-3.2V-11B-cot的…...
零基础入门:时空预测的系统化学习笔记
零基础入门:时空预测的系统化学习笔记 很多刚接触时序与时空预测领域的朋友,常常会陷入两个极端:要么一上来就硬啃复杂的 SOTA 模型,连基础算子都没搞懂就想复现顶会成果,最后处处碰壁;要么只停留在基础概…...
League-Toolkit:智能辅助驱动的英雄联盟效率提升解决方案
League-Toolkit:智能辅助驱动的英雄联盟效率提升解决方案 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit League-Tool…...
如何快速配置HomeAssistant格力空调本地控制组件:完整操作指南
如何快速配置HomeAssistant格力空调本地控制组件:完整操作指南 【免费下载链接】HomeAssistant-GreeClimateComponent Custom Gree climate component written in Python3 for Home Assistant. Controls ACs supporting the Gree protocol. 项目地址: https://git…...
从零开始学流程图:GESP C++二级考试中的三种基本结构详解
从零开始学流程图:GESP C二级考试中的三种基本结构详解 在编程学习的道路上,流程图就像是一张清晰的地图,能够帮助初学者直观地理解程序运行的逻辑路径。特别是对于准备GESP C二级考试的考生来说,掌握流程图的绘制和解读技巧&…...
5步构建智能医疗预约系统:91160-cli全流程实战指南
5步构建智能医疗预约系统:91160-cli全流程实战指南 【免费下载链接】91160-cli 健康160全自动挂号脚本 项目地址: https://gitcode.com/gh_mirrors/91/91160-cli 医疗资源紧张导致的挂号难题,让无数患者在凌晨守候却依然一号难求。如何突破人工抢…...
RDK X5上800万像素摄像头延迟从7秒降到200ms:我的5个月踩坑与优化实录
RDK X5高分辨率摄像头优化实战:从7秒延迟到200ms的性能飞跃 深夜的显示器前,我盯着屏幕上缓慢刷新的图像——32642448分辨率下,每按一次快门要等待7秒才能看到结果。作为一名在嵌入式视觉领域摸爬滚打多年的开发者,这种性能表现简…...
Frida启动报错invalid address?手把手教你修复Android逆向工程环境
Frida启动报错invalid address?手把手教你修复Android逆向工程环境 当你满怀期待地启动Frida准备进行Android应用动态分析时,控制台突然抛出"invalid address"错误,那种感觉就像赛车手在起跑线上发现引擎故障。这个看似简单的错误信…...
w3x2lni:魔兽地图跨版本转换的技术突破与实践指南
w3x2lni:魔兽地图跨版本转换的技术突破与实践指南 【免费下载链接】w3x2lni 魔兽地图格式转换工具 项目地址: https://gitcode.com/gh_mirrors/w3/w3x2lni 问题引入:版本壁垒下的魔兽地图开发困境 在魔兽争霸III的地图开发领域,版本迭…...
