我有一个非常困难的错误,我看不到修复。这个话题真的让我发疯了很长一段时间。让我们考虑以下场景:
1) 有一个 PowerPoint 2003 演示文稿。它包含唯一的幻灯片和唯一的形状,但该形状包含一个文本框架,其中包括一个带有随机文本表示结构的项目符号列表。
2) 需要使用 PowerPoint 2007 为每个项目符号段落获取项目符号缩进。我可以满足以兼容模式打开演示文稿并应用以下 VBA 脚本的要求:
With ActivePresentation
Dim sl As Slide: Set sl = .Slides(1)
Dim sh As Shape: Set sh = sl.Shapes(1)
Dim i As Integer
For i = 1 To sh.TextFrame.TextRange.Paragraphs.Count
Dim para As TextRange: Set para = sh.TextFrame.TextRange.Paragraphs(i, 1)
Debug.Print para.Text; para.indentLevel, sh.TextFrame.Ruler.Levels(para.indentLevel).FirstMargin
Next i
End With
产生以下输出:
A 1 0
B 1 0
C 2 24
D 3 60
E 5 132
显然,一切都是完美的:它显示了正确的列表项文本、列表项级别及其项目符号缩进。但是我看不到如何使用 C# 达到相同的结果。让我们添加一个对 Microsoft.Office.Interop.PowerPoint 2.9.0.0 的 COM 引用(取自 MSPPT.OLB,MS Office 12):
// presentation = ...("presentation.ppt")... // a PowerPoint 2003 presentation
Slide slide = presentation.Slides[1];
Shape shape = slide.Shapes[1];
for (int i = 1; i<=shape.TextFrame.TextRange.Paragraphs(-1, -1).Count; i++) {
TextRange paragraph = shape.TextFrame.TextRange.Paragraphs(i, 1);
Console.WriteLine("{0} {1} {2}", paragraph.Text, paragraph.IndentLevel, shape.TextFrame.Ruler.Levels[paragraph.IndentLevel].FirstMargin);
}
哦,伙计……这是什么?我这里有问题。首先,paragraph.Text
修剪值直到'\r'
找到字符(但paragraph.Text[0]
实际上返回第一个字符 O_o)。不过没关系,我可以闭上眼睛。但是...但是,第二,我不明白为什么第一个边距总是为零,它们属于哪个级别并不重要。它们在兼容模式下始终为零......很难相信...... :) 那么有没有办法修复它或只是找到解决方法?我愿意接受有关该主题解决方案的任何帮助。我什至找不到与该问题相关的任何文章。:( 可能您曾经遇到过它......或者它只是一个没有修复的错误,必须向微软报告吗?
谢谢你。