触发Google表格功能以写入单元格

时间:2017-09-15 09:30:59

标签: javascript google-sheets

我在Google表格中有此功能。目前,我必须在字段中输入=loadOutposts()来触发它。

我已在该功能上设置了时间触发器,但它没有向我的工作表写入任何数据。因为我没有在要写入的函数中声明工作表和字段。如何让函数将数据写入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;
}

2 个答案:

答案 0 :(得分:1)

尝试以下脚本代码:

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);
};

答案 1 :(得分:0)

由于google sheet的工作方式,您必须直接指定何时运行函数。

谷歌脚本是服务器端,因此谷歌工​​作表无法像Excel一样监听事件来运行功能。

你可以在你的工作表上有一个按钮,它调用一个在所选单元格中传递的函数,如下所示:

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

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

有关详细信息,请参阅https://developers.google.com/apps-script/reference/spreadsheet/sheet#getactivecell