3

我有一个非常困难的错误,我看不到修复。这个话题真的让我发疯了很长一段时间。让我们考虑以下场景:

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)。不过没关系,我可以闭上眼睛。但是...但是,第二,我不明白为什么第一个边距总是为零,它们属于哪个级别并不重要。它们在兼容模式下始终为零......很难相信...... :) 那么有没有办法修复它或只是找到解决方法?我愿意接受有关该主题解决方案的任何帮助。我什至找不到与该问题相关的任何文章。:( 可能您曾经遇到过它......或者它只是一个没有修复的错误,必须向微软报告吗?

谢谢你。

4

0 回答 0