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#中async await异步关键字用法和异步的底层原理全解析

《C#中asyncawait异步关键字用法和异步的底层原理全解析》:本文主要介绍C#中asyncawait异步关键字用法和异步的底层原理全解析,本文给大家介绍的非常详细,对大家的学习或工作具有一... 目录C#异步编程一、异步编程基础二、异步方法的工作原理三、代码示例四、编译后的底层实现五、总结C#异步编程

使用Python构建一个Hexo博客发布工具

《使用Python构建一个Hexo博客发布工具》虽然Hexo的命令行工具非常强大,但对于日常的博客撰写和发布过程,我总觉得缺少一个直观的图形界面来简化操作,下面我们就来看看如何使用Python构建一个... 目录引言Hexo博客系统简介设计需求技术选择代码实现主框架界面设计核心功能实现1. 发布文章2. 加

C#TextBox设置提示文本方式(SetHintText)

《C#TextBox设置提示文本方式(SetHintText)》:本文主要介绍C#TextBox设置提示文本方式(SetHintText),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录C#TextBox设置提示文本效果展示核心代码总结C#TextBox设置提示文本效果展示核心代

shell编程之函数与数组的使用详解

《shell编程之函数与数组的使用详解》:本文主要介绍shell编程之函数与数组的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录shell函数函数的用法俩个数求和系统资源监控并报警函数函数变量的作用范围函数的参数递归函数shell数组获取数组的长度读取某下的

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t

C#中DrawCurve的用法小结

《C#中DrawCurve的用法小结》本文主要介绍了C#中DrawCurve的用法小结,通常用于绘制一条平滑的曲线通过一系列给定的点,具有一定的参考价值,感兴趣的可以了解一下... 目录1. 如何使用 DrawCurve 方法(不带弯曲程度)2. 如何使用 DrawCurve 方法(带弯曲程度)3.使用Dr

Python虚拟环境终极(含PyCharm的使用教程)

《Python虚拟环境终极(含PyCharm的使用教程)》:本文主要介绍Python虚拟环境终极(含PyCharm的使用教程),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录一、为什么需要虚拟环境?二、虚拟环境创建方式对比三、命令行创建虚拟环境(venv)3.1 基础命令3

Python Transformer 库安装配置及使用方法

《PythonTransformer库安装配置及使用方法》HuggingFaceTransformers是自然语言处理(NLP)领域最流行的开源库之一,支持基于Transformer架构的预训练模... 目录python 中的 Transformer 库及使用方法一、库的概述二、安装与配置三、基础使用:Pi

关于pandas的read_csv方法使用解读

《关于pandas的read_csv方法使用解读》:本文主要介绍关于pandas的read_csv方法使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录pandas的read_csv方法解读read_csv中的参数基本参数通用解析参数空值处理相关参数时间处理相关

使用Node.js制作图片上传服务的详细教程

《使用Node.js制作图片上传服务的详细教程》在现代Web应用开发中,图片上传是一项常见且重要的功能,借助Node.js强大的生态系统,我们可以轻松搭建高效的图片上传服务,本文将深入探讨如何使用No... 目录准备工作搭建 Express 服务器配置 multer 进行图片上传处理图片上传请求完整代码示例