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

【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#】获取文本中的链接,通过正则表达式的方法获取以及优化兼容多种格式

温故而知新,不同阶段重温知识点,会有不一样的认识和理解,博主将巩固一遍知识点,并以实践方式和大家分享,若能有所帮助和收获,这将是博主最大的创作动力和荣幸。也期待认识更多优秀新老博主。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 零基础学python 之 第十九讲 正则表达式
  • Express基于Node.js基础知识【2】全面总结 推荐
  • C++必修:STL之vector的了解与使用
  • JavaScript 变量声明var、let、const
  • 实验2-5-7 求阶乘序列前N项和【多看看函数】
  • 文件夹判断操作类 - C#小函数类推荐
  • 哈夫曼树及哈夫曼编码
  • 前端小白安装node、vue、Express、Electron及(Electron桌面端exe应用开发)
  • 干货满满,从零到一:编程小白如何在大学成为编程大神?
  • 滴滴官宣潘展乐为滴滴网约车“快”乐大使
  • AI产品经理的职责与能力:将AI技术转化为实际价值
  • 算法小白的进阶之路(力扣1~5)
  • 复制知乎文字内容
  • 本地VSCode连接远程linux环境服务器的docker
  • 【Linux】文件系统
  • 07.Android之多媒体问题
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • idea + plantuml 画流程图
  • JavaScript对象详解
  • Lsb图片隐写
  • magento 货币换算
  • MYSQL 的 IF 函数
  • php中curl和soap方式请求服务超时问题
  • React组件设计模式(一)
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • Transformer-XL: Unleashing the Potential of Attention Models
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • uva 10370 Above Average
  • vue.js框架原理浅析
  • Vue2.x学习三:事件处理生命周期钩子
  • vue学习系列(二)vue-cli
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 如何在GitHub上创建个人博客
  • 写代码的正确姿势
  • nb
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • Nginx实现动静分离
  • ​zookeeper集群配置与启动
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (el-Transfer)操作(不使用 ts):Element-plus 中 Select 组件动态设置 options 值需求的解决过程
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (转载)Linux网络编程入门
  • ***原理与防范
  • **PHP二维数组遍历时同时赋值
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地中转一个自定义的弱事件(可让任意 CLR 事件成为弱事件)
  • .NetCore+vue3上传图片 Multipart body length limit 16384 exceeded.
  • []T 还是 []*T, 这是一个问题
  • [2019/05/17]解决springboot测试List接口时JSON传参异常
  • [Angular] 笔记 16:模板驱动表单 - 选择框与选项
  • [CSS]一文掌握
  • [Deep Learning] 神经网络基础