在一张纸上遇到多个Google Apps脚本的问题

时间:2019-06-19 22:38:17

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

我创建了两个单独的脚本来在同一张纸上执行两个单独的动作,它们应该独立运行,但是我似乎无法弄清楚如何将它们链接到同一电子表格,因为宏列表中只有一个。

我试图通过工作表中的脚本编辑器链接来创建两个脚本,并且两个脚本都出现在开发人员中心中,但是我似乎无法在宏下拉菜单中同时显示这两个脚本。

这是一个脚本,用于将源工作表的内容复制到目标工作表,而目标工作表是作为此脚本的一部分创建的,因此可以单独运行。

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();

这是一个单独的脚本,应在源工作表上的第一个脚本之后执行以清除某些列,并且再次可以单独运行。

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});
};

我想在宏下拉列表中同时使用这两个脚本,以便我可以独立运行它们,但仅显示其中一个。

2 个答案:

答案 0 :(得分:1)

@ziganotschka谢谢您的答复,我已经通过您的答复弄清了这一点。这是脚本本身的问题。因为您提到我不是在导入脚本而是在导入函数,所以它让我看了看函数部分,它的编写方式使Google感到困惑!我是这样写的:

var CopyNew = function () {  

但是我现在将其更改为以下内容,它解决了问题。

function CopyNew() {  

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

答案 1 :(得分:0)

当您尝试将脚本导入到“宏”下拉列表部分时,实际上并不是在导入脚本本身,而是从脚本中导入函数。

enter image description here enter image description here enter image description here

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