2017-09-15 70 views
1

我在Google表格中有此功能。目前我必須在字段中輸入=loadOutposts()來觸發它。觸發Google表格函數寫入單元格

我已經在函數上設置了時間觸發器,但它沒有寫入數據到我的工作表。因爲我沒有在要寫入的函數中聲明表單和字段。如何讓函數將數據寫入Sheet2 A2而不必在該字段中輸入=loadOutposts()

Thx!

function loadOutposts(){ 
    var outposts= new Array(); 
    var url = "https://api.eveonline.com/eve/ConquerableStationList.xml.aspx"; 
    var parameters = {method : "get", payload : ""}; 
    var xmlFeed = UrlFetchApp.fetch(url, parameters).getContentText(); 
    var xml = XmlService.parse(xmlFeed); 
    if(xml) { 
    var rows=xml.getRootElement().getChild("result").getChild("rowset").getChildren("row"); 
    for(var i = 0; i < rows.length; i++) { 
     outpost=[rows[i].getAttribute("stationID").getValue(), 
       rows[i].getAttribute("stationName").getValue(), 
       rows[i].getAttribute("stationTypeID").getValue(), 
       rows[i].getAttribute("solarSystemID").getValue(), 
       rows[i].getAttribute("corporationID").getValue(), 
       rows[i].getAttribute("corporationName").getValue() 
       ] 
     outposts.push(outpost); 
    } 
    } 
    return outposts; 
} 

回答

1

https://developers.google.com/apps-script/reference/spreadsheet/sheet#getactivecell試試下面的腳本代碼:再次

function loadOutposts(){ 
    var outposts= new Array(); 
    var url = "https://api.eveonline.com/eve/ConquerableStationList.xml.aspx"; 
    var parameters = {method : "get", payload : ""}; 
    var xmlFeed = UrlFetchApp.fetch(url, parameters).getContentText(); 
    var xml = XmlService.parse(xmlFeed); 
    if(xml) { 
    var rows=xml.getRootElement().getChild("result").getChild("rowset").getChildren("row"); 
    for(var i = 0; i < rows.length; i++) { 
     outpost=[rows[i].getAttribute("stationID").getValue(), 
       rows[i].getAttribute("stationName").getValue(), 
       rows[i].getAttribute("stationTypeID").getValue(), 
       rows[i].getAttribute("solarSystemID").getValue(), 
       rows[i].getAttribute("corporationID").getValue(), 
       rows[i].getAttribute("corporationName").getValue() 
       ] 
     outposts.push(outpost); 
    } 
    } 
    //return outposts; 
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet2').getRange(2,1,outposts.length,outposts[0].length).setValues(outposts); 
}; 
+0

感謝;)運行完美! – user6079228

+0

你可能知道以下答案: 當我再次運行該函數時,它現在用它檢索的新數據替換Sheet2上的所有數據。 但是,可以根據stationID和stationTypeID的組合檢查新數據中是否有新行,並將新行添加到工作表2的頂部?那麼它不會替換所有的數據只添加新行? – user6079228

0

由於谷歌工作表的工作方式,你必須直接指定你想要一個函數運行的時間。

谷歌腳本是舉行服務器端,所以谷歌牀單是不能聽像Excel事件運行功能。

你可能對您的工作表,該調用通過選定單元格中的功能按鈕,像這樣的東西:

function buttonClick() 
{ 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheets()[0]; 
    // Returns the active cell 
    var cell = sheet.getActiveCell(); 
    cell.setValue(loadOutposts); 
} 

這樣,您就需要選擇要填充的單元格,然後點擊按鈕。

瞭解更多信息

相關問題