0

我想使用 JXA 自动更新 Numbers 电子表格。例如,将一系列单元格从一个电子表格复制到另一个具有不同结构的单元格。

在这一点上,我只是在测试一个简单的程序来设置或读取单元格的值,但我无法让它工作。

当我尝试设置一个值时,我得到“错误 -1700:无法转换类型”。当我尝试读取一个值时,我得到一个 [object ObjectSpecifier] 而不是文本或数字值。

下面是代码示例:

Numbers = Application('Numbers')
Numbers.activate()
delay(1)
doc = Numbers.open(Path('/Users/username/Desktop/Test.numbers'))
currentSheet = doc.Sheets[0]
currentTable = currentSheet.Tables[0]
console.log(currentTable['name'])
console.log(currentTable.cell[1][1])
currentTable.cell[1][1].set(77)

当我运行它时,我得到并输出了两个 console.logs 的 [object ObjectSpecifier],然后是错误 -1700:尝试设置单元格时无法转换类型。

我尝试了其他几种访问或设置属性的变体,但无法正常工作。

提前致谢,

戴夫

4

1 回答 1

6

这是一个脚本,它设置和获取单元格的值,然后在同一个表中设置不同的单元格的值:

// Open Numbers document (no activate or delay is needed)

var Numbers = Application("Numbers")

var path = Path("/path/to/spreadsheet.numbers")
var doc = Numbers.open(path)

// Access the first table of the first sheet of the document

// Note:
//  .sheets and .tables (lowercase plural) are used when accessing elements
//  .Sheet and .Table (capitalized singular) are used when creating new elements

var sheet = doc.sheets[0]
var table = sheet.tables[0]

// Access the cell named "A1"

var cell = table.cells["A1"]

// Set the cell's value

cell.value = 20

// Get the cell's value

var cellValue = cell.value()

// Set that value in a different cell

table.cells["B2"].value = cellValue

查看 Numbers 脚本字典(选择 JavaScript 作为语言)以查看类及其属性和元素。元素部分将向您显示元素的名称(例如,文档类包含工作表,工作表类包含表格,等等)。要打开脚本字典,在脚本编辑器的菜单栏中,选择窗口 > 库,然后在库窗口中选择数字。

关于您看到的日志记录 - 我建议使用类似于此的功能:

function prettyLog(object) {
    console.log(Automation.getDisplayString(object))
}

Automation.getDisplayString 为您提供传递给它的任何对象的“漂亮打印”版本。然后,您可以将其用于更好的诊断日志记录。

于 2015-06-18T23:03:23.713 回答