Google Apps 脚本中的“范围”问题

问题描述 投票:0回答:1

我正在尝试修改此脚本,以将列中包含“名称”一词的整行复制到新工作表中。

得到“例外:范围内的行数必须至少为 1”,因此目前根本不起作用!有人可以帮忙吗?

谢谢

function onOpen() {
  SpreadsheetApp.getUi()
    .createMenu('Admin')
    .addItem('Copy name rows', 'copyNameRows')
    .addToUi();
}

function copyNameRows() {
  const sourceSheet = SpreadsheetApp.getActive().getSheetByName('Source');
  const targetSheet = SpreadsheetApp.getActive().getSheetByName('Target');
  const dataValues = sourceSheet.getDataRange().getValues();
  targetSheet.getRange(2,1,targetSheet.getLastRow() - 1, 28).clear();
  var currentTargetRow = 2;
  for (var i = 0 ; i < dataValues.length; i++) {
    if (dataValues[0][24].toString().toLowerCase() == 'name' ||
      dataValues[0][25].toString().toLowerCase() == 'name' ||
      dataValues[0][26].toString().toLowerCase() == 'name' ||
      dataValues[0][27].toString().toLowerCase() == 'name') {
        sourceSheet.getRange(i + 1, 1, 1, 28).copyTo(targetSheet.getRange(currentTargetRow, 1));
        currentTargetRow++;
      }
  }
}

摆弄范围值,但没有乐趣...据我了解,它应该检查第 24、25 和 26 列中的“名称”一词,如果存在,则将该行的内容复制到新工作表中?

google-apps-script exception
1个回答
0
投票

试试这个方法:

function copyNameRows() {
  const ss = SpreadsheetApp.getActive();
  const ssh = ss.getSheetByName('Sheet0');
  const tsh = ss.getSheetByName('Sheet1');
  const svs = ssh.getDataRange().getDisplayValues();
  tsh.clearContents();
  const n = 'name';
  let o = svs.filter((r,i) =>     r.slice(24,28).some(e => e.toLowerCase() == n))
  o.unshift(svs[0])
  tsh.getRange(tsh.getLastRow() + 1,1,o.length,o[0].length).setValues(o)
}
© www.soinside.com 2019 - 2024. All rights reserved.