【问题标题】:Cannot convert sheet row to class error in google script无法将工作表行转换为谷歌脚本中的类错误
【发布时间】:2018-12-31 05:26:36
【问题描述】:

我正在尝试使用脚本根据谷歌工作表中的最后一行删除具有重复值的行。在这种情况下,它将是值为“hi”的行,但我不确定如何解决此错误:

无法将 2018 年 12 月 31 日星期一 00:15:41 GMT+0800 (HKT),hi 转换为 (class)。 (第 18 行,文件“代码”)

这是我的代码:

// retrieve sheet data and store into variable
var sheet = SpreadsheetApp.getActiveSheet();
var data = sheet.getDataRange().getValues();

// get last row value from column B(target column)
var col_len = data.length
var lastRow = data[col_len-1][1];
var index = new Array();

function check_dup(){
  for(i=0; i<data.length;i++){
    if(lastRow === data[i][1]){
      index.push(i);
    }
  }

  //error from this line
  for(i=index.length-2;i>=1;i--){
    sheet.deleteRow(data[index[i]]);
  }
} 

【问题讨论】:

  • 您真的是在全局命名空间中而不是在函数中执行前几行吗?换句话说,您可以让任何以后的代码——即使是在不同的文件中——将这些变量(sheetdatacol_lenindex 等)修改为不同的值和类型,而无需任何表明已经编写的代码可能会受到影响的迹象。
  • 我尝试在全局命名空间中添加行,但仍然收到相同的错误。问题已解决。谢谢你的回复:)

标签: google-apps-script google-sheets


【解决方案1】:

删除 column2 中与最后一行数据相同的所有行

据我了解,您的问题是删除与第 2 列中与最后一行具有相同数据的所有匹配行。

function removeDup() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var targetData=data[data.length-1][1];//last row column 2 is target data 
  var d=0;//number of rows deleted 
  for(var i=1;i<data.length-1;i++){ //start at one to skip header row and don't go to last row
    if(data[i][1]==targetData){//if it matches targetData then delete row
      sheet.deleteRow(i-d+1);
      d++;//increment delete counts because the row got delete the data array is still the same size.
    }
  }
}

关于在堆栈溢出时删除重复行的主题有很多答案。稍微搜索一下,您就会找到它们。

【讨论】:

  • 现在可以使用了!我以后会这样做,谢谢你的建议:)
猜你喜欢
  • 1970-01-01
  • 2018-08-24
  • 2016-07-05
  • 1970-01-01
  • 2021-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多