验证另一个范围内的值。如果成功,将数据复制到另一个工作表

时间:2017-10-26 07:24:30

标签: google-apps-script google-sheets

我想请你帮忙。

我正在尝试制作一个自动放置数据的电子表格,因此我需要一个验证步骤,以检查该值是否与范围内的值匹配。

这是一个例子 printscreen of the spreadsheet

我需要检查COLUMN A中的值是否与COLUMN H范围内的值匹配。如果匹配,则将OK放到COLUMN F,如果没有放入ERR。

下一步是将成功验证的数据复制到另一张表

List of sheets

如果验证了该值,则应用程序应将此行中的数据复制到特定工作表。

例如:将正确验证值AAA,因此应将其第2行和第6行(Period,Data1,Data2,Data3)复制到特定位置的AAA表(句点)。

Sheet1的第2行 - > AAA表格第11行

第6行表单Sheet1 - > AAA表格第12行

AAA Sheet

以下是电子表格Spreadsheet link

的链接

我希望这对一个问题来说不是太多,而且一切都很清楚。

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

尝试以下代码......

function validate() {
    var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
    var data = ss.getRange(2, 1, ss.getLastRow() - 1,5).getValues();

    var valsToCheck = ss.getRange(2, 8, ss.getLastRow() - 1).getValues();
    valsToCheck = [].concat.apply([], valsToCheck).filter(String);

    var opt = [];var dataToCopied = [];

    for (var i = 0; i < data.length; i++) {
        if (valsToCheck.indexOf(data[i][0]) != -1) {
            opt.push(["OK"]);
            dataToCopied.push(data[i])
        } else {
            opt.push(["ERR"]);
        }
    }
    ss.getRange(2, 6, opt.length, 1).setValues(opt);
    var month = ["JANUARY","FEBRUARY","MARCH","APRIL","MAY","JUNE","JULY","AUGUST","SEPTEMBER","OCTOBER","NOVEMBER","DECEMBER"];

    for(var k=0;k<dataToCopied.length;k++){
      var rowNo = month.indexOf(dataToCopied[k][1].toString().toUpperCase());
      SpreadsheetApp.getActiveSpreadsheet().getSheetByName(dataToCopied[k][0]).getRange(rowNo+3,2,1,3).setValues([[dataToCopied[k][2],dataToCopied[k][3],dataToCopied[k][4]]])
    }
}