dotnet OpenXML 利用合并表格单元格在 PPT 文档插入不可见的额外版权信息
本文告诉大家如何利用 Office 对于 OpenXML 支持的特性,在 PPT 的表格里面,通过合并单元格存放一些额外的信息,这些信息对用户来说是不可见的,但是进行拷贝表格等的时候,可以保存此信息内容
在开始之前,期望大家已了解很多 OpenXML 知识,详细请看
在 PPT 的表格里面,采用了 RowSpan 用来表示单元格跨行,对应的在下一行的单元格将会被标记 vMerge="1"
表示此单元格被垂直合并。例如我对第一行第一个单元格设置合并单元格,合并行,那么在第二行的第一列的单元格将被标记 vMerge="1"
表示被合并,如下面表格
在 Office 读取 OpenXML 文档,将无视 vMerge="1"
的存在,也就是此属性只是给开发者看的而已,无论是否存在都不会影响到单元格的合并
但事实上,依然可以在标记了 vMerge="1"
的单元格上面添加内容,例如以下有删减的 OpenXML 文档
123123
投毒
如上面文档,给了一个单元格写了“投毒”但在 PPT 打开时,是看不到投毒的,如下面界面
以下是此 Office 文档的页面
{5C22544A-7EE6-4342-B048-85BDC9FD1C3A}
123123
投毒
此时无论是保存还是拷贝表格,都不会丢失 “投毒” 内容。也就是说可以方便的在合并的单元格里面存放一些版权信息,这些版权信息对于用户来说,除非是特意去更改,否则都会放在文档里面
如果忽略合并单元格,通过 WPF 应用读取文档,使用 DataGrid 在界面显示,那么即可拿到合并单元格的内容
var file = new FileInfo("Test.pptx");
using var presentationDocument = PresentationDocument.Open(file.FullName, false);
var slide = presentationDocument.PresentationPart!.SlideParts.First().Slide;
var graphicFrame = slide.CommonSlideData!.ShapeTree!.GetFirstChild()!;
var graphic = graphicFrame.Graphic!;
var graphicData = graphic.GraphicData!;
var table = graphicData.GetFirstChild()!; // a:tbl
/*
123123
投毒
*/
var dataTable = new DataTable();
DataGrid.DataContext = dataTable;
DataGrid.HeadersVisibility = DataGridHeadersVisibility.None;
var n = 0;
foreach (var gridColumn in table.TableGrid!.Elements())
{
var emu = new Emu(gridColumn.Width?.Value ?? 95250);
DataGrid.Columns.Add(new DataGridTextColumn()
{
Width = emu.ToPixel().Value,
Binding = new Binding(n.ToString())
});
dataTable.Columns.Add(n.ToString());
n++;
}
foreach (var openXmlElement in table)
{
// a:tr 表格的行
if (openXmlElement is TableRow tableRow)
{
var dataRow = dataTable.NewRow();
dataTable.Rows.Add(dataRow);
var index = 0;
foreach (var tableCell in tableRow.Elements())
{
var text = tableCell.TextBody!.InnerText;
dataRow[index.ToString()] = text;
index++;
}
}
}
执行上面代码的界面如下
本文以上的测试文件和代码放在 和 欢迎访问
可以通过如下方式获取本文的源代码,先创建一个空文件夹,接着使用命令行 cd 命令进入此空文件夹,在命令行里面输入以下代码,即可获取到本文的代码
git init
git remote add origin https://gitee.com/lindexi/lindexi_gd.git
git pull origin fd6ad246d15db91342476dae7fc841182179726d
以上使用的是 gitee 的源,如果 gitee 不能访问,请替换为 github 的源
git remote remove origin
git remote add origin https://github.com/lindexi/lindexi_gd.git
获取代码之后,进入 Pptx 文件夹
更多请看
原文:https://www.cnblogs.com/lindexi/p/15220134.html
推荐资源
抖商公社直播带货成长营,教你快速通过直播带货变现,抢占直播电商的流量红利
世界第一魔方盲拧选手庄海燕魔方盲拧教程
视频号最新带货玩法,无需成本可直接操作,新手到高手快速蜕变
王者级微信小程序开发实战教学 从零到高手搭建微信小程序框架开发教程
直播控流师线上课,流量掌控拆解认知,干货满满
2020年初级会计师初级实务《高端押题班》视频教程下载(更新中)
微头条副业掘金项目第2期:单篇爆文收益30-50以上,适合小白
亚马逊入门到精通培训课程:带你从零一步步学习操作亚马逊平台 (26套)合集
新手7天快速起号百万播放实战精品课,零基础1人1部手机
老男孩最新周末班Python开发与Python爬虫实战视频教程 老男孩Python周末班视频教程
相关推荐