Applescript 使用Javascript自动复制数字单元格

Applescript 使用Javascript自动复制数字单元格,applescript,javascript-automation,Applescript,Javascript Automation,我想使用JXA自动更新一些数字电子表格。例如,将一系列单元格从一个电子表格复制到另一个具有不同结构的电子表格 在这一点上,我只是测试一个简单的程序来设置或读取一个单元格的值,我无法让它工作 当我尝试设置一个值时,我得到“Error-1700:无法转换类型”。当我尝试读取一个值时,我得到的是[object ObjectSpecifier],而不是文本或数字值 下面是一个代码示例: Numbers = Application('Numbers') Numbers.activate() delay(1

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

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

当我尝试设置一个值时,我得到“Error-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.log的[object ObjectSpecifier],然后出现一个错误-1700:当它尝试设置单元格时无法转换类型

我尝试了其他几种访问或设置属性的方法,但都没有成功

提前感谢,


Dave

下面是一个脚本,它设置并获取一个单元格的值,然后在同一个表中设置另一个单元格的值:

// 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
查看数字脚本字典(选择JavaScript作为语言)以查看类及其属性和元素。“元素”部分将显示元素的名称(例如,文档类包含图纸,图纸类包含表格,等等)。要打开脚本字典,请在脚本编辑器的菜单栏中,选择窗口>库,然后在库窗口中选择数字

关于您看到的日志记录,我建议使用类似于以下内容的功能:

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

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

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

// 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
查看数字脚本字典(选择JavaScript作为语言)以查看类及其属性和元素。“元素”部分将显示元素的名称(例如,文档类包含图纸,图纸类包含表格,等等)。要打开脚本字典,请在脚本编辑器的菜单栏中,选择窗口>库,然后在库窗口中选择数字

关于您看到的日志记录,我建议使用类似于以下内容的功能:

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

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

要解决此问题,请先在AppleScript中编写代码,使其在那里工作,然后找出如何将其转换为JXA。这样,您就可以知道错误是由您自己的代码中的错误引起的,还是由JXA中的缺陷引起的,而JXA除了糟糕的错误报告之外,还存在许多意外和故意的设计缺陷。要解决此问题,请先在AppleScript中编写代码,使其正常工作,然后找出如何将其转换为JXA。这样,您就可以知道错误是由您自己的代码中的错误还是JXA中的缺陷造成的,除了糟糕的错误报告之外,JXA还存在许多意外和故意的设计缺陷。有没有一种方法可以完全复制单元格(即格式化、公式),而不仅仅是复制其值?有没有一种方法可以完全复制单元格(即格式化、公式)不仅仅是它的价值?