根据条件删除数据行

时间:2013-11-26 21:15:54

标签: javascript google-apps-script

我有一个电子表格,我想用它来存储项目时间表。我有能力添加项目及其开始日期以及它们的长度直到完成 - 这是在“项目”表上。这会在单独的工作表中反映出来,因为每个项目的单元格都有特定颜色,具体取决于它们设置的日期 - 这是“时间轴”工作表。我想要删除项目时遇到问题。我想单击项目名称的单元格,然后从我创建的菜单中单击“删除项目”,然后在“项目”工作表和“时间轴”工作表上删除项目行。循环让我感到困惑,我并没有完全理解它。我应该使用数组在两张纸上存储项目名称,然后使用它来互相引用,或者...... ???这是我到目前为止所拥有的。

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);

}

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

编辑:在“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 个答案:

答案 0 :(得分:1)

  1. 我认为这个循环根本不会运行一次
  2. for(var i=0; i > sourceProjectNames.length; i++)

    应该是

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

    2.您正在将一个整数与一个不正确的二维数组进行比较

    if(i == targetProjectNames)

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

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

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

    这些是我可以预先注意到的一些事情。如果您仍然遇到问题,请尝试使用更多信息编辑您的问题。