首页 > 解决方案 > 将索引匹配语句转换为 Google Script

问题描述

我正在将来自不同工作表的表格组合成一个在谷歌工作表上的表格。我想要做的是设置一个函数onedit(e)可以与一个循环函数结合起来运行它

=index($G$2:$G$8,match($A10&$I$1,arrayformula($B$2:$B$8&$E2:$E8),0),"")。

我是谷歌脚本的新手,所以我刚刚尝试使用公式,但公式会更新它旁边的所有单元格,我想要的是它匹配并保持不变,以便下次column G更新然后将结果添加到B10而不是重写A10。(I1 有公式 =today() 以便它有一个参考位置,但如果代码可以与日期匹配,那就太好了!)

如果你想看看我在说什么,这里是工作表的链接。https://docs.google.com/spreadsheets/d/1jviYYhI1V_bL8TMVvijR9vo_7sBFfktbhgblGNcYfrQ/edit?usp=sharing

B2:B8是基于列表的下拉列表,A10:A18如果这有什么不同的话。任何帮助将不胜感激我一直在寻找 3 天,但找不到可以做到这一点的东西。

标签: javascriptif-statementgoogle-apps-scriptmatch

解决方案


尝试这个:

function autoload() {
  var ss = SpreadsheetApp.getActiveSheet();
  var meeting = ss.getRange("B2:F8").getValues();
  var targetNames = ss.getRange("A10:A18").getValues();
  var writtingRange = ss.getRange("B10:F18").getValues();
  var updatedUser = targetNames;
  var writtingColumn = -1;
  var coolMatrix;

  for (var i = 0; i < meeting.length; i++) {
    var name = meeting[i][0]
    for (var j = 0; j < targetNames.length; j++) {
      if (targetNames[j][0] == name) {
        for (var z = 0; z < writtingRange[0].length; z++) {
          if (writtingRange[j][z] == '' && writtingColumn < 0) {
            writtingColumn = z;
            break;
          }
        }
        writtingRange[j][writtingColumn] = meeting[i][4];
        updatedUser[j] = true;
      }
    }
  }

  whiteSpaceRemover(writtingRange);
  ss.getRange("B10:F18").setValues(writtingRange);
}

function whiteSpaceRemover(multidimensionalArray) {
  for (var i = 0; i < multidimensionalArray.length; i++) {
    for (var j = 0; j < multidimensionalArray[0].length; j++) {
      if (multidimensionalArray[i][j] == '') {
        multidimensionalArray[i].splice(j, 1);
        multidimensionalArray[i].push('');

      }
    }
  }

  for (var i = 0; i < multidimensionalArray.length; i++) {
    if (multidimensionalArray[i][0] == '') {
      for (var j = 0; j < multidimensionalArray[i].length; j++) {
        if (multidimensionalArray[i][j] != '') {
          whiteSpaceRemover(multidimensionalArray);
        }
      }
    }
  }

  return multidimensionalArray;
}

用您的工作表的副本对此进行了测试,它运行良好,它在名称旁边设置了正确的注释,如果他们不在会议中,则为“-”,您现在必须手动运行它,但它可以是onEdit()如果你愿意,分配给一个。


推荐阅读