C# 读去Word文档(NPOI)

本文详细介绍了使用NPOI库在C#中实现对Excel和Word文档的读写操作,包括获取Word文档所有Sheet、读取指定表格数据并转换为DataTable。展示了如何在不依赖Office的前提下处理MicrosoftOffice文档。
摘要由CSDN通过智能技术生成

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、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;
            }
        }
    }
}

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值