根据条件删除数据行

Delete row of data based on condition

本文关键字:数据 删除 条件      更新时间:2023-10-19

我有一个电子表格,我想用它来存储项目时间表。我可以添加项目及其开始日期和完成前的长度——这在"项目"表上。这反映在一个单独的工作表上,根据设置的日期,每个项目的单元格都涂上特定的颜色——这就是"时间表"工作表。当我想删除项目时遇到问题。我想点击项目名称的单元格,从我创建的菜单中点击"删除项目",然后在"项目"表和"时间表"表上删除项目行。这个循环让我很困惑,我还没有完全理解它。我应该使用数组将项目名称存储在两张表上,然后使用它来相互引用,还是。。。???这是我迄今为止所拥有的。

function clearProject() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sourceSheet = ss.getSheetByName('Projects');
  var sourceRange = sourceSheet.getActiveRange();
  var height = sourceRange.getValues().length;
  var rowPosition = sourceRange.getRowIndex();
  var targetSheet = ss.getSheetByName('Timeline');
  var targetSheetValues = targetSheet.getRange(3, 1, 15, 49);
  var targetProjectNames = targetSheet.getRange(3, 1, 15, 1).getValues();
  var sourceProjectNames = sourceSheet.getRange(2, 1, 15, 1).getValues();
  var targetHeight = targetSheet.getRange(3, 1, 15, 1).length;
  var targetRowPosition = targetSheet.getRange(3, 1, 15, 1).getRowIndex();
  for(var i=0; i > sourceProjectNames.length; i++){
    if(i == targetProjectNames){
      targetSheet.deleteRows(targetRowPosition, targetHeight);
        }
    else{
      break;
    }
  }

  //This deletes the row of the active cell
  //ss.getActiveSheet().deleteRows(rowPosition, height);
  Logger.log(i);
}

此外,如果你知道任何用通俗英语解释循环的资源,请给我一个链接。谢谢你的帮助!

EDIT:在"if"语句中将比较从=更改为==。编辑2:更改了for循环中的比较。此外,还更改了if语句的比较内容。

循环仍然无法正常工作。当我检查i的日志时,我得到了0.0。这是新代码。。。

 function clearProject() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sourceSheet = ss.getSheetByName('Projects');
  var sourceRange = sourceSheet.getActiveRange();
  var height = sourceRange.getValues().length;
  var rowPosition = sourceRange.getRowIndex();
  var targetSheet = ss.getSheetByName('Timeline');
  var targetSheetValues = targetSheet.getRange(3, 1, 15, 49);
  var sourceRangeValues = sourceSheet.getRange(2, 1, 15, 1);
  var targetProjectNames = targetSheet.getRange(3, 1, 15, 1).getValues();
  var sourceProjectNames = sourceSheet.getRange(2, 1, 15, 1).getValues();
  var targetHeight = targetSheet.getRange(3, 1, 15, 1).length;
  var targetRowPosition = targetSheet.getRange(3, 1, 15, 1).getRowIndex();
  for(var i=0; i < sourceRangeValues.length; i++){
    if( targetProjectNames[i][0] == sourceRange[i][0]){
      targetSheet.deleteRows(targetRowPosition, targetHeight);
    Logger.log(i);    
    }
  }

  //This deletes the row of the active cell
  //ss.getActiveSheet().deleteRows(rowPosition, height);
  Logger.log(i);
}
  1. 我认为这个循环根本不会运行一次

for(var i=0; i > sourceProjectNames.length; i++)

应该是

for(var i=0; i < sourceProjectNames.length; i++)

2.您正在将整数与不正确的的2-D数组进行比较

if(i == targetProjectNames)

相反,你应该做这样的事情。

if( targetProjectNames[i][0] == sourceProjectNames[i][0])

3.如果第一次比较失败,break;语句将结束循环。所以完全去除的其他部分

这些都是我能提前注意到的。尝试一下,如果你仍然看到问题,请用更多信息编辑你的问题。