Google sheets 用于将基于条件的单元格从一张图纸复制到另一张图纸的脚本

Google sheets 用于将基于条件的单元格从一张图纸复制到另一张图纸的脚本,google-sheets,Google Sheets,我想编写一个简单的脚本,从“源”电子表格C5:K5中复制单元格,并根据B5中的值将其粘贴到“目标”表中相应的行中。我找不到确切的脚本代码。接下来,我附上了一份电子表格样本,该样本有助于描述我正在寻找的内容: 下面的脚本是我尝试过的,它运行良好,但没有将复制的值粘贴到相应的行中。例如,如果我在共享电子表格“sample”中运行脚本,则值将粘贴到第101行。但它应该粘贴在第55行 function create() { var sheet1 = SpreadsheetApp.getActi

我想编写一个简单的脚本,从“源”电子表格
C5:K5
中复制单元格,并根据
B5
中的值将其粘贴到“目标”表中相应的行中。我找不到确切的脚本代码。接下来,我附上了一份电子表格样本,该样本有助于描述我正在寻找的内容:

下面的脚本是我尝试过的,它运行良好,但没有将复制的值粘贴到相应的行中。例如,如果我在共享电子表格“sample”中运行脚本,则值将粘贴到第101行。但它应该粘贴在第55行

function create() {
    var sheet1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('sheet1');
    var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('sheet2');
    var dest;

    var range1 = sheet1.getRange(5,2);
    var tune = range1.getValue();
    Logger.log('tune is ' + tune);

    if (tune != null){ 
        var copyrange = sheet1.getRange("C5:J5");
    }

    var compare1 = sheet2.getRange("B5:B105");
    var compare = sheet2.getRange("B5:B105").getValues();
    Logger.log('sheet2 values are ' + compare); 
    var i;
    var dest=[];


    for(var j=1; j< compare.length; j++) {

        var find = compare[j];

        // Logger.log("find vlaue is" + find);
        //Logger.log("tune vlaue is" + tune);
        if (find = tune) {
            dest.push(compare[j]);
            //var r= compare.getRow.range();
        }
    }
    Logger.log('J value is' + j);

    copyrange.copyValuesToRange(sheet2, 3, 10, j, j);

}
函数创建(){
var sheet1=SpreadsheetApp.getActiveSpreadsheet().getSheetByName('sheet1');
var sheet2=SpreadsheetApp.getActiveSpreadsheet().getSheetByName('sheet2');
var-dest;
var range1=sheet1.getRange(5,2);
var tune=range1.getValue();
Logger.log('tune是'+tune);
如果(tune!=null){
var copyrange=sheet1.getRange(“C5:J5”);
}
var compare1=sheet2.getRange(“B5:B105”);
var compare=sheet2.getRange(“B5:B105”).getValues();
Logger.log('sheet2值为'+比较);
var i;
var dest=[];
对于(var j=1;j
从函数中可以看出:

CopyValueStorRange(表、列、列结束、行、行结束)

将范围的内容复制到给定位置。如果 目标大于或小于源范围,而不是源范围 将相应地重复或截断

您需要将行和行结束指定为最后一个参数。当
循环的
排气时,您正在输入变量
j
,这是表1的
“B5:B105”
范围(与
进行比较,如果
什么也不做)。因此,
j
取值
105-5+1=101
。如果要将副本放置在第
55
行,只需将该行中的
j
更改为
55
。但如果希望自动完成,可以使用以下代码:

function create() {
    var sheet1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('sheet1');
    var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('sheet2');
    var dest;

    var range1 = sheet1.getRange(5,2);
    var tune = range1.getValue();
    Logger.log('tune is ' + tune);

    if (tune != null){ 
        var copyrange = sheet1.getRange("C5:J5");
    }

    var compareRange = sheet2.getRange("B5:B105");
    var compareValues = compareRange.getValues();
    Logger.log('sheet2 values are ' + compareValues); 
    var i;
    var dest=[];


    for(var j=1; j< compareValues.length; j++) {

        // Logger.log("find vlaue is" + find);
        //Logger.log("tune vlaue is" + tune);
        if (compareValues[j] == tune) {
            break;
        }
    }
    Logger.log('J value is' + j);

    var startRow = compareRange.getRow();

    copyrange.copyValuesToRange(sheet2, 3, 10, j+startRow, j+startRow);

}
函数创建(){
var sheet1=SpreadsheetApp.getActiveSpreadsheet().getSheetByName('sheet1');
var sheet2=SpreadsheetApp.getActiveSpreadsheet().getSheetByName('sheet2');
var-dest;
var range1=sheet1.getRange(5,2);
var tune=range1.getValue();
Logger.log('tune是'+tune);
如果(tune!=null){
var copyrange=sheet1.getRange(“C5:J5”);
}
var compareRange=sheet2.getRange(“B5:B105”);
var compareValues=compareRange.getValues();
Logger.log('sheet2值为'+compareValues);
var i;
var dest=[];
对于(var j=1;j
很抱歉,这里不是您要求为您完成工作的地方。你应该试试自己,到这里来问问你的疑问。我明白了。我试着用这个脚本。但我无法修改和使用它。在理解了脚本的基本知识后,我可以在电子表格中运行脚本。但问题是它没有粘贴到正确的行中。编辑你的问题,添加你的代码,并描述发生了什么。在描述实际脚本之前,还要在问题中添加您尝试使用的脚本。之后在这里发表评论告诉我,我不知道
vba
,但我可能会帮助你…谢谢你的帮助。我正在为谷歌电子表格编写脚本。我在问题中添加了电子表格脚本。请给出你的评论谢谢你的快速回答。我理解你的代码,它对我有用。@jsmanian欢迎你。考虑点击左边的答案(靠近投票号码)检查你的问题以关闭线程X。