Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
自动将XML数据收集到电子表格_Xml_Google Apps Script - Fatal编程技术网

自动将XML数据收集到电子表格

自动将XML数据收集到电子表格,xml,google-apps-script,Xml,Google Apps Script,我正在尝试设置一个XML解析器,该解析器每小时自动收集数据并将其附加到电子表格的底部。我收集的数据每小时更新一次,我希望尽可能保持最新 我从中绘制的XML如下所示: 格式如下: <?xml version='1.0' encoding='UTF-8'?> <eveapi version="1"> <currentTime>2007-12-12 11:50:38</currentTime> <result> <row

我正在尝试设置一个XML解析器,该解析器每小时自动收集数据并将其附加到电子表格的底部。我收集的数据每小时更新一次,我希望尽可能保持最新

我从中绘制的XML如下所示: 格式如下:

<?xml version='1.0' encoding='UTF-8'?>
<eveapi version="1">
  <currentTime>2007-12-12 11:50:38</currentTime>
  <result>
    <rowset name="solarSystems" key="solarSystemID" columns="solarSystemID,shipJumps">
      <row solarSystemID="30001984" shipJumps="10" />
    </rowset>
    <dataTime>2007-12-12 11:50:38</dataTime>
  </result>
  <cachedUntil>2007-12-12 12:50:38</cachedUntil>
</eveapi>
当我手动运行它时,它工作得很好,但它是自动部分,会出现故障。我尝试设置一个每小时时间驱动的触发器来运行脚本,但在自动脚本中,我一次又一次地遇到相同的错误:“范围的坐标或维度无效。(第13行,文件“代码”)”

我还认识到,即使我能让它发挥作用,我一次也只能收集约10个小时的数据块(谢谢400000个单元格限制…)

因此,我希望得到以下方面的任何建议:

  • 有没有其他方法可以实现我希望实现的目标
  • 有没有办法重新调整我当前的设置以实现我的目标

  • 这种方法很有趣,但我认为如果将导入公式与触发的Google Apps脚本函数结合使用,您总会遇到问题,因为公式计算和脚本执行会出现延迟

    正如GoogleApps脚本所拥有的,它可以很好地处理格式良好的Xml,相反,使用它是一种更好的方法。对于特定的Xml文档,您可以使用:

    function EVEJumpsCollection() {
      var output = [];
    
      // modified from https://developers.google.com/apps-script/reference/xml-service/
      var url = 'https://api.eveonline.com/map/Jumps.xml.aspx'; // where
      var xml = UrlFetchApp.fetch(url).getContentText(); // fetch
      var document = XmlService.parse(xml); // parse
    
      // next nav to part of tree and get values
      var cachedUntil = document.getRootElement().getChild("cachedUntil").getValue();
      var currentTime = document.getRootElement().getChild("currentTime").getValue();
    
      // get rowset elements and iterate accross
      var rowset = document.getRootElement().getChild("result").getChild("rowset").getChildren();
      for (var i = 0; i < rowset.length; i++) {
    
        // extracting attribute values (note case sensitive)
        var solarSystemID = rowset[i].getAttribute("solarSystemID").getValue();
        var shipJumps = rowset[i].getAttribute("shipJumps").getValue();
    
        // more effiecient to build object[][] of values and do one write
        output.push([solarSystemID, shipJumps, cachedUntil, currentTime]);
      }
    
      // where we want it to go
      var ss = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheet/ccc?key=0AgjR0Xz9d5o_dFc1RDdsYmZtNFo5eEp3a1FYZ2piT3c&usp=sharing");
      var sheet = ss.getSheets()[0];
      sheet.getRange(sheet.getLastRow()+1, 1, output.length, 4).setValues(output);
    } 
    
    函数EVEJumpsCollection(){
    var输出=[];
    //修改自https://developers.google.com/apps-script/reference/xml-service/
    var url='1〕https://api.eveonline.com/map/Jumps.xml.aspx“;//在哪里
    var xml=UrlFetchApp.fetch(url).getContentText();//fetch
    var document=XmlService.parse(xml);//parse
    //下一个导航到树的一部分并获取值
    var cachedUntil=document.getRootElement().getChild(“cachedUntil”).getValue();
    var currentTime=document.getRootElement().getChild(“currentTime”).getValue();
    //获取行集元素并迭代accross
    var rowset=document.getRootElement().getChild(“结果”).getChild(“行集”).getChildren();
    对于(变量i=0;i

    在谷歌表单填充方面,有两种选择。您可以在每次运行它或为它向Google Drive写入.CSV文件时使用它。还值得注意的是,Stackoverflow上类似的应用程序脚本/XML使用了旧的XML服务,该服务已被弃用

    太棒了,非常感谢!事实上,我找到了一个拼凑而成的解决方法,但是我回来理解了你的方法。我开始掌握它的窍门了,而且更喜欢它!不过,使用这段代码仍然有一些令人困惑的地方,我能否以某种方式向您提问?@Calvin_xc1确定您可以在此处发表评论(这可能会帮助其他人)或通过我的个人资料与我联系links@mhawksey你能帮我吗?我想每小时使用importxml公式自动提取谷歌搜索结果,并将数据附加到电子表格的底部。你能告诉我怎么做吗?=IMPORTXML(“google.com/search?q=Bmw&num=10”;“//h3[@class='r']”)
    function EVEJumpsCollection() {
      var output = [];
    
      // modified from https://developers.google.com/apps-script/reference/xml-service/
      var url = 'https://api.eveonline.com/map/Jumps.xml.aspx'; // where
      var xml = UrlFetchApp.fetch(url).getContentText(); // fetch
      var document = XmlService.parse(xml); // parse
    
      // next nav to part of tree and get values
      var cachedUntil = document.getRootElement().getChild("cachedUntil").getValue();
      var currentTime = document.getRootElement().getChild("currentTime").getValue();
    
      // get rowset elements and iterate accross
      var rowset = document.getRootElement().getChild("result").getChild("rowset").getChildren();
      for (var i = 0; i < rowset.length; i++) {
    
        // extracting attribute values (note case sensitive)
        var solarSystemID = rowset[i].getAttribute("solarSystemID").getValue();
        var shipJumps = rowset[i].getAttribute("shipJumps").getValue();
    
        // more effiecient to build object[][] of values and do one write
        output.push([solarSystemID, shipJumps, cachedUntil, currentTime]);
      }
    
      // where we want it to go
      var ss = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheet/ccc?key=0AgjR0Xz9d5o_dFc1RDdsYmZtNFo5eEp3a1FYZ2piT3c&usp=sharing");
      var sheet = ss.getSheets()[0];
      sheet.getRange(sheet.getLastRow()+1, 1, output.length, 4).setValues(output);
    }