C# 读去Word文档(NPOI)

ops/2024/9/23 8:15:45/

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.ppmy.cn/ops/26113.html

相关文章

【Spring】4.Spring的事务管理解析

什么是事务 事务是数据库管理系统中的一个关键概念&#xff0c;用于确保数据的完整性和可靠性。在Spring框架中&#xff0c;事务通常指的是一段代码&#xff0c;这段代码要么完全执行&#xff0c;要么完全不执行&#xff0c;不会出现部分执行的情况。 Spring提供了事务管理的机…

初学React基础

最近准备跟着黑马React学一下React&#xff0c;扩充一下技术面&#xff0c;打算还是以一边学习一边记笔记为主&#xff0c;进行学习&#xff01; 1. React介绍 1.1. React是什么&#xff1f; React是由FaceBook现在称&#xff08;Meta&#xff09;开发的开源 JavaScript 库&a…

基于EBAZ4205矿板的图像处理:03使用VIO调试输出HDMI视频图像

基于EBAZ4205矿板的图像处理&#xff1a;03使用VIO调试输出HDMI视频图像 在zynq调试时VIO是真的方便&#xff0c;特此写一篇博客记录一下 先看效果 项目简介 下面是我的BD设计&#xff0c;vtc用于生成时序&#xff0c;注意&#xff0c;2021.2的vivado的vtcIP是v6.2版本&…

SQLite如何处理CSV 虚拟表(三十七)

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;SQLite的DBSTAT 虚拟表&#xff08;三十六&#xff09; 下一篇:SQLite的扩展函数Carray()表值函数(三十八) ​ RFC4180格式是一种文本文件格式&#xff0c;被用于表格数据间的交互&#xff0c;也可将表格数据转化…

python挑战10秒小程序

目录 一.前言 二.代码 三.分析 一.前言 >1.小程序开始时,会出现一个倒计时器,从10秒开始。 >2.玩家需要集中注意力并估计10秒钟过去的时间。 >3.当玩家认为10秒钟已经过去时,需要点击屏幕上的按钮。 >4.小程序会显示玩家的点击时间,以及与实际10秒钟的时间…

RS0108YQ20功能和参数介绍及高速数据传输中的优势

RS0108YQ20功能和参数介绍及高速数据传输中的优势-公司新闻-配芯易-深圳市亚泰盈科电子有限公司 RS0108YQ20是一款电平转换器&#xff0c;也称为电平移位器&#xff0c;它的主要功能是在不同的电源电压或逻辑电平之间提供双向信号转换。以下是RS0108YQ20的一些关键参数和功能特…

二叉树:数据结构的分形之美

1.树形结构 1.1概念 树是一种非线性的数据结构&#xff0c;它是由n(n>0)个有限结点组成一个具有层次关系的集合。把他叫做树是因为它看起来像一棵倒挂的树&#xff0c;也就说它的根朝上&#xff0c;而叶朝下的。它具有以下的特点&#xff1a; 有一个特殊的节点&#xff0…

vue3的v-model在组件上几种用法

文章目录 父组件1、update和 : 拆开使用2、computed 计算属性方法3、defineModel (3.4) 官方推荐4、TS泛型用法(3.3) 父组件 <template><div><button click"dialogVisible !dialogVisible">打开/关闭</button><ModalComp v-model"…