2015-01-21 60 views
0

我想使用JXA自動更新Numbers電子表格的某些更新。例如,將一個電子表格中的一系列單元格複製到另一個具有不同結構的單元格中。使用Javascript進行自動化複製Numbers中的單元格

在這一點上,我只是測試一個簡單的程序來設置或讀取單元格的值,我不能得到它的工作。

當我嘗試設置一個值時,我得到「Error -1700:Can not convert types。」。當我嘗試讀取一個值時,我得到一個[對象ObjectSpecifier]而不是文本或數字值。

下面的代碼示例:與[對象ObjectSpecifier]兩個console.logs,然後錯誤-1700的

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) 

當我運行它,我得到的輸出:無法轉換類型當它試圖設置一個單元格時。

我已經嘗試了其他幾種訪問或設置屬性的變體,但無法讓它工作。

由於提前,

戴夫

+1

要解決問題,請先在AppleScript中編寫代碼,讓它在那裏工作,然後弄清楚如何將它轉換爲JXA。這樣您就可以知道錯誤是由您自己的代碼中的錯誤引起的還是JXA中的錯誤導致的,除了糟糕的錯誤報告外,還有很多意外和故意的設計缺陷。 – foo 2015-01-21 11:14:09

回答

3

這裏是設置和獲取單元格的值,然後一個腳本設置在同一個表中的不同單元格的值:

// 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作爲語言)來查看類及其屬性和元素。元素部分將顯示元素的名稱(例如,Document類包含表單,Sheet類包含表等)。要打開腳本字典,請在腳本編輯器的菜單欄中選擇「窗口」>「庫」,然後在庫窗口中選擇「數字」。

在問候你看到日誌 - 我建議使用類似這樣的功能:

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

Automation.getDisplayString給你,你傳遞給它的任何對象的「漂亮的打印」版本。然後您可以使用它來獲得更好的診斷記錄。

相關問題