微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

导致Google Apps脚本挂在GetSheetByName上的原因是什么?

如何解决导致Google Apps脚本挂在GetSheetByName上的原因是什么?

我设法用最简单的代码实现了这一点:

function test() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  Logger.log("before");
  var st = ss.getSheetByName("STATUS");
  Logger.log("after");
}

结果:

Head    test    Editor  Sep 21,2020,7:07:32 AM    3.087 s 
Running
Stackdriver logs
Sep 21,7:07:32 AM    Info    before
Sep 21,7:13:32 AM    Error   Exceeded maximum execution time

这一切在以下功能开始时出现:

function updateSheets() {
  var ui = SpreadsheetApp.getUi();
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var st = ss.getSheetByName("STATUS");
  var filelist = st.getDatarange().getValues();
  var dt;
  var folder = DriveApp.getFolderById(uploadID);
  for (i=0; i<filelist.length; i++) {
    var iter = folder.getFilesByName(filelist[i][0]);
    dt = new Date();
    if (iter.hasNext()) {
      var file = iter.next();
      st.getRange(i+1,2).setValue(file.getLastUpdated());
      st.getRange(i+1,3).setValue(dt);
      var name = getSheetName(file.getName());
      var data = Utilities.parseCsv(file.getBlob().getDataAsstring()); data.shift();
      st.getRange(i+1,5).setValue(data.length);
      var sht = ss.getSheetByName(name);
      if (!sht) {
        ss.getSheetByName("MASTER").copyTo(ss);
        sht = ss.getSheetByName("copy of MASTER");
        sht.setName(name);
      }
      sht.getDatarange().clearContent();
      sht.getRange(2,1,data.length,data[0].length).setValues(data);
      sht.getRange(1,1).setValue(file.getLastUpdated());
      dt = new Date();
      st.getRange(i+1,4).setValue(dt);
    }
    else {
      st.getRange(i+1,2).setValue("File Not Fount");
      st.getRange(i+1,3).setValue(dt);
      st.getRange(i+1,4).clearContent();
      st.getRange(i+1,5).clearContent();
    }
  }
}

与此相关的状态表

File    Last Updated    Start Time  Finish Time     Lines
Classes.csv 9/19/2020 5:00:09   9/21/2020 5:51:18   9/21/2020 5:51:20   1842
Customers.csv   9/21/2020 5:00:05   9/21/2020 5:51:20   9/21/2020 5:51:22   950
Items.csv   9/21/2020 5:00:08   9/21/2020 5:51:22   9/21/2020 5:51:36   5777
Routes-Detail.csv   9/21/2020 5:48:37   9/21/2020 5:51:38   9/18/2020 7:28:34   2252
Routes-other.csv    9/18/2020 6:24:52   9/18/2020 7:28:34   9/18/2020 7:28:37   90
Routes.csv  9/21/2020 5:48:36   9/21/2020 5:51:36   9/21/2020 5:51:38   279

如您所见,它在Routes-Detail上由于超时而失败。

在那之后,我什至无法获得测试中的简单代码来运行。

Routes-Detail和其他csv之间的唯一区别是,还有另一个页面使用query('Routes-Detail'!$ A $ 3:$ Z,“ SELECT”)和vlookups对其进行格式化。

任何想法为何这些都会超时?如果是其他工作表正在重新计算-是否可以在更新过程中断开那些查询的连接?

(注意-uploadID是一个常量声明,上面带有从我的工作计算机备份的Google Backup&Sync文件夹的ID,getSheetName()只是从文件名中删除了.csv,我使用了预格式化的主表,因为认的配色方案会打扰我的眼睛)

(而且,如何更好地格式化电子表格中的数据?)

感谢您的见解。

编辑-这绝对是updateSheets()中的问题,此后一段时间内会引起持续的问题。我上次运行它时,它在Routes上暂停了5分钟,然后在完成之前暂停(正好在360秒超时内)。

要导入的.csv来自旧版(AS400)系统,该sql Server是在计划的Powershell脚本(或由电子邮件触发,具体取决于查询)上运行的SQL查询生成的。

它们都没有太大。

是否有更好的自动化导入方法?我已经添加代码,仅当文件是新文件时才更新(我打算将此脚本放置在时间触发器上)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。