【问题标题】:Google Script Trigger: Issue with function clearing scriptGoogle Script Trigger:功能清除脚本问题
【发布时间】:2023-03-08 20:36:01
【问题描述】:

我想在谷歌脚本中创建一个触发器,它每周一上午 9 点运行这些函数。但是,我的第一行代码清除了 google 表格的内容,因此可以将其替换为新信息。现在,当我从第一行代码创建一个函数时,该函数会重复运行,这意味着它总是会清除 google 表格的内容并给我留下一张空白表格(这对我来说是最合理的解释)。根据我对触发工具的理解,我只能在函数上创建触发器,而不是整个代码(这对吗?)-我该如何解决这个问题?

提前谢谢你!


  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[0];
  var range = sheet.getRange("A1:Z500");
  range.clearContent();


function myFunction() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var topFolder = DriveApp.getFolderById("FolderID");
  var topPath = "";
  sheet.appendRow(["Extracted Folder", "Industry", "Client", "Projectname","Folder (empty/not empty)", "Link to Folder", "Date Created", "Owner"])
  iterateSubFolders(topFolder, topPath, 3)
}

function iterateSubFolders(callingFolder, callingPath, depth) {
  var callingFolderName = callingFolder.getName();
  var callingFolderFullPath = callingPath.toString() + callingFolderName.toString() + "/";
  addRowToSheetForFolder(callingFolder, callingFolderFullPath);
  n=0;
  var childSubFolders = callingFolder.getFolders();
  while ((childSubFolders.hasNext()) && (n < depth) ) {
      var nextSubFolder = childSubFolders.next();
      iterateSubFolders(nextSubFolder, callingFolderFullPath, depth - 1);
  }
  return callingFolderFullPath;
}

function addRowToSheetForFolder(folder, fullFolderPath) {
  data = [
             fullFolderPath.toString(),
             // fullFolderPath.split("/"), Getting weird values when splitted 
             "INDUSTRY",
             "CLIENT",
             "PROJECT",
             folder.getSize(),
             folder.getUrl(),
             folder.getDateCreated(),
             "manuell pflegen",
             folder.getDescription()
         ];
  var sheet = SpreadsheetApp.getActiveSheet();
  sheet.appendRow(data);
}

当我将第一行转换为函数时,代码不再有效,所以我把它省略了

【问题讨论】:

  • 正确,触发器将运行指定的函数。但是,触发器调用的函数可以调用其他函数。我在许多项目中都成功地做到了这一点。
  • 当你将全局变量设置为一个独立的函数时,你是如何调用它们的?

标签: javascript google-apps-script google-sheets


【解决方案1】:

这些行位于全局空间中,因此每次调用任何函数时都会调用它们:

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
var range = sheet.getRange("A1:Z500");
range.clearContent();

【讨论】:

  • 我知道但我该如何解决这个问题?如何只清除一次所有单元格,然后使用循环等运行整个代码?
  • ss.getSheets()[0]; 活动表吗?
猜你喜欢
  • 2021-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-05
  • 1970-01-01
  • 2022-11-13
  • 1970-01-01
  • 2014-09-08
相关资源
最近更新 更多