Javascript 将索引匹配语句转换为Google脚本

Javascript 将索引匹配语句转换为Google脚本,javascript,if-statement,google-apps-script,match,Javascript,If Statement,Google Apps Script,Match,我将不同表单中的表格合并到谷歌表单中。我想做的是设置一个函数onedit(e)可以与一个循环函数结合运行这个函数 =索引($G$2:$G$8,匹配($A10和$I$1,数组公式($B$2:$B$8和$E2:$E8),0),“”) 我是google脚本新手,所以我刚刚尝试使用公式,但公式会更新它旁边的所有单元格,我想要的是它匹配并保持不变,以便下次更新列G,然后将结果添加到B10,而不是重写A10。(I1有公式=today(),因此它有一个引用位置,但如果代码可以与日期匹配,那就太好了!) 如果你

我将不同表单中的表格合并到谷歌表单中。我想做的是设置一个函数
onedit(e)
可以与一个循环函数结合运行这个函数

=索引($G$2:$G$8,匹配($A10和$I$1,数组公式($B$2:$B$8和$E2:$E8),0),“”)

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

如果你想知道我在说什么,这里有一个链接

B2:B8
是基于
A10:A18
中的列表的下拉列表(如果有任何区别)。 如果有任何帮助,我将不胜感激。我已经找了3天了,但找不到可以这样做的东西。

试试这个:

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;
}
函数自动加载(){
var ss=SpreadsheetApp.getActiveSheet();
var meeting=ss.getRange(“B2:F8”).getValues();
var targetNames=ss.getRange(“A10:A18”).getValues();
var writingRange=ss.getRange(“B10:F18”).getValues();
var updateuser=targetNames;
var writingcolumn=-1;
var矩阵;
对于(变量i=0;i
用您的工作表副本对此进行了测试,效果良好,它在名称和“-”旁边设置了正确的注释。如果他们不在会议中,您现在必须手动运行它,但如果愿意,可以将其分配给
onEdit()

函数onEdit(事件)
 function onEdit(event) 
    { var timezone = "GMT-5"; var timestamp_format = "MM/dd/yyyy"; // Timestamp Format. 
    var updateColName = "Student Name"; 
    var timeStampColName = "Date"; 
    var sheet, ss; 
    ss = SpreadsheetApp.getActiveSpreadsheet(); 
    sheet = ss.getActiveSheet();//Get the active sheet 
    var actRng = event.source.getActiveRange(); 
    var editColumn = actRng.getColumn(); 
    var index = actRng.getRowIndex();
    var headers = sh

eet.getRange(4, 1, 1, sheet.getLastColumn()).getValues(); 
var dateCol = headers[0].indexOf(timeStampColName); 
var updateCol = headers[0].indexOf(updateColName); updateCol = updateCol+1; 
if (dateCol > -1 && index >=5  && index <= 36 && editColumn == updateCol) { // only timestamp if 'Last Updated' header exists, but not in the header row itself! 
var cell = sheet.getRange(index, dateCol + 1); 
var date = Utilities.formatDate(new Date(), timezone, timestamp_format); cell.setValue(date); }

function onEdit(){
  var ss = SpreadsheetApp.getActiveSheet();
  var meeting = ss.getRange("B2:F37").getValues(); 
  var targetNames = ss.getRange("A38:A90").getValues();
  var writtingRange = ss.getRange("B38:F90").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; 
      }
    }
  }
  for (var w = 0; enter code here w < writtingRange.length; w++){
    if (writtingRange[w][writtingColumn] == ''){
      writtingRange[w][writtingColumn] = '-';
    }
  }
  ss.getRange("B38:F90").setValues(writtingRange);
}}
{var timezone=“GMT-5”var timestamp_format=“MM/dd/yyyy”//时间戳格式。 var updateColName=“学生姓名”; var timeStampColName=“日期”; var表,ss; ss=电子表格应用程序。getActiveSpreadsheet(); sheet=ss.getActiveSheet();//获取活动工作表 var actRng=event.source.getActiveRange(); var editColumn=actRng.getColumn(); var index=actRng.getRowIndex(); var headers=sh getRange(4,1,1,sheet.getLastColumn()).getValues(); var dateCol=headers[0].indexOf(timeStampColName); var updateCol=headers[0]。indexOf(updateColName);updateCol=updateCol+1;
如果(dateCol>-1&&index>=5&&index您想要完成的是什么,更新
B10:C18
?还是更新
A10:A18
?您的问题不清楚。@AMolina我想做的是:当Ana Luz在G2的9月2日星期一收到一张便条时,该便条将被输入Ana Luz B10,但当我在9月1日再次进入时0并为Ana Luz添加一张新便条,比如说在G7中(因为她在那一周扮演了顾问的角色),我希望将该便条输入C10,同时将第一张便条保留在B10中。我希望通过G10一直这样做(因为我们每学期与他们会面5次)对于A10:A18列表中的所有人。希望这是有意义的。我知道这有点复杂。在回顾了你的评论后,我认为我理解得更好,你希望根据会议记录得到当天的评论。从10:18开始排成一行。是的,差不多了!你认为你能帮上忙吗?@AMolinaI已经研究了一段时间,但是我正在写一些代码来做这件事,我会发布它作为一个答案时ready@Rihco很高兴听到它的工作!请考虑接受解决问题的答案,当你说你发布的一个,你是说这个公式吗?把它设置成<代码> OnEdEd()/代码>你只需要从<代码> AutoLoad()中更改函数的名称即可。
onEdit()
所以我发布了一个公式,它会自动在D列中插入日期作为答案,但我不知道如何将两者结合起来}它将只运行日期公式,而不是您发布的公式。我还注意到,如果我在“编辑内容”上运行它,那么如果我在某人身上输入注释,它将给我“-”对于其他人,即使是在同一天。例如,我在G2中为Ana Luz输入了一些内容,然后该注释被输入到Ana Luz B10中,但当我转到G3中的Sabrina她的注释时,它将被输入到C11而不是B11中,即使会议是在同一天。如果D列为I,是否可以在同一行中添加输入条件“今天”或者同一日期???@Rihco这是一种可能性,但是,作为一种更简单的方法,我建议在添加所有注释后手动运行代码。或者,由于会议是在给定日期进行的,所以在会议和注释添加完成后,有一个在这些日期运行的定时脚本。至于混合功能,您需要让它们运行分开,每个都是自己的东西。哟