本主题讨论 Open XML SDK for Office Slide 类,以及它与 Open XML 文件格式 PresentationML 架构的关系。 有关构成 PresentationML 文档的部件和元素的整体结构的详细信息,请参阅 PresentationML 文档的结构。
PresentationML 中的演示文稿幻灯片
ISO/IEC 29500(该链接可能指向英文页面) 规范介绍了 Open XML PresentationML <sld/>
元素,此元素用于表示 PresentationML 文档中的演示文稿幻灯片,如下所示:
此元素在幻灯片列表中指定幻灯片。 幻灯片列表用于指定幻灯片的顺序。
示例:请考虑对幻灯片进行排序的以下自定义放映。
<p:custShowLst>
<p:custShow name="Custom Show 1" id="0">
<p:sldLst>
<p:sld r:id="rId4"/>
<p:sld r:id="rId3"/>
<p:sld r:id="rId2"/>
<p:sld r:id="rId5"/>
</p:sldLst>
</p:custShow>
</p:custShowLst>
在上面的示例中,指定的演示幻灯片的顺序为先是幻灯片 4,然后是 3、2,最后是 5。
© ISO/IEC 29500:2016
<sld/>
元素是 PresentationML 幻灯片部件的根元素。 有关构成 PresentationML 文档的部件和元素的整体结构的详细信息,请参阅 PresentationML 文档的结构。
下表列出了处理演示文稿幻灯片时使用的 元素的 <sld/>
子元素以及与之对应的 Open XML SDK 类。
PresentationML 元素 | Open XML SDK 类 |
---|---|
<clrMapOvr /> |
ColorMapOverride |
<cSld /> |
CommonSlideData |
<extLst /> |
ExtensionListWithModification |
<timing /> |
Timing |
<transition /> |
Transition |
Open XML SDK 幻灯片类
Open XML SDK Slide
类表示 <sld/>
在 PresentationML 文档的 Open XML 文件格式架构中定义的元素。
Slide
使用 对象可作 PresentationML 文档中的各个<sld/>
元素。
以下各节显示了通常与 Slide
类关联的类。
ColorMapOverride 类
类 ColorMapOverride
对应于 <clrMapOvr/>
元素。
ISO/IEC 29500 规范中的以下信息介绍了 元素<clrMapOvr/>
:
此元素提供一种机制,使用此机制可以替代 <ClrMap/>
元素中列出的配色方案。 如果存在 <masterClrMapping/>
子元素,则使用母版定义的配色方案。 如果存在 <overrideClrMapping/>
子元素,则它定义特定于父备注幻灯片、演示文稿幻灯片或幻灯片版式的新配色方案。
© ISO/IEC 29500:2016
CommonSlideData 类
类 CommonSlideData
对应于 <cSld/>
元素。
ISO/IEC 29500 规范中的以下信息介绍了 元素<cSld/>
:
此元素指定与所有幻灯片类型相关的幻灯片信息类型的容器。 所有幻灯片都共享一组独立于幻灯片类型的通用属性;任何特定幻灯片的这些属性的描述都存储在该幻灯片的 <cSld/>
容器中。 由父元素指明的特定于幻灯片类型的幻灯片数据存储在其他位置。
<cSld/>
中的实际数据只描述特定的父幻灯片;这些数据只是存储的对所有幻灯片通用的信息类型。
© ISO/IEC 29500:2016
ExtensionListWithModification 类
类 ExtensionListWithModification
对应于 <extLst/>
元素。 以下信息来自
规范引入了 <extLst/>
元素:
此元素指定具有修改能力的扩展列表,在该列表中定义元素类型 <ext/>
的所有未来扩展。
扩展列表以及相应的未来扩展用于扩展 PresentationML 框架的存储功能。 这允许在框架中本机存储各种新类型的数据。
[注意:使用此 extLst
元素,生成应用程序可以存储是否已修改此扩展属性。 注释结束]
© ISO/IEC 29500:2016
Timing 类
类 Timing
对应于 <timing/>
元素。
ISO/IEC 29500 规范中的以下信息介绍了 元素<timing/>
:
此元素指定用于处理对应幻灯片中的所有动画和定时事件的计时信息。 此信息通过 <timing/>
元素中的时间节点进行跟踪。
有关这些时间节点及其定义方式的详细信息,请参阅 PresentationML 框架中的"动画"部分。
© ISO/IEC 29500:2016
Transition 类
类 Transition
对应于 <transition/>
元素。
ISO/IEC 29500 规范中的以下信息介绍了 元素<transition/>
:
此元素指定应该用于从前一幻灯片切换到当前幻灯片的幻灯片切换类型。 也就是说,切换信息存储在切换完成后显示的幻灯片中。
© ISO/IEC 29500:2016
处理幻灯片类
如下面的 Open XML SDK 代码示例所示,类的每个实例 Slide
都与 类的 SlidePart 一个实例相关联,该实例表示幻灯片部件,这是 PresentationML 演示文稿文件包的必需部分之一。 类的每个实例Slide
还必须与 和 SlideMaster 类的SlideLayout实例相关联,这些实例又与由 和 SlideMasterPart 类表示SlideLayoutPart的类似名称必需的表示部件相关联。
Slide
因此,表示 元素的<sld/>
类也与一系列表示元素子元素<sld/>
的其他类相关联。 如以下代码示例所示,这些类包括 CommonSlideData
类、 ColorMapOverride
类、 ShapeTree 类和 Shape 类。
Open XML SDK 代码示例
如何:通过提供文件名创建演示文稿文档一文中的以下方法会将新的幻灯片部件添加到现有演示文稿,并在新幻灯片部件中创建 Open XML SDK Slide
类的实例。
类Slide
构造函数创建 和 ColorMapOverride
类的CommonSlideData
实例。 类 CommonSlideData
构造函数创建 类的 ShapeTree
实例,其构造函数反过来又创建其他类实例:类的 NonVisualGroupShapeProperties 实例、 GroupShapeProperties 类和 类的 Shape
实例。
需要所有这些类实例和表示 <sld/>
元素的子元素的类实例才能创建表示新幻灯片所需的最少数量的 XML 元素。
代码中由字母 P 表示的命名空间是 DocumentFormat.OpenXml.Presentation 命名空间。
static SlidePart CreateSlidePart(PresentationPart presentationPart)
{
SlidePart slidePart1 = presentationPart.AddNewPart<SlidePart>("rId2");
slidePart1.Slide = new Slide(
new CommonSlideData(
new ShapeTree(
new P.NonVisualGroupShapeProperties(
new P.NonVisualDrawingProperties() { Id = (UInt32Value)1U, Name = "" },
new P.NonVisualGroupShapeDrawingProperties(),
new ApplicationNonVisualDrawingProperties()),
new GroupShapeProperties(new TransformGroup()),
new P.Shape(
new P.NonVisualShapeProperties(
new P.NonVisualDrawingProperties() { Id = (UInt32Value)2U, Name = "Title 1" },
new P.NonVisualShapeDrawingProperties(new ShapeLocks() { NoGrouping = true }),
new ApplicationNonVisualDrawingProperties(new PlaceholderShape())),
new P.ShapeProperties(),
new P.TextBody(
new BodyProperties(),
new ListStyle(),
new Paragraph(new EndParagraphRunProperties() { Language = "en-US" }))))),
new ColorMapOverride(new MasterColorMapping()));
return slidePart1;
}
若要向形状树添加另一个形状,从而向幻灯片添加另一个形状,请通过将包含以下代码的附加参数传递给构造函数来ShapeTree
实例化第二Shape
个对象。
new P.Shape(
new P.NonVisualShapeProperties(
new P.NonVisualDrawingProperties() { Id = (UInt32Value)2U, Name = "Title 1" },
new P.NonVisualShapeDrawingProperties(new ShapeLocks() { NoGrouping = true }),
new ApplicationNonVisualDrawingProperties(new PlaceholderShape())),
new P.ShapeProperties(),
new P.TextBody(
new BodyProperties(),
new ListStyle(),
new Paragraph(new EndParagraphRunProperties() { Language = "en-US" }))))),
生成的 PresentationML
当运行方法中的 Open XML SDK 代码时,会将以下 XML 代码写入代码中引用的 PresentationML 文档文件。
<?xml version="1.0" encoding="utf-8" ?>
<p:sld xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main">
<p:cSld>
<p:spTree>
<p:nvGrpSpPr>
<p:cNvPr id="1" name="" />
<p:cNvGrpSpPr />
<p:nvPr />
</p:nvGrpSpPr>
<p:grpSpPr>
<a:xfrm xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" />
</p:grpSpPr>
<p:sp>
<p:nvSpPr>
<p:cNvPr id="2" name="Title 1" />
<p:cNvSpPr>
<a:spLocks noGrp="1" xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" />
</p:cNvSpPr>
<p:nvPr>
<p:ph />
</p:nvPr>
</p:nvSpPr>
<p:spPr />
<p:txBody>
<a:bodyPr xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" />
<a:lstStyle xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" />
<a:p xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main">
<a:endParaRPr lang="en-US" />
</a:p>
</p:txBody>
</p:sp>
</p:spTree>
</p:cSld>
<p:clrMapOvr>
<a:masterClrMapping xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" />
</p:clrMapOvr>
</p:sld>