PowerPoint编程:缩进与标尺边际水平不起作用?

时间:2011-07-07 09:35:08

标签: vsto powerpoint office-interop officedev

最近我们升级了一个我的PowerPoint插件来支持2007年和2010年。我们能够移植的大多数项目没有问题。我们遇到的一个问题是,当使用插件创建表格或形状时,缩进不起作用。

例如:同一个表在2003年被删除了适当的缩进,但是当添加到使用2007时同样的东西没有缩进。

下面的

是允许缩进的代码段:

With PropertyValues.ObjShape.Table.Cell(row, col).Shape.TextFrame.Ruler
               For rulerCount = 0 To 5
                    .Levels(rulerCount).FirstMargin = rulerFirstMargin(rulerCount) '.LeftMargin = rulerLeftMargin
                    .Levels(rulerCount).LeftMargin = rulerLeftMargin(rulerCount) 'Left indent marker
                Next rulerCount
        End With

知道为什么这不起作用?

我也阅读了以下帖子,但没有太多帮助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

更新代码:

 PropertyValues.ObjShape.Table.Cell(row, col).Shape.TextFrame.TextRange.Text = "N/A"
            With PropertyValues.ObjShape.Table.Cell(row, col).Shape.TextFrame
                'Dim rulerCount As Short
                For rulerCount = 1 To 5
                    .Ruler.Levels(rulerCount).FirstMargin = 10 * rulerCount 'rulerFirstMargin(rulerCount) '.LeftMargin = rulerLeftMargin
                    .Ruler.Levels(rulerCount).LeftMargin = 20 * rulerCount 'rulerLeftMargin(rulerCount) 'Left indent marker
                Next rulerCount
            End With
            PropertyValues.ObjShape.Table.Cell(row, col).Shape.TextFrame.TextRange.Text = text

1 个答案:

答案 0 :(得分:1)

FWIW,在2007年及以后,您现在可以拥有最多9个标尺级别,而不是5个标尺级别。但是您的代码应该按原样工作。这是一个简化版本,适用于表格的任意单元格(2,2):

Dim oSh As Shape
Dim x As Long
Set oSh = ActiveWindow.Selection.ShapeRange(1)

With oSh.Table.Cell(2, 2).Shape.TextFrame
    For x = 1 To 9
    .Ruler.Levels(x).LeftMargin = x * 10
    .Ruler.Levels(x).FirstMargin = x * 20
    Next
End With

您可能遇到的另一件事是您可以应用某些类型的格式(包括标尺设置);如果您正在应用它的级别没有文本,PPT将不会吠叫。它会忽略你。您的设置无效。有时您需要检查文本,如果没有文本(在现实世界中非常不可能),则提供一些文本,然后删除所有不可能的文本实例。

难看。是。

这里我们在尝试格式化每个缩进级别之前添加文本并设置缩进级别:

Sub test()

Dim oSh As Shape
Set oSh = ActiveWindow.Selection.ShapeRange(1)
Dim RulerCount As Long
Dim sTemp As String

sTemp = "@#$%"  ' dummy text

With oSh.Table.Cell(2, 3).Shape.TextFrame

    For RulerCount = 1 To 5
        .TextRange.Paragraphs(RulerCount).Text = sTemp & vbCrLf
        .TextRange.Paragraphs(RulerCount).IndentLevel = RulerCount
    Next
    For RulerCount = 1 To 5
        .Ruler.Levels(RulerCount).FirstMargin = 10 * RulerCount 'rulerFirstMargin(rulerCount) '.LeftMargin = rulerLeftMargin
        .Ruler.Levels(RulerCount).LeftMargin = 20 * RulerCount 'rulerLeftMargin(rulerCount) 'Left indent marker
    Next RulerCount
End With


End Sub