2017-09-15 71 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); 
} 

这样,您就需要选择要填充的单元格,然后点击按钮。

了解更多信息

相关问题