在 PPT 里面的表格可以通过表格样式配置决定表格的样式,本文将和大家介绍如何获取和解析表格的样式

本文属于 OpenXML 系列博客,有一定的上下文,详细请参阅 Office 使用 OpenXML SDK 解析文档博客目录

在 PPT 里面的表格,如存放在页面 Slide 里面的表格,可以通过 a:tableStyleId 属性存放表格的样式 Id 值。表格的样式可以采用自定义表格样式,也可以采用应用自带的样式。为了兼容性,大部分情况下,即使采用应用自带的样式,也是会将样式模版放入到 TableStylesPart 里面去,也就是对应的 TableStyles.xml 文件里面

放在 Slide 里面的表格的代码大概如下

      <p:graphicFrame>
<p:nvGraphicFramePr>
<p:cNvPr id="4" name="表格 4">
...
</p:cNvPr>
<p:nvPr>
...
</p:nvPr>
</p:nvGraphicFramePr>
<p:xfrm>
<a:off x="2032000" y="719666" />
<a:ext cx="8127999" cy="1112520" />
</p:xfrm>
<a:graphic>
<a:graphicData uri="http://schemas.openxmlformats.org/drawingml/2006/table">
<a:tbl>
<a:tblPr firstRow="1" bandRow="1">
<a:tableStyleId>{21E4AEA4-8DFA-4A89-87EB-49C32662AFE0}</a:tableStyleId>
</a:tblPr>
<a:tblGrid>
...
</a:tblGrid>
...
</a:tbl>
</a:graphicData>
</a:graphic>
</p:graphicFrame>

以上的 <a:tableStyleId>{21E4AEA4-8DFA-4A89-87EB-49C32662AFE0}</a:tableStyleId> 就是用来定制表格采用哪个样式

对应的样式的细节定义,大部分时候可以从 TableStylesPart 里面,也就是对应的 TableStyles.xml 文件里面去找到,里面存放的样式代码大概如下

  <a:tblStyleLst xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" def="{5C22544A-7EE6-4342-B048-85BDC9FD1C3A}">
<a:tblStyle styleId="{21E4AEA4-8DFA-4A89-87EB-49C32662AFE0}">
<a:wholeTbl>
...
</a:wholeTbl>
</a:tblStyle>
</a:tblStyleLst>

另一些样式是直接存放到 TableProperties 也就是对应的 a:tblPr 的 TableStyle 里面去,对于这样定义的文档来说,直接获取 TableStyle 即可

大概的获取代码如下

// 先已拿到 Table 对象,也就是 a:tbl 属性
// 以下代码存放在获取表格样式方法 var tableProperties = table.TableProperties; if (tableProperties is null)
{
return null;
} // 有一些PPT的样式是放在tblPr属性里的。
var tableStyle = tableProperties.GetFirstChild<TableStyle>();
if (tableStyle != null)
{
return tableStyle;
} // 2016新版本PPT是通过TableStyleId去寻找样式表的。
var tableStyleId = tableProperties.GetFirstChild<TableStyleId>();
if (tableStyleId is null)
{
return null;
} var text = tableStyleId.Text;
// 以下的 document 是 PresentationDocument 类型
var tableStyleList = document.PresentationPart.TableStylesPart
?.TableStyleList;
var tableStyleEntry = tableStyleList?.Elements<TableStyleEntry>()
.FirstOrDefault(temp => temp.StyleId == text);

对于一些文档来说,如果采用的是应用自带的样式,可能没有将样式内容存放到 TableStylesPart 里面去。此时就采用应用级样式,所谓应用级样式属性,那就是编写在代码里面的样式。比如本文所使用 {21E4AEA4-8DFA-4A89-87EB-49C32662AFE0} 样式。此样式是可以在 PPTX 文档里面默认不写样式定义的

对应以上的代码,也就是无法从 TableStyleList 里面获取到 tableStyleEntry 对象。此时就需要采用代码自己编写预设的样式

            // 从 Application 级获取表格的样式。
tableStyleEntry ??= TableStyleEntryProvider.CreateTableStyleEntry(text); return tableStyleEntry;

这里的 TableStyleEntryProvider 类型是我编写的代码,里面包含了大量的预设表格样式。此代码放入到 dotnetCampus.DocumentFormat.OpenXml.Flatten 库里面,代码在 GitHub 完全开源,详细请参阅 https://github.com/dotnet-campus/DocumentFormat.OpenXml.Extensions

更多请看 Office 使用 OpenXML SDK 解析文档博客目录

dotnet OpenXML 解析 PPT 里表格的样式的更多相关文章

  1. dotnet OpenXML 读取 PPT 内嵌 ole 格式 Excel 表格的信息

    在 Office 中,可以在 PPT 里面插入表格,插入表格有好多不同的方法,对应 OpenXML 文档存储的更多不同的方式.本文来介绍如何读取 PPT 内嵌 ole 格式的 xls+ 表格的方法 在 ...

  2. 使用 WPF 做个 PowerPoint 系列 基于 OpenXML 解析实现 PPT 文本描边效果

    本文是使用 WPF 做个 PowerPoint 系列的博客,本文来告诉大家如何解析 PPT 里面的文本描边效果,在 WPF 应用中绘制出来,实现像素级相同 背景知识 在开始之前,期望你了解了 PPT ...

  3. dotnet OpenXML 转换 PathFillModeValues 为颜色特效

    在 OpenXml 预设形状,有一些形状设置了 PathFillModeValues 枚举,此枚举提供了亮暗的蒙层特效.具体的特效是让形状选择一个画刷,在画刷上加上特效.如立体几何 Cube 形状,在 ...

  4. [转]CSS如何设置html table表格边框样式

    原文地址:http://www.divcss5.com/wenji/w503.shtml 对table设置css样式边框,分为几种情况: 1.只对table设置边框 2.对td设置边框 3.对tabl ...

  5. JavaScript(第二十天)【DOM操作表格及样式】

    DOM在操作生成HTML上,还是比较简明的.不过,由于浏览器总是存在兼容和陷阱,导致最终的操作就不是那么简单方便了.本章主要了解一下DOM操作表格和样式的一些知识. 一.操作表格 <table& ...

  6. WPF解析PPT为图片

    偶遇需要解析 PPT为单张图片 其中,对于包含动画的PPT页,分别对动画最后效果进行截取,即每个连续动画截取 (动画N个)N+1(原图)张 http://git.oschina.net/jiailiu ...

  7. Android在一个TextView里显示不同样式的字体

    在同一个TextView里显示不同样式的字体 public void setSpan(Object what, int start, int end, int flags); 样式1:背景色.粗体.字 ...

  8. 表格-table 样式

    .table: 表格基本样式 .table-dark:表格显示为黑色 .thead-light: 表头显示颜色跟亮 .thead-dark:表头显示为黑色 .table-striped:表格以条纹形式 ...

  9. ch7对表单和数据表格使用样式

    对数据表格应用样式 1.表格特有的元素 caption:基本上用做表格的标题.summary:可应用于表格的标签,用来描述表格的内容(与image的alt文本相似) <table class=& ...

  10. java 解析URL里的主域名及参数工具类

    java 解析URL里的协议及参数工具类,解析URL中的主域名,并统一把协议修改成http或去掉协议 public class UrlDomainUtils { private static fina ...

随机推荐

  1. Button按钮Effect的用法

    教大家写一个好看的Button按钮 代码简单粗暴 <Grid > <Border Width="200" Height="30" Margin ...

  2. 自建AXI4的IP核的地址问题

    自建AXI4的IP核的地址问题 1.问题概述 在AXI4中,对应的操作通过对对应的寄存器设置来完成.其中的寄存器又分为数据寄存器和地址寄存器.其中,如果只是想要操作数据的话,只需要使用数据寄存器即可. ...

  3. Python爬取腾讯视频电影名称和链接(一)

    1 import requests 2 import json 3 from bs4 import BeautifulSoup #网页解析获取数据 4 import sys 5 import re 6 ...

  4. 线段树(SegmentTree)

    对于数组应用于区间染色实现为On,而线段树是O(logn) 什么是线段树:对于一个二叉树,每一个节点存储的是一个线段或是一个区间相应的信息. 查询 更新 #pragma once #include & ...

  5. Visual Studio 2022插件的安装及使用 - 编程手把手系列文章

    这次开始写手把手编程系列文章,刚写到C#的Dll程序集类库的博文,就发现需要先介绍Visual Studio 2022的插件的安装及使用,因为在后面编码的时候会用到这些个插件,所以有必要先对这个内容进 ...

  6. 【FAQ】运动健康服务端侧数据常见问题及解答

    目录 Q1:Health Kit开放的API是否支持同时获取多个华为手环的健康数据? Q2:当前通过Health Kit获取运动健康数据的功能是否免费? Q3:在联盟平台申请Health Kit权限, ...

  7. 决策树模型(4)Cart算法

    Cart算法 Cart是Classification and regression tree的缩写,即分类回归树.它和前面的ID3, C4.5等算法思想一致都是通过对输入空间进行递归划分并确定每个单元 ...

  8. .NET Emit 入门教程:第六部分:IL 指令:7:详解 ILGenerator 指令方法:分支条件指令

    前言: 经过前面几篇的学习,我们了解到指令的大概分类,如: 参数加载指令,该加载指令以 Ld 开头,将参数加载到栈中,以便于后续执行操作命令. 参数存储指令,其指令以 St 开头,将栈中的数据,存储到 ...

  9. flutter3-macOS桌面端os系统|flutter3.x+window_manager仿mac桌面管理

    原创力作flutter3+getX+window_manager仿Mac桌面系统平台Flutter-MacOS. flutter3_macui基于最新跨端技术flutter3.19+dart3.3+w ...

  10. nginx重新整理——————http请求的11个阶段[十二]

    前言 已经到了关键的http请求的11个阶段了. 正文 概念图: 11 个阶段的处理顺序: 那么就来介绍一下: 先来了解一下postread阶段的realip这个处理,realip 是 real ip ...