C# 读去Word文档(NPOI)

NPOI.dll文件下载:

百度网盘 请输入提取码

NPOI介绍:

NPOI可以在没有安装Office的情况下对Word或Excel文档进行读写操作。

NPOI是一个开源的C#读写Excel、WORD等微软OLE2组件文档的项目。

实现的操作:

获取Word文档所有Sheet表格。

读取指定表格数据返回DataTable。

namespace ConsoleApplication1
{public class Program{static void Main(string[] args){Console.WriteLine("读取Word文档所有SheetName↓↓↓↓↓");//文档存放路径string path = System.Windows.Forms.Application.StartupPath + "//初始数据.xls";//获取Word文档里所有Sheet表格List<string> strList = GetSheetStr(path);for (int i = 0; i < strList.Count; i++){Console.WriteLine((i + 1) + ":" + strList[i]);}Console.Write("请输入要查看的Sheet表格编号:");int number = Convert.ToInt32(Console.ReadLine());DataTable dt = SheetToDataTable(path, strList[number - 1]);foreach (DataRow row in dt.Rows){int column = row.ItemArray.Length;string str = "";for (int i = 0; i < column; i++){str += " | " + row[i];}Console.WriteLine(str);}Console.ReadKey();}/// <summary>/// 获取Word文档内所有SheetName/// </summary>/// <param name="path">读取路径</param>/// <returns>返回:字符串集合</returns>static List<string> GetSheetStr(string path){List<string> strSheetName = new List<string>();IWorkbook workbook;string fileExt = Path.GetExtension(path).ToLower();ISheet sheet;using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read)){//XSSFWorkbook 适用XLSX格式,HSSFWorkbook 适用XLS格式//if (fileExt == ".xlsx") //{ //    workbook = new XSSFWorkbook(fs); //}//else if (fileExt == ".xls"){workbook = new HSSFWorkbook(fs);}else{workbook = null;}if (workbook == null){return null;}//后去Sheet表格数量int count = workbook.NumberOfSheets;for (int i = 0; i < count; i++){sheet = workbook.GetSheetAt(i);//检查Sheet表格总行数是否大于0 //检查是否有数据,有就获取Sheet表格名称   根据个人需求不加也可以if (sheet.LastRowNum > 0){strSheetName.Add(workbook.GetSheetAt(i).SheetName);}}return strSheetName;}}/// <summary>/// 读取Sheet内容/// </summary>/// <param name="filePath">文件路径</param>/// <param name="sheetName">获取Sheet名称</param>/// <returns>返回DataTable</returns>public static DataTable SheetToDataTable(string filePath, string sheetName){System.Data.DataTable dt = new System.Data.DataTable();NPOI.SS.UserModel.IWorkbook workbook;string fileExt = Path.GetExtension(filePath).ToLower();using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read)){//XSSFWorkbook:是操作Excel2007后的版本,扩展名是.xlsx;//HSSFWorkbook:是操作Excel2003以前(包括2003)的版本,扩展名是.xls;//if (fileExt == ".xlsx") { workbook = new XSSFWorkbook(fs); }//else if (fileExt == ".xls"){workbook = new HSSFWorkbook(fs);}else{workbook = null;}if (workbook == null){return null;}ISheet sheet = workbook.GetSheet(sheetName);//表头//读取第一行的标题IRow header = sheet.GetRow(sheet.FirstRowNum);List<int> columns = new List<int>();for (int i = 0; i < header.LastCellNum; i++){//获取标题名称    例如:ID、Name、Ageobject columnName = GetValueType(header.GetCell(i));if (columnName == null || columnName.ToString() == string.Empty){dt.Columns.Add(new DataColumn("Columns" + i.ToString()));}elsedt.Columns.Add(new DataColumn(columnName.ToString()));columns.Add(i);}//数据for (int i = sheet.FirstRowNum + 1; i <= sheet.LastRowNum; i++){DataRow dataRow = dt.NewRow();bool hasValue = false;foreach (int k in columns){dataRow[k] = GetValueType(sheet.GetRow(i).GetCell(k));if (dataRow[k] != null && dataRow[k].ToString() != string.Empty){hasValue = true;}}if (hasValue){dt.Rows.Add(dataRow);}}}}return dt;}/// <summary>/// 获取单元格内数据的类型/// </summary>/// <param name="cell"></param>/// <returns></returns>private static object GetValueType(ICell cell){if (cell == null)return null;switch (cell.CellType){case CellType.Blank:return null;case CellType.Boolean:return cell.BooleanCellValue;case CellType.Numeric:return cell.NumericCellValue;case CellType.String:return cell.StringCellValue;case CellType.Error:return cell.ErrorCellValue;case CellType.Formula:default:return "=" + cell.CellFormula;}}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/5462.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C语言】自定义数据类型

建议学完指针再学 为什么要有自定义数据类型&#xff1f; 基本数据类型不能满足我们在编程中的要求时&#xff0c;需要自己定义一些数据类型使用。 结构体 如果我们想存储单个数据&#xff0c;可以直接用数组存储&#xff1b;那么如果我们想存储多个数据呢&#xff1f; 比…

74、堆-数组中的第K个最大元素

思路&#xff1a; 直接排序是可以的&#xff0c;但是时间复杂度不符合。可以使用优先队列&#xff0c;代码如下&#xff1a; class Solution {public int findKthLargest(int[] nums, int k) {if (numsnull||nums.length0||k<0||k>nums.length){return Integer.MAX_VAL…

CST电磁仿真局部网格设置与仿真结构不参与仿真设置【基础教程】

局部网格设置 使用Local Mesh功能在特定结构&#xff08;区域&#xff09;设置网格 Simulation > Mesh > Local Mesh Properties 仿真模型的构成部件尺寸和复杂度是非常多样的&#xff0c;如果以最复杂的部分为准来划分网格不复杂的部分也会生成非常稠密的网格&#x…

如何判断嵌入式平台OpenCV在使用硬件编解码器?

01 涉及OpenCV编解码库的一个命令行工具 python3 -c import cv2; print(cv2.getBuildInformation()) 它可以打印输出详细的OpenCV编译参数和当前的媒体库相关参数&#xff0c;我的rk3588打印的信息是这样的&#xff1a; catlubancat:~$ python3 -c import cv2; print(cv2.getBu…

全面解析Unity至Unreal的项目迁移流程

引言 在游戏开发领域&#xff0c;Unity和Unreal Engine都是顶尖的选择&#xff0c;各自带有独特的优势。对于追求更高图形质量和更强大物理模拟的开发团队而言&#xff0c;将项目从Unity迁移到Unreal可能是一个值得考虑的选择。本文将详细介绍整个迁移流程&#xff0c;帮助开发…

[Java、Android面试]_24_Compose为什么绘制要比XML快?(高频问答)

欢迎查看合集&#xff1a; Java、Android面试高频系列文章合集 本人今年参加了很多面试&#xff0c;也有幸拿到了一些大厂的offer&#xff0c;整理了众多面试资料&#xff0c;后续还会分享众多面试资料。 整理成了面试系列&#xff0c;由于时间有限&#xff0c;每天整理一点&am…

Linux操作系统·进程管理

一、什么是进程 1.作业和进程的概念 Linux是一个多用户多任务的操作系统。多用户是指多个用户可以在同一时间使用计算机系统&#xff1b;多任务是指Linux可以同时执行几个任务&#xff0c;它可以在还未执行完一个任务时又执行另一项任务。为了完成这些任务&#xff0c;系统上…

数据库锁介绍

目录 1.数据库锁 事务的隔离级别 读未提交&#xff08;Read Uncommitted&#xff09; 读已提交&#xff08;Read Committed&#xff09; 可重复读&#xff08;Repeatable Read&#xff09; 串行化&#xff08;Serializable&#xff09; 幻读和不可重复读区别 2.Mysql中有…

Android binder死亡通知机制

在Andorid 的binder系统中&#xff0c;当Bn端由于种种原因死亡时&#xff0c;需要通知Bp端&#xff0c;Bp端感知Bn端死亡后&#xff0c;做相应的处理。 使用 Bp需要先注册一个死亡通知&#xff0c;当Bn端死亡时&#xff0c;回调到Bp端。 1&#xff0c;java代码注册死亡通知 …

【webrtc】MessageHandler 9: 基于线程的消息处理:执行Port销毁自己

Port::Port 构造的时候,就触发了一个异步操作,但是这个操作是要在 thread 里执行的,因此要通过post 消息 MSG_DESTROY_IF_DEAD 到thread跑:port的创建并米有要求在thread中 但是port的析构却在thread里 这是为啥呢?

豆瓣9.7,这部Java神作第3版重磅上市!

Java 程序员们开年就有重磅好消息&#xff0c;《Effective Java 中文版&#xff08;原书第 3 版&#xff09;》要上市啦&#xff01; 该书的第1版出版于 2001 年&#xff0c;当时就在业界流传开来&#xff0c;受到广泛赞誉。时至今日&#xff0c;已热销近20年&#xff0c;本书第…

自然语言处理(NLP)简介

自然语言处理&#xff08;NLP&#xff09;技术是一种使用计算机处理和理解自然语言的技术。以下是一些NLP技术的例子&#xff1a; 机器翻译&#xff1a;NLP可以用于自动翻译一种语言到另一种语言。例如&#xff0c;Google Translate使用NLP技术来将文本从一种语言翻译成另一种语…

三维SDMTSP:GWO灰狼优化算法求解三维单仓库多旅行商问题,可以更改数据集和起点(MATLAB代码)

一、单仓库多旅行商问题 多旅行商问题&#xff08;Multiple Traveling Salesman Problem, MTSP&#xff09;是著名的旅行商问题&#xff08;Traveling Salesman Problem, TSP&#xff09;的延伸&#xff0c;多旅行商问题定义为&#xff1a;给定一个&#x1d45b;座城市的城市集…

CST Studio初级教程 五

本课程将实例讲解CST 3D建模。CST 3D 建模有三个途径&#xff1a;一种方法是用Brick、Sphere、Cone、Torus、Cylinder、Bond Wire指令绘制实体。第二种方法是用Extrude Face、Rotate Face、loft在已有模型基础上生成实体。第三种方法是&#xff0c;先用2D绘图指令绘制Curves&am…

Cross-Origin Read Blocking (CORB)

Cross-Origin Read Blocking (CORB) 是一种安全机制&#xff0c;用于保护Web应用免受跨域读取攻击。 跨域读取攻击可能会导致网站上的敏感信息被恶意代码访问和读取。这种攻击方式通常利用浏览器对不同源的资源访问的限制进行绕过。 CORB通过在浏览器中引入一种新的安全检测机…

Apache POI 在java中处理excel

介绍: Apache POI 是一个处理Miscrosoft Office各种文件格式的开源项目。简单来说就是&#xff0c;我们可以使用 POI 在 Java 程序中对Miscrosoft Office各种文件进行读写操作。 一般情况下&#xff0c;POI 都是用于操作 Excel 文件。 如何使用: 1.maven坐标引入 <depend…

Aker(安碁科技)晶振产品应用和选型

一、石英晶体振荡器简介 在电子电路系统中&#xff0c;特定的动作需要严格按照一定的顺序进行&#xff0c;以确保数据被正确处理和操作&#xff0c;时钟信号就成了系统工作的重要引导者。而且在多模块复杂电路系统中&#xff0c;为了确保不同功能模块能协调一致地工作&#xf…

【unity】(1)场景

Unity的场景&#xff08;Scene&#xff09;是构建游戏中各种环境和级别的基础。一个场景可以包含游戏中的所有对象&#xff0c;如角色、道具、地形等。 创建和管理场景 创建新场景&#xff1a; 在Unity编辑器中&#xff0c;选择File > New Scene&#xff0c;或者使用快捷键…

你用过最好用的AI工具有哪些

一&#xff1a;介绍 随着科技的飞速发展&#xff0c;AI技术已经深入到我们生活的每一个角落&#xff0c;为我们提供了前所未有的便利和可能性。在众多AI工具中&#xff0c;有几种特别受到人们的喜爱&#xff0c;并且在各自的领域中产生了深远的影响。 1、AI绘画工具 改图鸭AI绘…

【HarmonyOS4学习笔记】《HarmonyOS4+NEXT星河版入门到企业级实战教程》课程学习笔记(七)

课程地址&#xff1a; 黑马程序员HarmonyOS4NEXT星河版入门到企业级实战教程&#xff0c;一套精通鸿蒙应用开发 &#xff08;本篇笔记对应课程第 14 节&#xff09; P14《13.ArkUI组件-自定义组件》 将可变部分封装成组件的成员变量&#xff1a; 1、首先给标题添加两个图标&am…