一个 Sheet 上的多个 Google 应用程序脚本出现问题

Having problems with Multiple Google Apps Scripts on one Sheet

我创建了两个单独的脚本来对同一个 sheet 执行两个单独的操作,它们应该是 运行 独立的,但我似乎无法弄清楚如何 link 它们两者都具有相同的 spreadsheet 因为只有一个出现在宏列表中。

我尝试通过 sheet 中的脚本编辑器 link 创建这两个脚本,并且都出现在开发人员中心,但我似乎无法在宏下拉选择中同时显示这两个脚本.

这是一个将源 sheet 的内容复制到目标 sheet 的脚本,目标 sheet 是作为此脚本的一部分创建的,它自己可以正常工作。

var ss = SpreadsheetApp.getActive();
var sheetName = ss.getSheetByName("Results");
var CopyNew = function () {  
var nm = ss.getSheetByName("NEW");
if(!nm){
  var newSheet = ss.insertSheet("NEW");
  var sourceRange = sheetName.getRange("A1:N100");
  var targetRange = newSheet.getRange("A1:N100");
  targetRange.setValues(sourceRange.getValues());
  sourceRange.copyTo(targetRange, {formatOnly:true});
    }
}
CopyNew();

这是一个单独的脚本,应该在源 sheet 上的第一个脚本之后执行,以清除某些列,而且它自己也能正常工作。

function ClearCells() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getRange('G9:G100').activate();
spreadsheet.getActiveRangeList().clear({contentsOnly: true, 
skipFilteredRows: true});
spreadsheet.getRange('K9:K100').activate();
spreadsheet.getActiveRangeList().clear({contentsOnly: true, 
skipFilteredRows: true});
spreadsheet.getRange('N9:N100').activate();
spreadsheet.getActiveRangeList().clear({contentsOnly: true, 
skipFilteredRows: true});
};

我想在宏下拉列表中提供这两个脚本,这样我就可以 运行 它们独立,但只显示一个。

当您尝试将脚本导入宏下拉部分时,实际上您导入的不是脚本本身,而是脚本中的函数。

因此,如果您无法将两个脚本中的主要函数导入下拉部分 - 这很可能是因为两个脚本中的函数具有相同的名称 - myFunction()。您只需更改其中一个函数的名称即可。

@ziganotschka 感谢您的回复,我通过您的回复了解了这一点。这是脚本本身的问题。因为您提到我不是在导入脚本而是在导入函数,这让我看到了函数部分,它的编写方式令人困惑 Google 我猜!我是这样写的:

var CopyNew = function () {  

但我现在将其更改为下面的内容并解决了问题。

function CopyNew() {  

谢谢大家的帮助和建议,现在一切正常。