在 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. APT案例之点击事件

    目录介绍 01.创建项目步骤 1.1 项目搭建 1.2 项目功能 02.自定义注解 03.创建Processor 04.compiler配置文件 05.编译jar 06.如何使用 07.编译生成代码 ...

  2. window-命令行操作

    window命令行操作 调起命令行-win+r输入cmd 网络探活 ping www.baidu.com 快捷启动应用 打开记事本 notepad 打开画图 mspaint 打开计算器 calc 命令 ...

  3. L7结合Turf.js实现空间分析与数据可视化

    1. 概述 AntV L7 是蚂蚁集团 AntV 数据可视化团队推出的基于 WebGL 的开源大规模地理空间数据可视分析引擎,其特点是通过简单的代码进行配置,即可在前端网页中绘制精美的地图以及相关的图 ...

  4. Dockerfile 时区设置(MacOs有效)

    # 设置时区RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtimeRUN echo 'Asia/Shanghai' >/etc/t ...

  5. NF-ResNet:去掉BN归一化,值得细读的网络信号分析 | ICLR 2021

    论文提出NF-ResNet,根据网络的实际信号传递进行分析,模拟BatchNorm在均值和方差传递上的表现,进而代替BatchNorm.论文实验和分析十分足,出来的效果也很不错.一些初始化方法的理论效 ...

  6. KingbaseES date 数据类型的两种格式

    关于date 数据类型,Oracle 与 PostgreSQL 格式是不同的,Oracle 是 日期 + 时间的类型,而PG 则只有日期.KingbaseES Oracle 模式则同时实现了二者类型, ...

  7. 22 axios和axios拦截器

    1. axios 由于jquery有严重的地狱回调逻辑. 再加上jquery的性能逐年跟不上市场节奏. 很多前端工程师采用axios来发送ajax. 相比jquery. axios更加灵活. 且容易使 ...

  8. #轻重链剖分,线段树#洛谷 3703 [SDOI2017]树点涂色

    题目传送门 分析 可以发现相同的颜色一定组成一个连通块. 那么操作2就相当于 \(f_x+f_y-2*f_{lca}+1\) 操作3就相当于询问 \(f\) 的最大值. 最关键的就是操作1,考虑往上跳 ...

  9. #斯坦纳树,状压dp#洛谷 3264 [JLOI2015]管道连接

    题目 分析 如果对于每一个频道单独跑斯坦纳树可能会存在两种频道共用一条道路而重复统计的情况, 考虑状压dp,设\(f[s]\)表示选择频道二进制状态为\(s\)的最小贡献,那么对于每个状态跑斯坦纳树然 ...

  10. ArkUI中的线程和看门狗机制

    一.前言 本文主要分析ArkUI中涉及的线程和看门狗机制. 二.ArkUI中的线程 应用Ability首次创建界面的流程大致如下: 说明: • AceContainer是一个容器类,由前端.任务执行器 ...