Google表格:删除包含指定数据的行

时间:2017-06-20 04:41:28

标签: button google-apps-script google-sheets menu

我是Java脚本和Google Apps脚本的新手,所以如果这已经得到解答,我很抱歉。在这个项目的最后几个月里,我无法找到我想要的东西。

我正在研究脚本的变体:
Delete row in Google Sheets if certain "word" is found in cell

Google Sheet Script - Find Value in Col and Delete Row

我想创建一个按钮或菜单,允许某人输入特定数据,并让电子表格中的每一行都包含该数据。

我在这里有一个测试表,说明我正在使用的数据,我正在使用的公式,并附有脚本的开头: https://docs.google.com/spreadsheets/d/1e2ILQYf8MJD3mrmUeFQyET6lOLYEb-4coDTd52QBWtU/edit?usp=sharing

前4张纸张通过每张纸张中的单元格A:3中的公式从“表单响应1”表中提取数据,因此只需要从“表单响应1”表中删除数据以清除它其余的床单。

我试过这个,但我不认为我走在正确的轨道上。 https://developers.google.com/apps-script/guides/dialogs

我也在60天前在Google文档帮助论坛上发布了这个帖子,但没有收到任何回复。 任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

还有几个步骤。对于UI的可用性,这需要更长的代码。简洁形式:

  • 用户激活对话框并输入字符串。
  • 删除带有字符串的行(带错误处理和确认)

(希望这可以让你开始,你可以根据自己的需要定制它)

启动菜单的功能:

function onOpen(){
  SpreadsheetApp.getUi() 
  .createMenu('My Menu')
  .addItem('Delete Data', 'deleteFunction')
  .addToUi();
}

主要的主力:

function deleteFunction(){
  //declarations
  var sheetName = "Form Responses 1"; 
  var ss = SpreadsheetApp.getActive();
  var sheet = ss.getSheetByName(sheetName);

  var dataRange = sheet.getDataRange();
  var numRows = dataRange.getNumRows();
  var values = dataRange.getValues();

  var delete_string = getUIstring();//open initial UI, save value
  if (delete_string.length < 3) return shortStringError()//UI to protect your document from an accidental entry of a very short string. 

  //removing the rows (start with i=2, so don't delete header row.) 
  var rowsDeleted = 0;
  for (var i = 2; i <= numRows; i++){
    var rowValues = values[i-1].toString();//your sheet has various data types, script can be improved here to allow deleting dates, ect. 

    if (rowValues.indexOf(delete_string) > -1){
      sheet.deleteRow(i - rowsDeleted);//keeps loop and sheet in sync
      rowsDeleted++; 
    }

  }
  postUIconfirm(rowsDeleted);//Open confirmation UI   
} 

隔离的UI函数有助于使上述功能更简洁:

function getUIstring(){
  var ui = SpreadsheetApp.getUi();
  var response = ui.prompt("Enter the target data element for deletion")
  return response.getResponseText()
}

function postUIconfirm(rowsDeleted){
  var ui = SpreadsheetApp.getUi();
  ui.alert("Operation complete. There were "+rowsDeleted+" rows deleted.")  
}

function shortStringError(){
  var ui = SpreadsheetApp.getUi();
  ui.alert("The string is too short. Enter a longer string to prevent unexpected deletion")  
}

答案 1 :(得分:0)

如果匹配搜索条件,我只会显示删除单元格值的方法。您可以将它连接到按钮等。

您将循环浏览Sheet Range。当您找到匹配字时,请使用clearContent()

将其删除

function deleteSpecificData(){

 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = ss.getSheets()[0];
 var range = sheet.getRange("Sheet1!A1:C4");
 var values = range.getValues();
 var numArray = [1,2,3,4,5,6,7,8,9];

 var deleteItem = "Garen";

 Logger.log(range);

  for(var i=0; i< values.length; i++){
    for(var j=0; j<values[i].length; j++){
      if(values[i][j] == deleteItem){
           var row = numArray[i];
           var col = numArray[j];
           var range = sheet.getRange(row,col).clearContent();

      }
    }
  }

}

在: enter image description here

在: enter image description here