【发布时间】:2014-05-11 17:23:30
【问题描述】:
我正在使用 DocsList.find() 并且我的代码中的所有内容都运行良好。唯一的问题是,即使文件夹中只有两个文件,在指定的文件夹中查找文件也可能需要长达 90 秒!
我希望有人能提出一种加快执行速度的方法。或者,可能是我误解了 DocsList 的文件夹元素。任何帮助将不胜感激!
谢谢,
奥利
示例代码:
function myFunction() {
var folder = DocsList.getFolderById("MYFOLDERID");
var lastrow = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Form Responses 1').getLastRow();
var thissheet = SpreadsheetApp.openById(SpreadsheetApp.getActiveSpreadsheet().getId());
var i = 3;
while (i<= lastrow)
if(SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Add scores to sheets').getRange(i,6).getValue() < 1){
var getfile = folder.find(thissheet.getSheetByName('Add scores to sheets').getRange(i,3).getValue())[0].getId();
var cell = SpreadsheetApp.openById(getfile).getSheetByName('Sheet1').getRange(thissheet.getSheetByName('Add scores to sheets').getRange(i,5).getValue());
if(cell.getValue() < thissheet.getSheetByName('Add scores to sheets').getRange(i,4).getValue()){
cell.setValue(thissheet.getSheetByName('Add scores to sheets').getRange(i,4).getValue());
}
thissheet.getSheetByName('Add scores to sheets').getRange(i,6).setValue(1);
i++
}
else {i++}
}
代码从工作表“将分数添加到工作表”中获取分数,找到 C 列中命名的文件(电子邮件地址),定位命名范围并设置值,前提是当前值小于新值.我是一名数学老师 - 这一切都来自 Google 表单测验。
【问题讨论】:
-
您是否计算了脚本的哪些部分执行缓慢,因为它可能不是
DocsList调用? (例如,您多次为同一张工作表调用getSheetByName,这些调用中的每一个都有成本,您最好在脚本开头将“向工作表添加分数”表指定为变量以节省一些执行时间) -
谢谢,山姆。我仍然不确定这是否是问题所在。看看我在下面对迈克尔的回答的回复。
标签: google-apps-script google-drive-api google-docs