如果工作表1中的复选框为true,请删除工作表2 Google电子表格中具有相同值的行

时间:2019-05-23 21:38:59

标签: javascript google-apps-script google-sheets

名为“报告”的工作表使用查询从多个工作表中导入数据。除了一张纸之外,所有纸都从其他文件中获取数据。

有一个名为“ SavedDB”的工作表,我可以在其中保存要保留的行,以防它们从原始来源中删除。我可以在其他帖子的帮助下使用它。

我创建了两个按钮,即保存和删除,每行都有一个与每个按钮相关联的复选框。

This is what it looks like

每当用户单击“报表”工作表中的“保存”按钮时,脚本就会将所有已选中TRUE的行复制到工作表SavedDB中,然后由“已格式化保存”中的查询将其导入,然后依次导入通过“报告”中的查询

现在,我正在尝试实施反向过程。当用户单击“删除”时,应从“ SavedDB”中删除选中了列删除的所有行。

已删除的行必须与除前6个列之外的其他所有列完全匹配。前6个列不会首先导出到“ SavedDB”。

这是我到目前为止所拥有的:

function deleteRows() {
 
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Report'); //source sheet
  var testrange = sheet.getRange('D:D'); //range to check
  var testvalue = (testrange.getValues());
  var csh = ss.getSheetByName('SavedDB'); //destination sheet
  var data = [];
  var dataNew =[];
 

  //Condition check in D:D; If true copy the same row to data array
for (i=0; i<testvalue.length;i++) {
  if ( testvalue[i] == 'true') {
  data.push.apply(data,sheet.getRange(i+1,7,1,25).getValues());
  
  
 }
 }
  
 //####THIS IS WHERE I AM STUCK###
  
  //GET ALL NON-EMPTY ROWS ON 'SavedDB IN THE ARRAY dataNew
  
  //COMPARE BOTH ARRAYS data AND dataNew
  
  // ADD ALL THE UNIQUE ROWS, AND IF A ROW IS REPEATED DISCARD IT ALTOGETHER
  
  //SAVE NEW VALUES TO 'savedDB'

 
  
 //######
  
  
  //changes the check boxes back to false(unchecked)
 var resetRange = sheet.getRange('E3:E');
 var values = resetRange.getValues();
  for (var i = 0; i < values.length; i++) {
    for (var j = 0; j < values[i].length; j++) {
      if (values[i][j] == true) {
        values[i][j] = false; // Modified
      }
    }
  }
resetRange.setValues(values); 
  
  
  
}

谢谢大家!

1 个答案:

答案 0 :(得分:0)

我不确定您还想要什么,但这可能是一个更好的开始。

function deleteRows() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Report');
  var rg=sh.getRange(1,4,sh.getLastRow(),1);
  var vA=rg.getValues();
  var dsh=ss.getSheetByName('SavedDB');
  var data = [];
  for (i=0; i<vA.length;i++) {
    if (vA[i][0]=='TRUE') {
      data.push(sh.getRange(i+1,7,1,25).getValues()[0]);
    }
  }
}