google-apps-script - Google Apps-Scripts 错误“范围内的行数必须至少为 1。”

因此,到目前为止,我一直在使用应用程序脚本时遇到了几个问题,该脚本一直在正常工作。当我复制一张纸时,它现在坏了。通过不同的工作表存在各种错误。特别是这个让我陷入困境。运行“CustomImport”时,我不断收到“范围内的行数必须至少为 1”的错误。 (它适用于 OnOpen)。该脚本的目的是通过在 google sheets 的“链接”表中指定的表 url/名称/范围获取数据,并将输出到“主”电子表格。错误在:“outputSheet.getRange(4,1,outputSheet.getLastRow(),outputSheet.getLastColumn()).clearContent();”

因为我不是程序员,所以我对应该从哪里开始的想法为零。这是一个自定义构建的脚本,我找不到任何有类似问题的人。我包括了整个代码,所以它可以被看到。我还有一个可以打开访问/编辑的电子表格。

function onOpen(e) {
  SpreadsheetApp.getUi().createMenu('IMPORT')
    .addItem('Update data', 'customImport')
    .addToUi();
}

function customImport() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const inputSheet = ss.getSheetByName('Links');
  const outputSheet = ss.getSheetByName('Year-2022 Sessions');
  const columnNumberToFilter = 1

  const inputValues = inputSheet.getRange(2, 1, inputSheet.getLastRow() - 1, 3).getValues();
  let output = [] ;
  
  inputValues.forEach(entrie => {
  const [url, sheetname, range] = entrie;
  const sheetRange = SpreadsheetApp.openByUrl(url)
    .getSheetByName(sheetname)
    .getRange(range)
  let data = sheetRange.getValues();
    output = output.concat(data);
  })
output = output.filter(row => row[columnNumberToFilter - 1] != "") ; 

outputSheet.getRange(4,1,outputSheet.getLastRow(), outputSheet.getLastColumn()).clearContent();
outputSheet.getRange(4, 1, output.length, output[0].length).setValues(output).sort([6,4])
}

回答1

The number of rows in the range must be at least 1 之类的错误发生在 outputSheet.getRange(4,1,outputSheet.getLastRow(),outputSheet.getLastColumn()).clearContent(); 时,我认为在那种情况下,outputSheet.getLastRow() 可能是 0。而且,在您的情况下,我认为 outputSheet.getLastRow() 可能是 outputSheet.getLastRow() - 3。如果我的理解是正确的,那么下面的修改呢?

从:

outputSheet.getRange(4,1,outputSheet.getLastRow(), outputSheet.getLastColumn()).clearContent();

至:

var lastRow = outputSheet.getLastRow();
if (lastRow > 0) {
  outputSheet.getRange(4,1,lastRow - 3, outputSheet.getLastColumn()).clearContent();
}

相似文章

最新文章