C#使用OpenXml读取Word、PPT、Excel文档内容

2024-06-15 08:44

本文主要是介绍C#使用OpenXml读取Word、PPT、Excel文档内容,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

DocumentFormat.OpenXml是微软官方推出的一个操作Excel、Word、PPT文件的开源组件,因此它是免费的。以下是一些关于DocumentFormat.OpenXml的详细信息:

  1. 开源性质:DocumentFormat.OpenXml是一个开源项目,这意味着其源代码是公开的,并且允许开发者自由地使用、修改和分发。
  2. 功能:DocumentFormat.OpenXml提供了对Excel、Word、PPT等Office文档的底层操作能力,允许开发者以编程的方式对这些文档进行创建、编辑和修改。
  3. 版本:DocumentFormat.OpenXml有多个版本,其中最新的稳定版本是3.0.2。
  4. 性能与特点:虽然DocumentFormat.OpenXml提供了底层的操作能力,但使用它可能会比较复杂,因为它涉及到更多的底层细节和顺序限制。此外,由于其底层操作的特性,它并不总是能提供最高的性能。然而,对于那些需要精确控制文档结构和格式的开发者来说,DocumentFormat.OpenXml可能是一个不错的选择。

下面只做简单的对这几种格式的文件读取显示

使用NuGet搜索添加引用

DocumentFormat.OpenXml

运行调试代码(ppt或者word改下类名)

List<string> list = MyExcelByOpenXml.Read(@"E:\资料\文档\xxx.xlsx");
if (list != null)
{for (int i = 0; i < list.Count; i++)Console.WriteLine(list[i]);
}

读取Excel

using System;
using System.Collections.Generic;
using System.Linq;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;public class MyExcelByOpenXml
{public static List<string> Read(string filePath){List<string> list = new List<string>();using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(filePath, false)){// 获取工作表集合WorkbookPart workbookPart = spreadsheetDocument.WorkbookPart;Sheets sheets = workbookPart.Workbook.Descendants<Sheets>().FirstOrDefault();foreach (Sheet sheet in sheets.Elements<Sheet>()){// 获取工作表内容WorksheetPart worksheetPart = (WorksheetPart)workbookPart.GetPartById(sheet.Id);// 获取工作表中的单元格var cells = worksheetPart.Worksheet.Descendants<Cell>();foreach (var cell in cells){// 获取单元格的值string cellValue = GetCellValue(cell, workbookPart);if (cellValue != null && cellValue != "")list.Add(cellValue);Console.WriteLine(cellValue);}}}return list;}private static string GetCellValue(Cell cell, WorkbookPart workbookPart){string value = string.Empty;if (cell.DataType != null && cell.DataType.Value == CellValues.SharedString){int sharedStringIndex = int.Parse(cell.InnerText);value = workbookPart.SharedStringTablePart.SharedStringTable.ChildElements[sharedStringIndex].InnerText;}else if (cell.CellValue != null){value = cell.CellValue.Text;}return value;}
}

读取Word

using System;
using System.Collections.Generic;
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;class MyWord
{// 读取所有内容,以段落分割public static List<string> Read(string fileName){try{List<string> list = new List<string>();// 打开现有的Word文档using (WordprocessingDocument doc = WordprocessingDocument.Open(fileName, false)){// 获取文档的主体部分Body body = doc.MainDocumentPart.Document.Body;// 遍历所有段落并输出文本foreach (Paragraph para in body.Elements<Paragraph>()){if (para.InnerText != null || para.InnerText != ""){list.Add(para.InnerText);Console.WriteLine(para.InnerText);}}}return list;}catch (Exception ex){Console.WriteLine("读取Word失败:" + ex.Message);return null;}}
}

读取PPT

using System;
using System.Collections.Generic;
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Presentation;class MyPPT
{// 读取所有内容,以段落分割public static List<string> Read(string fileName){try{List<string> list = new List<string>();// 打开现有的ppt文档using (PresentationDocument ppt = PresentationDocument.Open(fileName, false)){// 获取文档的主体部分foreach (SlideId slideId in ppt.PresentationPart.Presentation.SlideIdList.Elements<SlideId>()){// 获取幻灯片内容SlidePart slidePart = (SlidePart)ppt.PresentationPart.GetPartById(slideId.RelationshipId);// 获取幻灯片中的文本框var textBoxes = slidePart.Slide.Descendants<DocumentFormat.OpenXml.Drawing.Text>();foreach (var textBox in textBoxes){Console.WriteLine(textBox.Text);list.Add(textBox.Text);}}}return list;}catch (Exception ex){Console.WriteLine("读取Word失败:" + ex.Message);return null;}}
}

这篇关于C#使用OpenXml读取Word、PPT、Excel文档内容的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1062966

相关文章

C#如何去掉文件夹或文件名非法字符

《C#如何去掉文件夹或文件名非法字符》:本文主要介绍C#如何去掉文件夹或文件名非法字符的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#去掉文件夹或文件名非法字符net类库提供了非法字符的数组这里还有个小窍门总结C#去掉文件夹或文件名非法字符实现有输入字

C#之List集合去重复对象的实现方法

《C#之List集合去重复对象的实现方法》:本文主要介绍C#之List集合去重复对象的实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C# List集合去重复对象方法1、测试数据2、测试数据3、知识点补充总结C# List集合去重复对象方法1、测试数据

SpringBoot读取ZooKeeper(ZK)属性的方法实现

《SpringBoot读取ZooKeeper(ZK)属性的方法实现》本文主要介绍了SpringBoot读取ZooKeeper(ZK)属性的方法实现,强调使用@ConfigurationProperti... 目录1. 在配置文件中定义 ZK 属性application.propertiesapplicati

C#实现将Office文档(Word/Excel/PDF/PPT)转为Markdown格式

《C#实现将Office文档(Word/Excel/PDF/PPT)转为Markdown格式》Markdown凭借简洁的语法、优良的可读性,以及对版本控制系统的高度兼容性,逐渐成为最受欢迎的文档格式... 目录为什么要将文档转换为 Markdown 格式使用工具将 Word 文档转换为 Markdown(.

CnPlugin是PL/SQL Developer工具插件使用教程

《CnPlugin是PL/SQLDeveloper工具插件使用教程》:本文主要介绍CnPlugin是PL/SQLDeveloper工具插件使用教程,具有很好的参考价值,希望对大家有所帮助,如有错... 目录PL/SQL Developer工具插件使用安装拷贝文件配置总结PL/SQL Developer工具插

SpringBoot3中使用虚拟线程的完整步骤

《SpringBoot3中使用虚拟线程的完整步骤》在SpringBoot3中使用Java21+的虚拟线程(VirtualThreads)可以显著提升I/O密集型应用的并发能力,这篇文章为大家介绍了详细... 目录1. 环境准备2. 配置虚拟线程方式一:全局启用虚拟线程(Tomcat/Jetty)方式二:异步

使用Python实现base64字符串与图片互转的详细步骤

《使用Python实现base64字符串与图片互转的详细步骤》要将一个Base64编码的字符串转换为图片文件并保存下来,可以使用Python的base64模块来实现,这一过程包括解码Base64字符串... 目录1. 图片编码为 Base64 字符串2. Base64 字符串解码为图片文件3. 示例使用注意

使用Python实现获取屏幕像素颜色值

《使用Python实现获取屏幕像素颜色值》这篇文章主要为大家详细介绍了如何使用Python实现获取屏幕像素颜色值,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、一个小工具,按住F10键,颜色值会跟着显示。完整代码import tkinter as tkimport pyau

Java调用C#动态库的三种方法详解

《Java调用C#动态库的三种方法详解》在这个多语言编程的时代,Java和C#就像两位才华横溢的舞者,各自在不同的舞台上展现着独特的魅力,然而,当它们携手合作时,又会碰撞出怎样绚丽的火花呢?今天,我们... 目录方法1:C++/CLI搭建桥梁——Java ↔ C# 的“翻译官”步骤1:创建C#类库(.NET

Linux使用scp进行远程目录文件复制的详细步骤和示例

《Linux使用scp进行远程目录文件复制的详细步骤和示例》在Linux系统中,scp(安全复制协议)是一个使用SSH(安全外壳协议)进行文件和目录安全传输的命令,它允许在远程主机之间复制文件和目录,... 目录1. 什么是scp?2. 语法3. 示例示例 1: 复制本地目录到远程主机示例 2: 复制远程主