如何使用标头名称而不是硬编码值进行查找,然后更新相应的单元格?

Scr*_*xop 7 google-sheets vlookup google-apps-script

目前,我有一个模仿VLOOKUP函数的脚本,如下所示-

function lookupUpdate() {

  // Test variables
  var HashID = "B2";
  var EditorName = "Jane";  

  var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var values = ss.getDataRange().getValues();
  for (var i = 0; i < values.length; i++) {
    if (values[i][0] == HashID) {
      // hard coding the value 2 as the 'EditorName' corresponds to Column B
      ss.getRange(i + 1, 2).setValue(EditorName);
      // trying to find a way to not hard code this value (2)
      break;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我的工作表的架构非常简单-

图纸数据

但是,我想优化脚本,以便它根据标题名称查找并设置值,而不是有人对值进行硬编码,因为每次在现有的数据集数组之间引入新列时,都会变得很困难。

是否可以在不破坏整个代码的情况下实现?

Sou*_*ria 7

通常,我会使用indexOf函数进行类似VLOOKUP的更新,并且根据您的情况,我建议如下修改代码-

function lookupUpdateNew() {

  var HashID = "B2";
  var EditorName = "Jane";  

  var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var values = ss.getDataRange().getValues();

  var headers = values[0];
  var hashIDIndex = headers.indexOf('HashID');
  var editorNameIndex = headers.indexOf('EditorName');

  for (var i = 0; i < values.length; i++) {
    if (values[i][hashIDIndex] == HashID) {
      ss.getRange(i + 1, editorNameIndex + 1).setValue(EditorName);
      break;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

让我知道这是您所期望的还是更多。我敢肯定,还有很多其他/更好的方法可以做到这一点。