C# 读去Word文档(NPOI)

NPOI.dll文件下载:

百度网盘 请输入提取码

NPOI介绍:

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

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

实现的操作:

获取Word文档所有Sheet表格。

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

cs 复制代码
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、Age
                    object columnName = GetValueType(header.GetCell(i));

                    if (columnName == null || columnName.ToString() == string.Empty)
                    {
                        dt.Columns.Add(new DataColumn("Columns" + i.ToString()));
                    }
                    else
                        dt.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;
            }
        }
    }
}
相关推荐
青涩小鱼2 小时前
在WPS中设置word的页码不从第一页开始,从指定页开始插入页码
word·wps
pchmi2 小时前
CNN常用卷积核
深度学习·神经网络·机器学习·cnn·c#
yuanpan3 小时前
23种设计模式之《组合模式(Composite)》在c#中的应用及理解
开发语言·设计模式·c#·组合模式
滴_咕噜咕噜4 小时前
C#基础总结:常用的数据结构
开发语言·数据结构·c#
万兴丶7 小时前
Unity 适用于单机游戏的红点系统(前缀树 | 数据结构 | 设计模式 | 算法 | 含源码)
数据结构·unity·设计模式·c#
程序猿多布8 小时前
C#设计模式 学习笔记
设计模式·c#
软件黑马王子14 小时前
Unity游戏制作中的C#基础(5)条件语句和循环语句知识点全解析
游戏·unity·c#
shepherd枸杞泡茶14 小时前
第3章 3.3日志 .NET Core日志 NLog使用教程
c#·asp.net·.net·.netcore
企鹅侠客17 小时前
开源免费文档翻译工具 可支持pdf、word、excel、ppt
人工智能·pdf·word·excel·自动翻译
Aimeast21 小时前
关于选择最佳.NET Core SSH服务器库的全面分析
c#·ssh