【问题标题】:Script for condition based copy cells from one sheet to another sheet用于将基于条件的单元格从一张纸复制到另一张纸的脚本
【发布时间】:2014-12-27 22:53:06
【问题描述】:

我想编写一个简单的脚本来从“源”电子表格C5:K5 复制单元格,然后根据B5 中的值将其粘贴到适当行的“目标”工作表中。我找不到确切的脚本代码。接下来我附上了样本电子表格,它有助于描述我在寻找什么:

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

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

}

【问题讨论】:

  • 很抱歉,这里不是您要求为您完成工作的地方。你应该自己试试,来这里问你的疑惑x)
  • 是的。我明白了。我尝试使用此脚本。 stackoverflow.com/questions/26631072/… 但我无法为我修改和使用它。
  • 在了解脚本基础知识后,我可以在电子表格中运行脚本。但问题是它没有粘贴在正确的行中。
  • 编辑您的问题,添加您拥有的代码并描述正在发生的事情。在描述您的实际脚本之前,还要将您尝试使用的脚本添加到您的问题中。之后在这里评论告诉我,我不知道vba,但我也许可以帮助你......
  • 感谢您帮助我。我正在为谷歌电子表格编写脚本。我在我的问题中添加了我的电子表格脚本。请给你的cmets

标签: google-sheets


【解决方案1】:

在函数documentation中可以看出:

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

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

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

}

【讨论】:

  • 非常感谢您的快速回答。我理解了你的代码,它对我有用。
  • @jsmanian 欢迎您。考虑在您的问题左侧(靠近投票号码)的答案处单击对勾以关闭线程 x)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-08-23
  • 1970-01-01
  • 1970-01-01
  • 2020-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多