该功能未在GAS中运行

时间:2019-09-11 21:32:23

标签: google-apps-script

我正在尝试创建一个脚本来删除Google表格第1行中包含特定数据的行。它涉及创建一个数组,并使其遍历该列中的单元并决定是否应删除它。我似乎无法正常工作。我已经有了一个好的开始,但是我感觉自己缺少一些东西。

我已经尝试将类似于Delete a row in Google Spreadsheets if value of cell in said row is 0 or blank中的格式的函数作为函数的基础,但是我似乎缺少了一些东西。我有一种感觉,这是由于它实际上没有读取数组,但是我无法弄清楚如何以读取数据的方式进行校正。

我看过其他github来源,例如https://gist.github.com/dDondero/285f8fd557c07e07af0e,但我被困住了。

function deleteRows()
{
var ss = SpreadsheetApp.getActiveSpreadsheet();
var RANGE = ss.getRange('B:B');
var v = RANGE.getValues();

var trainer = [""];
for(var i = v.length-1; i >= 0; i--)
{
  if(v[0,i] = trainer)
  {
    ss.deleteRow(i + 1);
  }
}
}

如果列表中的任何内容在第1列中会删除应该存在数据的行,该怎么办。截至目前,如果指定数组中有内容,则不会删除该行。不提供任何错误且运行正常,因为我在此脚本中有一个函数,一旦输入了某些内容,该函数当前会对行加时间戳。

2 个答案:

答案 0 :(得分:0)

尝试一下:

您似乎正在尝试删除B列中没有任何值的行。这就是它的作用。

function deleteRows() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getActiveSheet();
  var rg=sh.getRange(1,2,sh.getLastRow(),1);
  var v=r.getValues();
  var d=0;
  for(var 1=0;i<v.length;i++)  {
    if(!v[i][0]) { 
      ss.deleteRow(i+1-d++);
    }
  }
}

答案 1 :(得分:0)

感谢您的所有帮助。我能够深入了解它,并对提供给我的解决方案的信息进行了更改。它可能不是最干净的,但可以满足需要。我既得到了以前使用的时间戳,也得到了删除行功能。再次感谢您的帮助!

function onEdit(event) 
{ 
  var d = [""];

  var timezone="GMT-5";
  var timestamp_format="hh:mm:ss a"; // Timestamp Format. 
  var updateColName="Advisor";
  var teamLeadColName = "Team Leader";
  var timeStampColName="Time";
  var sheet = event.source.getActiveSheet();

  var actRng = event.source.getActiveRange();
  var editColumn = actRng.getColumn();
  var headers = sheet.getRange(2, 1, 1, sheet.getLastColumn()).getValues();
  var teamLeadCol = headers[0].indexOf(teamLeadColName);
  var timeCol = headers[0].indexOf(timeStampColName);
  var updateCol = headers[0].indexOf(updateColName); 
  updateCol = updateCol+1; 
  for(var index = actRng.getLastRow(); index >= actRng.getRow(); index--)
  {
    if(teamLeadCol > -1 && index > 1)
    {
      var cell = sheet.getRange(index, teamLeadCol + 1);
      var teamLeadName = cell.getValue();
      for(var i=0; i < d.length; i++)
      {
        if(d[i] == teamLeadName)
        {
         sheet.deleteRow(index);
          continue;
        }
      }

    }
    if (timeCol > -1 && index > 1 && editColumn == updateCol) // only timestamp if 'Last Updated' header exists, but not in the header row itself!
    { 
      var cell = sheet.getRange(index, timeCol + 1);
      var date = Utilities.formatDate(new Date(), timezone, timestamp_format);
      cell.setValue(date);
      var datestamp_format = "MMMM-dd-yyyy";
      var dateStampColName = "Date";
      var dateCol = headers[0].indexOf(dateStampColName);
      if(dateCol > -1 && index > 1 && editColumn == updateCol)
      {
        var cell = sheet.getRange(index, dateCol +1);
        var calendarDate = Utilities.formatDate(new Date(), timezone, datestamp_format);
        cell.setValue(calendarDate);
      }
    }
  }
}