这旨在作为原始问题的扩展,当前段落的编号?我怎样才能得到它?,它很好地回答了 iWork Pages 的问题。http://macscripter.net/viewtopic.php?id=29125
我想在 Microsoft Word 中做同样的事情。我找到了一个可以获取段落编号的 VBA 脚本(请阅读下文),但我不知道 VBA 脚本是如何工作的,因此我被卡住了(另请阅读下文)
更新 17-05-2013
该问题有两种解决方案。在阅读了 VBA 并检查了代码之后,我意识到 VBA 脚本是如何确定段落编号的。实际上,这很简单。它设置从字符 0 到光标位置的范围,然后计算该范围内的段落。
因此,我看到我的问题有两种可能的解决方案:
- 使用与 VBA 等效的 AppleScript
CurPos
来创建从位置 0 到位置的跨越文档的范围cursor
。计算范围内的段落。 - 使用 VBA 脚本将段落编号设置为变量并通过 AppleScript 访问该变量
我的最终目标是在文档上运行一个循环,找到所有表并在其前后插入一个连续的分节符。
以下 VBA 脚本提供了一个弹出对话框,其中显示了我需要的数据以及更多(段落、绝对行号、相对行号)。也许有人可以帮我将此脚本的输出设置为我可以通过 AppleScript 访问的文档变量
Open this Scriplet in your Editor:
get variable value of variable "paragraphNum" of active document
这是 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
当我得到段落编号时,我可以通过执行类似的操作在之前插入一个连续的分节符(当然我需要选择前一段的最后一个字符和下一段的第一个字符,但我需要先获取表格的段号!):
Open this Scriplet in your Editor:
insert break at text object of selection break type section break continuous
型号:Macbook Air 2011 AppleScript:2.5.1 (138.1) 浏览器:Firefox 20.0 操作系统:Mac OS X (10.8)