Javascript 触发Google Sheets函数写入单元格
我在谷歌表单中有这个功能。目前,我必须通过在字段中键入Javascript 触发Google Sheets函数写入单元格,javascript,google-sheets,Javascript,Google Sheets,我在谷歌表单中有这个功能。目前,我必须通过在字段中键入=loadOutposts()来触发它 我在函数上设置了一个时间触发器,但它不会将任何数据写入我的工作表。因为我没有在函数中声明要写入的工作表和字段。如何让函数将数据写入Sheet2 A2,而不必在该字段中键入=loadOutposts() 谢谢 函数loadOutposts(){ var outposts=新数组(); 变量url=”https://api.eveonline.com/eve/ConquerableStationList.x
=loadOutposts()
来触发它
我在函数上设置了一个时间触发器,但它不会将任何数据写入我的工作表。因为我没有在函数中声明要写入的工作表和字段。如何让函数将数据写入Sheet2 A2,而不必在该字段中键入=loadOutposts()
谢谢
函数loadOutposts(){
var outposts=新数组();
变量url=”https://api.eveonline.com/eve/ConquerableStationList.xml.aspx";
var参数={method:“get”,有效负载:};
var xmlFeed=UrlFetchApp.fetch(url,参数).getContentText();
var xml=XmlService.parse(xmlFeed);
if(xml){
var rows=xml.getRootElement().getChild(“结果”).getChild(“行集”).getChildren(“行”);
对于(变量i=0;i
由于google sheets的工作方式,您必须直接指定何时运行函数
Google脚本保存在服务器端,因此Google sheets无法使用诸如Excel之类的侦听事件来运行函数
工作表上可以有一个按钮,用于调用在选定单元格中传递的函数,如下所示:
function buttonClick()
{
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
// Returns the active cell
var cell = sheet.getActiveCell();
cell.setValue(loadOutposts);
}
这样,您需要选择要填充的单元格,然后单击按钮
有关详细信息,请参见尝试以下脚本代码:
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);
};
函数loadOutposts(){
var outposts=新数组();
变量url=”https://api.eveonline.com/eve/ConquerableStationList.xml.aspx";
var参数={method:“get”,有效负载:};
var xmlFeed=UrlFetchApp.fetch(url,参数).getContentText();
var xml=XmlService.parse(xmlFeed);
if(xml){
var rows=xml.getRootElement().getChild(“结果”).getChild(“行集”).getChildren(“行”);
对于(变量i=0;i
再次感谢;)工作完美!您可能知道以下问题的答案:当我再次运行该函数时,它现在会用它检索的新数据替换Sheet2上的所有数据。但是,它能否根据stationID和stationTypeID的组合检查新数据中是否有新行,并将新行添加到第2页的顶部?所以它不替换所有数据,只添加新行?
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);
};