从一张纸到另一张纸的基于条件的复制单元的脚本

时间:2014-12-27 22:53:06

标签: google-sheets

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

https://docs.google.com/spreadsheets/d/1PoeIbmO1VTYYR9jViw6rHV0Pnzg357AkZJIA28My2LA/edit?usp=sharing

以下脚本是我尝试过的,它运行正常,但它没有在适当的行中粘贴复制的值。例如,如果我在共享电子表格“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);

}

1 个答案:

答案 0 :(得分:1)

可以在函数documentation中看到:

  

copyValuesToRange(sheet,column,columnEnd,row,rowEnd)

     

将范围的内容复制到给定位置。如果   目标大于或小于源范围,然后是源   将被重复或截断。

您需要将行和行结束指定为最后一个参数。当j循环耗尽(与"B5:B105"的比较无效时),您输入了变量for这是sheet1 if范围。因此,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);

}