0

如何在 Excel VBA 中引用相对于 Applescript 中另一个单元格的单元格?在 Excel VBA 中,我可以使用“偏移量”来设置单元格 D2 的值:

Range("A1").Offset(1,3).Value = "Example"

我到处搜索,但 Numbers Applescript 中似乎没有“偏移”命令,尽管它非常方便。

任何帮助深表感谢!

4

2 回答 2

2

为了补充大卫的出色回答......

如果您需要模仿 VBA 表达式,可以将 David 答案中的示例代码滚动到handler中,如下例所示。

on setCellOffsetValue(cl, co, ro, val)
    tell application "Numbers"
        tell table 1 of sheet 1 of document 1
            set c to cell cl's column's address as number
            set r to cell cl's row's address as number
            set value of cell (c + co) of row (r + ro) to val
        end tell
    end tell
end setCellOffsetValue

现在您可以通过调用它在同一个脚本中多次使用它,例如:

setCellOffsetValue("A1", 3, 1, "Example")

正如你在这个版本中看到的,setCellOffsetValue 处理程序有四个参数

  • cl- 要偏移的单元格。
  • co- 与单元格的列偏移量。
  • ro- 与单元格的行偏移量)。
  • val- 偏移单元格的值。

setCellOffsetValue 处理程序放在您的脚本中并根据需要调用它。


上面的处理程序具有tablesheetdocument硬编码,每个都为1. 但是,在此示例中,您还将该信息传递给处理程序

on setCellOffsetValue(cl, co, ro, val, t, s, d)
    tell application "Numbers"
        tell table t of sheet s of document d
            set c to cell cl's column's address as number
            set r to cell cl's row's address as number
            set value of cell (c + co) of row (r + ro) to val
        end tell
    end tell
end setCellOffsetValue

现在您可以通过调用它在同一个脚本中多次使用它,例如:

setCellOffsetValue("A1", 3, 1, "Example", 1, 1, 1)

或者:

setCellOffsetValue("A1", 3, 1, "Example", "Table 1", "Sheet 1", "Untitled")

最后三个参数可以是它们的数值名称 value,视当时的需要而定。

此版本对于具有多个表格和/或工作以及需要定位其他对象的文档非常方便。table 1 of sheet 1 of document 1

正如你在这个版本中看到的,setCellOffsetValue 处理程序有七个参数

  • cl- 要偏移的单元格。
  • co- 与单元格的列偏移量。
  • ro- 与单元格的行偏移量)。
  • val- 偏移单元格的值。
  • t- 表号或名称。
  • s- 工作表编号或名称。
  • d- 文件编号或名称。

注意:示例 AppleScript 代码就是这样,并且不包含任何可能适当的错误处理。用户有责任根据需要或需要添加任何错误处理。查看AppleScript 语言指南中的try 语句错误 语句。另请参阅处理错误

于 2018-11-20T15:49:06.587 回答
1

编辑:感谢 user3439894 指出我的第一个答案的问题 - 这是完全错误的,基于 Excel 而不是 Numbers。

这是一个完整的脚本示例,展示了在 Numbers 中实现目标的一种方法:

tell application "Numbers"
    tell table 1 of sheet 1 of document 1
        set c to cell "A1"'s column's address as number
        set r to cell "A1"'s row's address as number
        set value of cell (c + 3) of row (r + 1) to "Example"
    end tell
end tell

您可以将 set 命令压缩为一行,如下所示:

tell application "Numbers"
    tell table 1 of sheet 1 of document 1
        set value of cell ((cell "A1"'s column's address as number) + 3) of row ((cell "A1"'s row's address as number) + 1) to "Example"
    end tell
end tell
于 2018-11-18T11:02:17.973 回答