我似乎无法在PowerPoint幻灯片标题中找到强制换行符的数量。
它不是任何类型的换行符,也不会被视为段落结尾。根据{{3}},它是一个垂直标签,CHR(11)。但这也不起作用(见下文)。
尝试获取角色没有结果。我在pptx文件中有这样的标题:
A
乙
(A [输入] 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));
私有静态字符串analyzeTitleText(string titleText)
int rowCount = titleText.Length-titleText.Replace(((char)11).ToString(),"").Length+1;
等...
答案 0 :(得分:1)
换行符存储为Break
元素,因此您需要计算标题元素中的中断数。
我创建了一个标题为<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>
的示例幻灯片,并提取了XML。 slide1.xml文件的相关部分如下所示:
<a:br>
请注意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);
}
}
}
}
定义在MSDN文章,我没有在这里复制该代码,因为获得标题不是你的问题):
$Results = Invoke-Parallel -InputObject $servers -throttle 20 -runspaceTimeout 30 -ImportVariables -ScriptBlock {
try
{
$Output = Invoke-Command $_ -Credential $creds -Authentication "Negotiate" -ErrorAction Stop {hostname}
}
catch
{
$Output = $_
}
@($Output)
}
对于代码返回的上述示例幻灯片:
幻灯片/ppt/slides/slide1.xml有2个新行