如何将Microsoft Word中当前所选段落的段落编号获取到AppleScript变量中?

Jon*_*mar 3 applescript vba ms-word word-vba

这是对原始问题的扩展,当前段落的编号是多少?我如何获得它?,这很好地回答了iWork Pages的问题。http://macscripter.net/viewtopic.php?id=29125

我想在Microsoft Word中做同样的事情。我找到了可以获取段落编号的VBA脚本(请参见下文),但是我不知道VBA脚本的工作原理,因此我被卡住了(也请参见下文)


更新17-05-2013

有两种解决方案。在阅读了VBA并检查了代码之后,我意识到了VBA脚本如何确定段落编号。实际上,这很简单。它设置从字符0到光标位置的范围,然后计算该范围内的段落。

因此,我看到了两种可能的解决方案:

  1. 使用VBA的AppleScript等效项CurPos来创建范围从文档位置0到位置的范围cursor。计算范围内的段落。
  2. 使用VBA脚本将段落编号设置为变量并通过AppleScript访问该变量

我的最终目标是对文档进行遍历,以查找所有表并在其前后插入分节符。

以下VBA脚本提供了一个弹出对话框,其中显示了我需要的数据以及更多信息(段落,绝对行号,相对行号)。也许有人可以帮助我将此脚本的输出设置为我可以通过AppleScript访问的文档变量

Open this Scriplet in your Editor:

get variable value of variable "paragraphNum" of active document
Run Code Online (Sandbox Code Playgroud)

这是VBA脚本:

Option Explicit

Sub WhereAmI()
    MsgBox "Paragraph number: " & GetParNum(Selection.Range) & vbCrLf & _
        "Absolute line number: " & GetAbsoluteLineNum(Selection.Range) & vbCrLf & _
        "Relative line number: " & GetLineNum(Selection.Range)
End Sub


Function GetParNum(r As Range) As Integer
    Dim rParagraphs As Range
    Dim CurPos As Integer

    r.Select
    CurPos = ActiveDocument.Bookmarks("\startOfSel").Start
    Set rParagraphs = ActiveDocument.Range(Start:=0, End:=CurPos)
    GetParNum = rParagraphs.Paragraphs.Count
End Function

Function GetLineNum(r As Range) As Integer
    'relative to current page
    GetLineNum = r.Information(wdFirstCharacterLineNumber)
End Function

Function GetAbsoluteLineNum(r As Range) As Integer
    Dim i1 As Integer, i2 As Integer, Count As Integer, rTemp As Range

    r.Select
    Do
        i1 = Selection.Information(wdFirstCharacterLineNumber)
        Selection.GoTo what:=wdGoToLine, which:=wdGoToPrevious, Count:=1, Name:=""

        Count = Count + 1
        i2 = Selection.Information(wdFirstCharacterLineNumber)
    Loop Until i1 = i2

    r.Select
    GetAbsoluteLineNum = Count
End Function
Run Code Online (Sandbox Code Playgroud)

得到段落编号后,我可以通过执行类似的操作在此之前插入一个连续的分节符(当然,我需要选择上一段的最后一个字符和下一段的第一个字符,但是我需要首先获取表格的段落号!):

Open this Scriplet in your Editor:

insert break at text object of selection break type section break continuous
Run Code Online (Sandbox Code Playgroud)

型号:Macbook Air 2011 AppleScript:2.5.1(138.1)浏览器:Firefox 20.0操作系统:Mac OS X(10.8)

Jon*_*mar 5

我不喜欢回答自己的问题,但是在撰写本文时,此页面上只有18次查看,而我已经解决了我的问题。

该解决方案基于问题中上面列出的解决方案编号1(纯AppleScript解决方案)

要获取当前所选段落的段落编号,可以paragraphNum在以下脚本中访问变量

tell application "Microsoft Word"
    set myDoc to active document
    set myRange to create range myDoc start 0 end (start of content of text object of selection)
    set paragraphNum to (count paragraphs in myRange)
end tell
Run Code Online (Sandbox Code Playgroud)

  • 回答你自己的问题没有错!正如您可能发现的那样,您甚至可以获得徽章:)。 (2认同)