【问题标题】:PowerPoint Programming: Issues while trying to access ruler marginsPowerPoint 编程:尝试访问标尺边距时出现问题
【发布时间】:2012-05-10 23:13:12
【问题描述】:

我正在尝试访问各种项目符号列表项的缩进级别。所以我创建了一个简单的函数:

private float[] findIndentSpacing(TextRange t, int level) {
    if(level == 1) {
            RulerLevel rl = t.Parent.Ruler.Levels(2);
            //bullet must start at 0 on the first level for now
            return new float[2] { 0, rl.LeftMargin * Settings.Scaler() };
        } else {
            RulerLevel rl = t.Parent.Ruler.Levels[level];
            return new float[2] { rl.FirstMargin * Settings.Scaler(), rl.LeftMargin * Settings.Scaler() };
        }
    }

所以第一个 if 语句是一种解决方法。由于某种原因,第一级 LeftMargin 总是返回:-2.14748365E+9。我试图在第一个之后抓住水平,它们返回实际值。话虽如此,在访问一个级别后,所有其他级别都会更改并变得平等。例如,如果我尝试访问:t.Parent.Ruler.Levels[2].FirstMargin,那么由于某种原因,t.Parent.Ruler.Levels[3].FirstMargin 变得相同,等等。 LeftMargin 也会发生变化。

我尝试过以不同的方式访问标尺对象:通过选择、通过形状、通过文本以及我认为尝试的每一种方式,结果都是一样的。

想法?

更多信息: 我阅读了以下主题,但它们更多的是关于写作而不是阅读,但我觉得问题相似:PowerPoint Programming: Indentation with Ruler margin levels not working? http://answers.microsoft.com/en-us/office/forum/office_2007-customize/why-shapetextframerulerlevelsi-cant-set-the-bullet/9eac3e46-b13b-433e-b588-216ead1d9c1a?tab=AllReplies#tabs 我做了这个:http://answers.microsoft.com/en-us/office/forum/office_2010-customize/find-bullet-spacing-information-in-an-automated/4525b6b8-6331-4f33-8127-789ea3641589?page=1&tm=1336535132591

【问题讨论】:

  • 我正在使用 PowerPoint 2010 顺便说一句。

标签: c# .net powerpoint office-interop officedev


【解决方案1】:

在 2007 年和 2010 年,我认为您需要使用 TextRange2 和 TextFrame2 对象。

在 PPT 2003 和之前的版本中,TextFrame 可以有 5 个缩进级别,并且在给定缩进级别的所有段落共享相同的 LeftMargin 和 FirstMargin。

从 2007 年开始,TextFrame 最多可以有 9 个缩进级别,并且每个段落可以有自己的左/首页边距,独立于在相同缩进级别的其他段落上设置的页边距。

在 PPT 的 VBA IDE 中试试这个。然后选择您正在查看的文本:

Sub Levels()
  Dim oSh as Shape
  Dim x As Long

  Set oSh = ActiveWindow.Selection.ShapeRange(1)

  With oSh.TextFrame2.Ruler
    For x = 1 to .Count
      Debug.Print .Levels(x).FirstMargin
      Debug.Print .Levels(x).LeftMargin
    Next
  End With

End Sub

【讨论】:

  • 是的,那行得通...我觉得这对我说了 20 次,但它从来没有完全点击过有一堆单独的类/对象。
  • 另外,还有一点需要注意,这需要导入/包含 Microsoft.Office.Core 命名空间,而不仅仅是 Interop。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-28
  • 2021-12-11
  • 2015-12-09
相关资源
最近更新 更多