代码之家  ›  专栏  ›  技术社区  ›  Lyubomyr Shaydariv

通过.NET互操作问题在PowerPoint 2007兼容模式中的项目符号缩进

  •  3
  • Lyubomyr Shaydariv  · 技术社区  · 16 年前

    1) 有一个powerpoint2003演示文稿。它包含唯一的幻灯片和唯一的形状,但形状包含一个文本框架,包括一个带有随机文本表示结构的项目符号列表。

    2) 使用powerpoint2007,需要为每个项目符号段落获得项目符号缩进。我可以满足以兼容模式打开演示文稿并应用以下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来达到同样的结果。让我们添加一个COM引用到Microsoft.Office.Interop摘自PowerPoint.2.0消息.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\u O)。但没关系,我可以对此视而不见。但是。。。但是,第二,我不明白为什么第一个边距总是零,它们属于哪个级别也无关紧要。在兼容模式下它们总是零。。。很难相信。。。:)那么,有没有办法解决这个问题,或者只是找到一个解决办法?关于这个问题的解决,我愿意接受任何帮助。我甚至找不到任何与这个问题相关的文章。:(也许你曾经面对过。。。或者它只是一个没有修复的错误,必须报告给微软?

    0 回复  |  直到 10 年前
    推荐文章