Javascript 如何使用Google应用程序脚本执行行调用

Javascript 如何使用Google应用程序脚本执行行调用,javascript,arrays,google-apps-script,google-sheets,copy,Javascript,Arrays,Google Apps Script,Google Sheets,Copy,我已经做了一些关于如何使用google应用程序脚本执行rowcall的研究,但是有一点挑战,我将非常感谢在这方面的任何帮助 因此,这段代码查看第一列并获取重命名新选项卡时要使用的值 function newSheet() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var templateSheet = ss.getActiveSheet(); var sheet1 = ss.getSheetByName("main

我已经做了一些关于如何使用google应用程序脚本执行rowcall的研究,但是有一点挑战,我将非常感谢在这方面的任何帮助

因此,这段代码查看第一列并获取重命名新选项卡时要使用的值

function newSheet() {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var templateSheet = ss.getActiveSheet();
    var sheet1 = ss.getSheetByName("main")
    var getNames = sheet1.getRange("A2:A").getValues().filter(String).toString().split(",");

    for (var i = 0; i < getNames.length; i++) {
        var copy = ss.getSheetByName(getNames[i]);
        if (copy) {
            Logger.log("Sheet already exists");
        } else {
            templateSheet.copyTo(ss).setName(getNames[i]);
            ss.setActiveSheet(ss.getSheetByName(getNames[i]));
            ss.moveActiveSheet(ss.getNumSheets());
        }
    }
}
function新闻单(){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var templateSheet=ss.getActiveSheet();
var sheet1=ss.getSheetByName(“主”)
var getNames=sheet1.getRange(“A2:A”).getValues().filter(String).toString().split(“,”);
对于(var i=0;i
床单

我想做的并且正在成为一个挑战的是,在创建一个具有名称的新选项卡时,我想将整行复制到新选项卡/工作表中。e、 g对于工作表Levi只有带有Levi数据的原始数据才能复制到工作表中

此时,我的代码将整个源代码表复制到新的选项卡/工作表中。我非常感谢您对我提出的解决方案的任何帮助: 现在,您将主工作表用作模板,因此当您将其与功能
.copyTo
一起使用时,您将复制整个内容。 您必须获得与给定名称的索引对应的整行

方法 您将需要额外的筛选以获得要放入新工作表中的正确行值。 我将过滤名称列(列A)并获取循环中名称的索引

(我假设您可能有一些间隙,因此for循环的索引是不够的)

一旦我找到了相应的索引,我需要将它增加1,因为在谷歌电子表格中,行索引从1开始

现在,我可以使用函数
.getRange(行、列、numRows、numColumns)轻松地获取行。
我正在使用函数
.getLastColumn()
计算
numColumns
参数

现在,我可以使用函数
.appendRow()
将该行插入到我刚刚使用
.insertSheet()
函数创建的新工作表中

示例代码: 然后必须将行索引映射到列A中的名称。 现在,您可以通过getNames值进行筛选,并获得行索引。 最后,您可以将相应索引处的行附加到新工作表中

var rowIndexes = sheet1.getRange("A:A").getValues()
                                       .map((value, index) => [value[0], (index + 1)])
                                       .filter(value => value[0] === getNames[i]);
var namedSheet = ss.insertSheet(getNames[i]);
rowIndexes.map(index => {
                 var rowValues = sheet1.getRange(index[1], 1, 1, sheet1.getLastColumn()).getValues();
                 namedSheet.appendRow(rowValues[0]);
});
参考资料:

非常感谢,亚历山德罗,这段代码为我节省了很多时间。请给我一些建议。例如,如果几行的第一列中有John,但其他列中有不同的数据,我想将John的所有数据都放在一个工作表/选项卡中,对于在源工作表中分别出现的其他人来说,情况相同,那么最好的方法是什么。再一次为麻烦感到抱歉,我还是Javascript新手,正在尝试实现一些自动化。首先,必须为getNames变量获取一个集合。(否则你会有重复)。我用一个有效的解决方案编辑了我的答案。谢谢,@Alessandro。这是很好的说明和理解。我也对代码进行了编辑,效果很好。Cheeershey Alesandro,已经修改了代码,这样它就不用说“工作表已经存在”,而是用一个类似的名称覆盖工作表,并包括复制数据的第一行,这样就有了标题。但是每次我运行代码时,它仍然说“工作表已经存在”,请帮帮一个兄弟好吗?
var getNames = [...new Set(sheet1.getRange("A2:A").getValues().filter(String).toString().split(","))];

var rowIndexes = sheet1.getRange("A:A").getValues()
                                       .map((value, index) => [value[0], (index + 1)])
                                       .filter(value => value[0] === getNames[i]);
var namedSheet = ss.insertSheet(getNames[i]);
rowIndexes.map(index => {
                 var rowValues = sheet1.getRange(index[1], 1, 1, sheet1.getLastColumn()).getValues();
                 namedSheet.appendRow(rowValues[0]);
});