Google Apps脚本读取并匹配不同工作表中的单元格值

时间:2019-02-15 15:56:24

标签: google-apps-script

我是第一次编写Google脚本来处理来自Google电子表格的数据。 Google工作表由2个工作表组成,这两个工作表均基于不同的Google表单。

目标是使想要辅导其他人的人与一个或多个主题自动匹配。例如,约翰尼(Johnny)应该与劳伦(Lauren)相匹配,而迈克尔(Micheal)应该与约翰(John)相匹配。

我编写了此代码,以检查可以辅导他们的Micheal和Johnny。我想做的是检查主题物理学,是否希望Micheal接受该主题的辅导,然后由谁来做。约翰尼也一样。并与其他主题重复(英语)。

在此示例中,我仅检查主题。物理。这只是看物理学是否标记为“是”或“否”。

[代码以结尾]

当我查看我的日志时,预计会看到: 没有 是 没有 是 是 不

但是我看到: 没有 是 不

与希望下课的人一起工作的表 enter image description here

导师表 enter image description here

function myFunction() {
    var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
    /* sheet with people who want to tutor other people */
    var lr = ss.getLastRow(); // how many rows
    var kk =
        SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Hebber");
    /* sheet with people who want to be tutored */
    var klr = kk.getLastRow(); // how many rows

    for (var i = 2; i <= klr; i++) {

        var hemail = kk.getRange(i, 2).getValue();
        var hname = kk.getRange(i, 3).getValue();
        var hphysics = kk.getRange(i, 4).getValue();
        var henglish = kk.getRange(i, 5).getValue();

        Logger.log(hphysics);

        for (var i = 2; i <= lr; i++) {

            var gemail = ss.getRange(i, 2).getValue();
            var gname = ss.getRange(i, 3).getValue();
            var gphysics = ss.getRange(i, 4).getValue();
            var genglish = ss.getRange(i, 5).getValue();

            Logger.log(gphysics);
        }
    }
}

2 个答案:

答案 0 :(得分:1)

尝试使用j而不是i作为变量的第二个循环。由于您使用的是i,因此当脚本回到第一个for循环时,它已经在i中添加了数字,这导致它比您希望的更早退出循环。如果您不希望第二个for循环影响第一个,则需要使用不同的变量。

答案 1 :(得分:0)

问题似乎出在计数器变量上。

请参阅我的示例及其输出:

var klr = 3;
var lr = 3;

for (var i = 0; i <= klr; i++) {
  console.log("f1." + i);
  for (var i = 0; i <= lr; i++) {
    console.log("f2." + i);
  }
}

f1.0
f2.0
f2.1
f2.2
f2.3

因此,要回答您的问题,您需要在第二个for循环中使用替代变量:

for(var i = 2; i <= klr; i ++){

    var hemail = kk.getRange(i, 2).getValue();
    var hname = kk.getRange(i, 3).getValue();
    var hphysics = kk.getRange(i, 4).getValue();
    var henglish = kk.getRange(i, 5).getValue();

    Logger.log(hphysics);

    for (var j = 2; i <= lr; j++) {

        var gemail = ss.getRange(j, 2).getValue();
        var gname = ss.getRange(j, 3).getValue();
        var gphysics = ss.getRange(j, 4).getValue();
        var genglish = ss.getRange(j, 5).getValue();

        Logger.log(gphysics);
    }
}