之前介绍过如何在幻灯片中插入 SmartArt 图形,今天我们说一说如何使用Spire.Presentation来提取PPT中SmartArt图形的文本内容以及删除节点。
首先, 准备一个文档中含有SmartArt图形的幻灯片文件。
提取PPT中SmartArt图形的文本内容
代码如下:
C#
//实例化Presentation对象
Presentation ppt = new Presentation();
//加载文档
ppt.LoadFromFile(@"SmartArt测试文档.pptx");
//实例化一个StringBuilder对象用于存储获取出来的文本字符串
StringBuilder sb = new StringBuilder();
//遍历文档所有SmartArt节点, 获取其中的文本内容
for (int i = 0; i < ppt.Slides.Count; i++)
{
for (int j = 0; j < ppt.Slides[i].Shapes.Count; j++)
{
if (ppt.Slides[i].Shapes[j] is ISmartArt)
{
ISmartArt smartArt = ppt.Slides[i].Shapes[j] as ISmartArt;
for (int k = 0; k < smartArt.Nodes.Count; k++)
{
sb.AppendLine(smartArt.Nodes[k].TextFrame.Text);
}
}
}
}
//将字符串从StringBuilder中写出到txt文件
File.WriteAllText("Result.txt", sb.ToString());
VB.NET
'实例化Presentation对象
Dim ppt As New Presentation()
'加载文档
ppt.LoadFromFile("SmartArt测试文档.pptx")
'实例化一个StringBuilder对象用于存储获取出来的文本字符串
Dim sb As New StringBuilder()
'遍历文档所有SmartArt节点, 获取其中的文本内容
For i As Integer = 0 To ppt.Slides.Count - 1
For j As Integer = 0 To ppt.Slides(i).Shapes.Count - 1
If TypeOf ppt.Slides(i).Shapes(j) Is ISmartArt Then
Dim smartArt As ISmartArt = TryCast(ppt.Slides(i).Shapes(j), ISmartArt)
For k As Integer = 0 To smartArt.Nodes.Count - 1
sb.AppendLine(smartArt.Nodes(k).TextFrame.Text)
Next
End If
Next
Next
'将字符串从StringBuilder中写出到txt文件
File.WriteAllText("Result.txt", sb.ToString())
效果图如下:
删除SmartArt图形中的节点
代码如下:
C#
//实例化Presentation对象
Presentation ppt = new Presentation();
//加载文档
ppt.LoadFromFile(@"SmartArt测试文档.pptx");
//获取SmartArt图形的所有节点
ISmartArt smartart = ppt.Slides[0].Shapes[0] as ISmartArt;
ISmartArtNodeCollection nodes = smartart.Nodes;
//删除第一个节点下的第一个子节点下的第二个子节点,也就是"营销部"
nodes[0].ChildNodes[0].ChildNodes.RemoveNodeByPosition(1);
//保存到本地并打开
ppt.SaveToFile("SmartArt结果文档.pptx", FileFormat.Pptx2010);
System.Diagnostics.Process.Start("SmartArt结果文档.pptx");
VB.NET
'实例化Presentation对象
Dim ppt As New Presentation()
'加载文档
ppt.LoadFromFile("SmartArt测试文档.pptx")
'获取SmartArt图形的所有节点
Dim smartart As ISmartArt = TryCast(ppt.Slides(0).Shapes(0), ISmartArt)
Dim nodes As ISmartArtNodeCollection = smartart.Nodes
'删除第一个节点下的第一个子节点下的第二个子节点,也就是"营销部"
nodes(0).ChildNodes(0).ChildNodes.RemoveNodeByPosition(1)
'保存到本地并打开
ppt.SaveToFile("SmartArt结果文档.pptx", FileFormat.Pptx2010)
System.Diagnostics.Process.Start("SmartArt结果文档.pptx")
效果图如下: