查找PPT标题的行数
本文关键字:标题 PPT 查找 | 更新日期: 2023-09-27 18:19:06
我似乎找不到ppt幻灯片标题中强制换行符的数目。
它不是任何类型的换行符,也不被认为是段落结束符。根据这个,它是一个垂直标签,CHR(11)。但这也行不通(见下文)。
尝试获取该字符没有结果。我在一个pptx文件中有一个这样的标题:
B([输入]B)
.substring(0)返回A
.substring(1)返回B
我没有尝试过。substring(0.5),但我接近那个点。
这是应该工作的,但它没有,它只是返回1。
int rowCount = titleText.Length-titleText.Replace(((char)11).ToString(),"").Length+1;
我正在使用Office Open XML SDK 2.5。谢谢!
编辑:类似的代码在PowerPoint VBA中工作得很好。
EDIT2:
也许获取段落文本是破坏垂直标签的原因?将计数器添加到循环中,每个计数器为1。
foreach (var paragraph in shape.TextBody.Descendants<A.Paragraph>())
{
foreach (var text in paragraph.Descendants<A.Text>())
{
shapeText += text.Text;
}
}
returnText.Append(analyzeTitleText(shapeText));
private static string analyzeTitleText(string titleText)
int rowCount = titleText.Length-titleText.Replace(((char)11).ToString(),"").Length+1;
等等…
换行符存储为Break
元素,因此您需要计算标题元素中的换行符的数量。
我创建了一个标题为A[enter]b[enter]
的示例幻灯片并提取了XML。slide1.xml文件的相关部分如下:
<a:p>
<a:r>
<a:rPr lang="en-GB" smtClean="0" />
<a:t>A</a:t>
</a:r>
<a:br>
<a:rPr lang="en-GB" smtClean="0" />
</a:br>
<a:r>
<a:rPr lang="en-GB" smtClean="0" />
<a:t>b</a:t>
</a:r>
<a:br>
<a:rPr lang="en-GB" smtClean="0" />
</a:br>
<a:endParaRPr lang="en-GB" />
</a:p>
注意<a:br>
元素-这些是新的行。
改编来自MSDN的示例,显示如何获得标题元素,下面将输出每个幻灯片标题中的新行数(注意,IsTitleSlide
是在MSDN文章中定义的,我没有在这里复制该代码,因为获取标题不是您的问题):
using (PresentationDocument presentationDocument = PresentationDocument.Open(filepath, false))
{
PresentationPart presentationPart = presentationDocument.PresentationPart;
if (presentationPart != null && presentationPart.Presentation != null)
{
Presentation presentation = presentationPart.Presentation;
if (presentation.SlideIdList != null)
{
foreach (var slideId in presentation.SlideIdList.Elements<SlideId>())
{
SlidePart slidePart = presentationPart.GetPartById(slideId.RelationshipId) as SlidePart;
var shapes = slidePart.Slide.Descendants<DocumentFormat.OpenXml.Presentation.Shape>().Where(IsTitleShape);
int newLines = shapes.SelectMany(s => s.Descendants<DocumentFormat.OpenXml.Drawing.Break>()).Count();
Console.WriteLine("Slide {0} has {1} new lines", slidePart.Uri, newLines);
}
}
}
}
对于上面的示例幻灯片,代码返回:
Slide/ppt/slides/slide1.xml新增2行