### C# 使用 NPOI 读取 Word 文档 #### 一、概述 在实际开发过程中,经常需要处理办公文档,比如Word、Excel等。针对这种情况,NPOI框架提供了非常方便的支持。本文将详细介绍如何使用C#结合NPOI库来读取Word文档中的内容。 #### 二、NPOI简介 NPOI是一个开源的.NET版本的POI项目,它允许开发者在不依赖Microsoft Office的情况下读取和修改Office文档,包括Word、Excel等。NPOI支持多种文档格式,如`.doc`、`.docx`、`.xls`、`.xlsx`等。 #### 三、读取Word文档 ##### 3.1 读取Word文档中的表格内容 ```csharp public static string ExcuteWord() { StringBuilder sb = new StringBuilder(); using (FileStream stream = File.OpenRead("d:/test.docx")) { XWPFDocument doc = new XWPFDocument(stream); var tables = doc.Tables; foreach (var table in tables) // 遍历表格 { foreach (var row in table.Rows) // 遍历行 { var c0 = row.GetCell(0); // 获得单元格0 foreach (var para in c0.Paragraphs) { string text = para.ParagraphText; // 处理段落 sb.Append(text + ","); } } } return sb.ToString(); } } ``` **解释说明:** 这段代码展示了如何读取Word文档中的表格内容。通过`FileStream`打开指定路径的`.docx`文件,并创建一个`XWPFDocument`实例。接着,获取文档中的所有表格,通过嵌套循环依次遍历每个表格中的每一行以及每一行的第一个单元格内的所有段落,并将这些段落文本拼接成字符串返回。 ##### 3.2 读取Word文档中的段落文本 ```csharp public static string ExcuteWordText() { StringBuilder sb = new StringBuilder(); using (FileStream stream = File.OpenRead("d:/test.docx")) { XWPFDocument doc = new XWPFDocument(stream); foreach (var para in doc.Paragraphs) { string text = para.ParagraphText; // 获得文本 var runs = para.Runs; string styleid = para.Style; for (int i = 0; i < runs.Count; i++) { var run = runs[i]; text += run.ToString(); // 获得run的文本 sb.Append(text + ","); } } } return sb.ToString(); } ``` **解释说明:** 该函数用于读取Word文档中的所有段落文本。通过遍历文档中的每一个段落,获取段落文本、样式以及段落中的所有`Run`对象,最后将文本拼接到一个`StringBuilder`对象中并返回。 #### 四、文档对象模型解析 无论是Word还是Excel,它们都有一套复杂的文档对象模型(DOM)。解析这类文档的关键在于理解其内部结构模型。 **4.1 Excel的文档对象模型** Excel文档通常包含以下几个层次: - **Workbook**:表示一个工作簿,可以包含多个工作表。 - **Sheet**:表示一个工作表,工作簿中可以包含多个工作表。 - **Row**:表示一行。 - **Column**:表示一列。 **4.2 Word的文档对象模型** Word文档的结构相对更为复杂,主要包括以下组成部分: - **Document**:表示整个文档。 - **Paragraph**:表示一个段落。 - **Table**:表示一个表格。 - **Row**:表示表格中的一行。 - **Cell**:表示表格中的一个单元格。 - **Run**:表示一个段落内的文本运行,可以包含不同的格式设置。 #### 五、NPOI的使用方式 使用NPOI解析Word或Excel文档有多种方式,常见的有: 1. **通过COM接口调用**:这种方式使用广泛,可以录制宏代码,然后转换为相应的编程语言实现。 2. **使用XML模型解析**:特别是对于2007及以后版本的文档,由于采用了Open XML格式,所以非常适合使用XML解析技术。 #### 六、示例代码 以下是一个简单的示例,展示了如何使用NPOI读取Excel文档: ```csharp public static List<List<List<string>>> ReadExcel(string fileName) { // 打开Excel工作簿 XSSFWorkbook hssfworkbook = null; try { using (FileStream file = new FileStream(fileName, FileMode.Open, FileAccess.Read)) { hssfworkbook = new XSSFWorkbook(file); } } catch (Exception e) { LogHandler.LogWrite(string.Format("文件 {0} 打开失败,错误:{1}", fileName, e.ToString())); } // 循环Sheet页 int sheetsCount = hssfworkbook.NumberOfSheets; List<List<List<string>>> workBook = new List<List<List<string>>>(); for (int i = 0; i < sheetsCount; i++) { // 读取每一个Sheet ISheet sheet = hssfworkbook.GetSheetAt(i); // 获取当前Sheet的最大行数 int rowCount = sheet.LastRowNum + 1; List<List<string>> sheetData = new List<List<string>>(); for (int j = 0; j < rowCount; j++) { IRow row = sheet.GetRow(j); if (row != null) { List<string> rowData = new List<string>(); for (int k = 0; k < row.LastCellNum; k++) { ICell cell = row.GetCell(k); if (cell != null) { rowData.Add(cell.ToString()); } else { rowData.Add(""); } } sheetData.Add(rowData); } } workBook.Add(sheetData); } return workBook; } ``` **总结:** 通过以上介绍可以看出,NPOI库提供了一个强大而灵活的工具,使得开发者可以在不依赖Microsoft Office的情况下读取和操作Word、Excel等文档。开发者可以根据具体需求选择合适的方法来实现文档的读写操作。
剩余8页未读,继续阅读
- 粉丝: 0
- 资源: 3
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助