类型错误:无法读取 null

时间:2021-06-02 16:02:07

标签: google-apps-script

我有一个电子表格,其中 A:Z 列中有数据。 AA 列中是工作簿中工作表的名称。我正在尝试将 A:Z 中的数据复制到与 AA 中同名的工作表中。我发现这个脚本看起来很有希望:

function myFunction() {
  let sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("CLAIMED");
  let range = sheet.getRange(1, 1, sheet.getLastRow(), sheet.getLastColumn())
  for (var i = 1; i <= range.getLastRow(); i++) {
    let sourceval = sheet.getRange(i, 1, 1, range.getLastColumn());
    let destname = sheet.getRange(i, range.getLastColumn()).getValue();
    let destsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(destname);
    sourceval.copyTo(destsheet.getRange(destsheet.getLastRow() + 1, 1));
  }
}

但是,我收到错误“TypeError:无法读取 null 的属性 'getRange'”。我在这里查找了答案,但其中大部分似乎是关于使用包含/绑定的脚本。这是我直接放在脚本编辑器中的脚本,所以应该没问题。将 SpreadsheetApp.getActiveSpreadsheet() 更改为通过电子表格 ID 打开没有帮助。

感谢您的任何建议!

1 个答案:

答案 0 :(得分:0)

function myFunction() {
  const ss = SpreadsheetApp.getActive();
  const sh = ss.getSheetByName("CLAIMED");
  const rg = sh.getRange(1, 1, sh.getLastRow(), sh.getLastColumn());
  const vs = rg.getValues();
  vs.forEach((r,i)=>{
    let lc = r.length - 1;
    let s = ss.getSheetByName(r[lc]);
    r.pop();
    s.getRange(1,1,1,lc).setValues(r);
  });
}