Javascript代码为列表中的每个项目创建一个新工作表

时间:2019-04-17 09:08:36

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

我需要在GoogleSheets上创建一个宏,该宏在名为“ Suppliers”的工作表中的列表中看起来会不同,并为每个名称创建一个新工作表。每个工作表都需要是另一个称为“数据”的工作表的副本。新工作表上的A列需要按名称进行过滤。每张工作表也需要以列表中的项目命名。

我有一个可正常运行的宏,可以为每个名称独立创建工作表,但无法弄清楚如何通过一系列名称来进行此循环,并自动为每个名称生成新工作表。

我当前使用的代码如下:

function Supplier1() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getRange('A1').activate();
spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Data'), true);
spreadsheet.duplicateActiveSheet();
spreadsheet.getActiveSheet().setName('Supplier1');
spreadsheet.getRange('A:L').activate();

spreadsheet.getRange('A:L').createFilter();
spreadsheet.getRange('A1').activate();
var criteria = SpreadsheetApp.newFilterCriteria()
.setHiddenValues(['', 'Supplier2', 'Supplier3', 'Supplier4','Supplier5'])
.build();

spreadsheet.getActiveSheet().getFilter().setColumnFilterCriteria(1, 
criteria);
spreadsheet.getRange('G:G').activate();
spreadsheet.getRange('C1').activate();
spreadsheet.getActiveSheet().getFilter().sort(3, true);
spreadsheet.getRange('D1').activate();
spreadsheet.getActiveSheet().getFilter().sort(4, true);

function hideRows() {
["Supplier1"].forEach(function (s) {
var sheet = SpreadsheetApp.getActive()
sheet.hide(sheet.getRange('B:B'))
sheet.getRange('B:B')
    .getValues()
    .forEach(function (r, i) {
        if (!r[0]) sheet.hideRows(i + 1)
    });
});
}
}

1 个答案:

答案 0 :(得分:0)

我为您编写了两个函数。 %x()从“供应商”工作表的A列中读取供应商的名称,并为每个名称执行factory函数中的工作。我省略了隐藏功能,因为我不知道它在做什么。如果当前代码有效,则以后可以随时添加。

将名称存储在“供应商”工作表的列A中,并运行工厂功能。

doTheWork