问题描述
我设法用最简单的代码实现了这一点:
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 (将#修改为@)