查找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;

等等…

查找PPT标题的行数

换行符存储为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行