更改脚本以在特定工作表上运行会引发TypeError

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了更改脚本以在特定工作表上运行会引发TypeError相关的知识,希望对你有一定的参考价值。

如何在特定工作表而不是整个电子表格上运行此脚本?

function deleteQCOrder() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var rows = sheet.getDataRange();
  var numRows = rows.getNumRows();
  var values = rows.getValues();

  var rowsDeleted = 0;
  for (var i = 0; i <= numRows - 1; i++) {
    var row = values[i];
    if (row[4] == 'Delete' || row[4] == '') { // This searches all cells in columns A (change to row[1] for columns B and so on) and deletes row if cell is empty or has value 'delete'.
      sheet.deleteRow((parseInt(i)+1) - rowsDeleted);
      rowsDeleted++;
    }
  }
};

例如,如果我想在“Sheet1”上运行它,我试过:

function deleteQCOrder() {
  var sheet = SpreadsheetApp.getActiveSheet();

  var ss = sheet.getSheetByName('Sheet1');

  var rows = ss.getDataRange();
  var numRows = rows.getNumRows();
  var values = rows.getValues();

  var rowsDeleted = 0;
  for (var i = 0; i <= numRows - 1; i++) {
    var row = values[i];
    if (row[4] == 'Delete' || row[4] == '') { // This searches all cells in columns A (change to row[1] for columns B and so on) and deletes row if cell is empty or has value 'delete'.
      sheet.deleteRow((parseInt(i)+1) - rowsDeleted);
      rowsDeleted++;
    }
  }
};

但是没有运行,我得到这个错误:

TypeError:在对象Sheet中找不到函数getSheetByName。 (第3行,文件“删除订单号”)

答案

您在代码中执行的操作是获取sheet对象,该对象当前是活动工作表

var sheet = SpreadsheetApp.getActiveSheet();

那么你试图从一个工作表对象中获取一个工作表对象,这就是错误

var ss = sheet.getSheetByName('Sheet1');

您需要做的是从电子表格对象中找到一个工作表对象,如下所示:

function deleteQCOrder() {
  //correct use of SpreadsheetApp for your case
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Sheet1');
  var range = sheet.getDataRange();
  var numRows = range.getNumRows();
  var values = range.getValues();
  var rowsDeleted = 0;
  for (var i = 0; i <= numRows - 1; i++) {
    var row = values[i];
    if (row[4] == 'Delete' || row[4] == '') {
      sheet.deleteRow((parseInt(i)+1) - rowsDeleted);
      rowsDeleted++;
    }
  }
};
另一答案

您必须使用电子表格对象来获取工作表对象。在第二个代码块中,您将获得工作表而不是电子表格。

您可以使用以下方式获取电子表格对象:

var ss = SpreadsheetApp.getActiveSpreadsheet();

然后你可以使用getSheetByName获取'Sheet1':

var sheet = ss.getSheetByName('Sheet1');

以上是关于更改脚本以在特定工作表上运行会引发TypeError的主要内容,如果未能解决你的问题,请参考以下文章

在具有“已更改”列的表上使用 activerecord 会引发错误

如何使用 gitlab 设置 yaml 文件以在特定文件更改时进行部署?

H2 数据库表上的 SQL 查询引发 ArrayIndexOutOfBoundsException

VSTO:在 Excel 工作表上绘图

更改 extent() 以在 RasterLayer 的特定网格上聚合

根据行数据复制特定单元格并粘贴到特定工作表上