错误 - "方法Range.getValue被脚本大量使用"

时间:2014-11-12 01:08:13

标签: google-apps-script google-sheets

我之前发过这个问题,但没有正确标记(因此我可能没有得到答案)所以我想我会再给它一次,因为我在此期间找不到答案。

以下脚本正在给我标题中的消息。我有另一个函数,它使用相同的getValue方法,但运行正常。我可以在脚本中更改哪些内容以避免此问题?

function trashOldFiles() {
 var ffile = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("CtrlSht").getRange("B3:B3").getValue();
 var files = DriveApp.getFilesByName(ffile);
 while (files.hasNext()) {
  var file = files.next();
  var latestfile = DriveApp.getFileById(listLatestFile());
  if(file.getId() ==! latestfile){
  file.setTrashed(true);
   }
  }
 };

2 个答案:

答案 0 :(得分:0)

是错误还是执行提示(菜单中的灯泡)?

您是否在代码的其他部分使用该方法?可能在listLatestFile()? 我通过在listLatestFile()中调用getRange()。getValue()得到了相同的执行提示(使用循环) 并且提示总是提到问题是在调用

var ffile = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("CtrlSht").getRange("B3:B3").getValue();

在函数trashOldFiles()中,即使实际问题出现在其他函数中也是如此。

检查您是否在代码中的其他位置调用它,可能是在循环内。

答案 1 :(得分:0)

好的,所以Gerardo关于循环的评论开始让我再次思考。我查了一些关于如何重用变量的帖子,并决定将listLatestFile()值放在我的电子表格中 -

  var id = result[0][1];
  SpreadsheetApp.getActiveSpreadsheet().getSheetByName("CtrlSht").getRange("B5:B5").setValue(id);
  //Logger.log(id);
  return id;

然后从电子表格中检索最新的文件ID,以用作处理垃圾的trashOldFiles()函数的比较值。

function trashOldFiles() {
  var tfile = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("CtrlSht").getRange("B3:B3").getValue();
  var tfiles = DriveApp.getFilesByName(tfile);
  var lfile = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("CtrlSht").getRange("B5:B5").getValue();
  while (tfiles.hasNext()) {
    var tfile = tfiles.next();
     if(tfile.getId() !== lfile){
     tfile.setTrashed(true);
    }
   }
  };

不确定这种做法是否是最佳做法,但确实对我有用。如果有人提出以更优雅的方式实现这一目标的建议,我会全力以赴。