将一个清单中的值与另一张纸上的清单相匹配,然后复制一个单元格GAS

时间:2019-02-19 13:27:34

标签: google-apps-script google-sheets

需要有关无法在Google应用程序脚本上运行的脚本的帮助。我有一个sheet1,其中colA是日期,而colB是ID。在sheet2上,我具有相同的ID,但可以在任何行中(不按顺序)。因此,脚本应找到该ID,然后将日期复制到col P(sheet2)的colA(sheet1)上。 这里的脚本什么都不做。在此先感谢您的帮助。

function CopyDate() {
  ss = SpreadsheetApp.openById('Name');
  sheetA = ss.getSheetByName('Sheet1');
  dataA = sheetA.getRange('A:B').getValues();
  sheetB = ss.getSheetByName('Sheet2');
  dataB = sheetB.getRange('A:P').getValues();
  for(var i = 0; i > sheetA.getLastRow(); i++) {
    if (dataA[2][i] == dataB[1][i]) {
      var value = sheetA.getRange(i+1, 1).getValue();
      sheetB.getRange(i+1, 16).setValue(value);
    }
  }
}

1 个答案:

答案 0 :(得分:0)

  • “ Sheet1”在“ A”和“ B”列中分别具有日期和ID。
  • “ Sheet2”在“ A”列中具有ID。
  • 当“ Sheet1”和“ Sheet2”的ID相同时,要将“ Sheet1”的日期复制到“ Sheet2”的“ P”列。
  • 您想使用Google Apps脚本实现这一目标。

如果我的理解是正确的,那么该修改如何?

修改点:

  • 关于for(var i = 0; i > sheetA.getLastRow(); i++){,在这种情况下,由于i > sheetA.getLastRow(),不使用for循环。
  • dataAdataB是2维数组,例如[[columnA of row1, columnB of row1],[columnA of row2, columnB of row2],,,]。因此,在dataA[2][i] == dataB[1][i],比较“ Sheet1”的第2行和“ Sheet2”的第1行。
  • 在循环中使用setValue()时,成本会很高。因此,在创建放置值之后,请使用setValues()放置值。
  • 对于您来说,如果使用var dataA = sheetA.getRange(1, 1, sheetA.getLastRow(), 2).getValues()而不是sheetA.getRange('A:B').getValues(),则可以降低处理成本。

当以上几点反映到您的脚本中时,它如下所示。

修改后的脚本:

function CopyDate() {
  var ss = SpreadsheetApp.openById('Name'); // If you want to use openById(), please replace the Spreadsheet ID to ``Name``.
  var sheetA = ss.getSheetByName('Sheet1');
  var dataA = sheetA.getRange(1, 1, sheetA.getLastRow(), 2).getValues();
  var sheetB = ss.getSheetByName('Sheet2');
  var dataB = sheetB.getRange(1, 1, sheetB.getLastRow(), 1).getValues();
  var values = dataB.map(function(e) {
    var t = dataA.filter(function(f) {return f[1] == e[0]});
    return t.length > 0 ? [t[0][0]] : [""];
  });
  sheetB.getRange(1, 16, values.length, 1).setValues(values); // 16 means the column "P".
}

注意:

  • 在您的脚本中,可以在Name中看到ss= SpreadsheetApp.openById( 'Name');。如果您使用电子表格名称,请使用电子表格ID。如果我误解了,请忽略。
  • 如果您不想降低流程成本,我深表歉意。

参考文献:

如果这不是您想要的结果,我深表歉意。那时,为了正确了解您的情况,您可以提供示例电子表格吗?当然,请从中删除您的个人信息。这样,我想修改脚本。