Javascript 谷歌脚本删除行

Javascript 谷歌脚本删除行,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,嘿,我正在尝试编写一个google脚本,它将根据真/假语句删除行。我正在使用复选标记,并让它删除该行。还有什么方法可以让它连续运行,还是每次都要手动运行 我似乎无法运行代码来删除带有复选标记的行 function deleteRow() { var ss = SpreadsheetApp.getActiveSpreadsheet() var editSheet = ss.getSheetByName("EDIT"); var lastRowEd

嘿,我正在尝试编写一个google脚本,它将根据真/假语句删除行。我正在使用复选标记,并让它删除该行。还有什么方法可以让它连续运行,还是每次都要手动运行

我似乎无法运行代码来删除带有复选标记的行

function deleteRow()  {
  
  var ss = SpreadsheetApp.getActiveSpreadsheet()
  
  var editSheet = ss.getSheetByName("EDIT");
  
  var lastRowEdit = editSheet.getLastRow();
  
  for(var i = 4; i <= lastRowEdit; i++)
  {
    
    if(editSheet.getRange(i,4).getValue() == 'TRUE')
    {
      editSheet.deleteRow(i);
      
  
}

  }
  
  
}
函数deleteRow(){
var ss=SpreadsheetApp.getActiveSpreadsheet()
var editSheet=ss.getSheetByName(“编辑”);
var lastRowEdit=editSheet.getLastRow();
对于(var i=4;i解释/问题:
  • 如果您的工作表列包含
    TRUE/FALSE
    值,则这些值将在Google Apps脚本中作为javascript布尔值返回。因此,您需要进行的比较是
    getRange(i,4)。getValue()==TRUE
    而不是
    getRange(i,4)。getValue()

  • for
    循环中调用
    getRange
    getValue
    效率很低。如果您有很多数据,这可以很快达到配额

  • 正确的解决方案是获取列
    D
    中的数据。我发现您希望从第四个单元格开始,因此
    editSheet.getRange('D4:D'+editSheet.getLastRow())
    。但这将是一个2D数组。您对特定列感兴趣。因此,使用1D数组更自然。这就是为什么您可以使用它

  • 现在您已经存储了数据,您想删除行。但是每次删除行时,工作表的结构都会发生变化,因此它不会映射原始数据。这就是为什么您需要向后迭代
    我在这里使用
    forEach
    循环,以使代码更加清晰,因此我可以将我的数据集保存在此处从末尾开始对每个元素进行评分

  • 因为
    coldD
    包含javascript布尔值。我可以直接使用
    if(r)

解决方案:
function deleteRow(){var ss=SpreadsheetApp.getActiveSpreadsheet()var editSheet=ss.getSheetByName(“编辑”);var lastRowEdit=editSheet.getLastRow();var d=0;用于(var i=4;此工作表中会输入更多数据,因此它只需扫描D列中的所有正确或错误语句。这是连续工作还是每次都必须运行脚本才能生效?其他编辑器是否可以更改工作表并运行脚本?@CyberYourPunk 1)你需要通过执行这个函数来手动运行它,或者创建一个时间触发器,例如,这样做。2)无论谁对该片断有编辑访问,都可以执行这个脚本。3)通过点击答案左边的嘀嗒按钮来考虑接受答案。
function deleteRow(){

  const ss = SpreadsheetApp.getActiveSpreadsheet()
  const editSheet = ss.getSheetByName("EDIT");
  const colD = editSheet.getRange('D4:D'+ editSheet.getLastRow()).getValues().flat();  
  colD.reverse().forEach((r,i)=>{
     if(r){ 
      editSheet.deleteRow(colD.length-i+3);
  }});
 
}