Button Google工作表:删除包含指定数据的行

Button Google工作表:删除包含指定数据的行,button,google-apps-script,google-sheets,menu,Button,Google Apps Script,Google Sheets,Menu,我不熟悉Java脚本和Google应用程序脚本,所以如果已经回答了这个问题,我很抱歉。在这个项目的最后几个月里,我找不到我想要的东西 我正在这里编写脚本的变体: 及 我想创建一个按钮或菜单,允许某人输入特定数据,并删除电子表格中包含该数据的每一行 我这里有一个测试表,它演示了我正在使用的数据、公式,并附有脚本的开头: 前4张工作表通过每张工作表中单元格a:3中的公式从“表格回复1”工作表中提取数据,因此只需从“表格回复1”工作表中删除数据即可将其从其余工作表中清除 我试着在这里工作,但我

我不熟悉Java脚本和Google应用程序脚本,所以如果已经回答了这个问题,我很抱歉。在这个项目的最后几个月里,我找不到我想要的东西

我正在这里编写脚本的变体:


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

我这里有一个测试表,它演示了我正在使用的数据、公式,并附有脚本的开头:

前4张工作表通过每张工作表中单元格a:3中的公式从“表格回复1”工作表中提取数据,因此只需从“表格回复1”工作表中删除数据即可将其从其余工作表中清除

我试着在这里工作,但我不认为我在正确的轨道上。

60天前,我还在谷歌文档帮助论坛上发布了这篇文章,但没有收到任何回复。
任何帮助都将不胜感激。

这里有几个步骤。对于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   
} 

如果单元格值符合您的搜索条件,我将演示一种删除该单元格值的方法。由您将其连接到按钮等

你将通过一个循环。找到匹配的单词后,使用

函数deleteSpectData(){

var ss=SpreadsheetApp.getActiveSpreadsheet();
var sheet=ss.getSheets()[0];
var范围=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(范围);
对于(变量i=0;i对于(var j=0;jdo您想针对单个列或所有列进行数据搜索吗?我需要针对所有列,因为要删除的数据可能位于多个不同的列中。非常感谢!我不希望有人编写整个内容。这绝对是完美的。我通过了一些测试,它运行得非常完美。看起来它甚至解决了我担心的问题,即删除数据并留下一个空行(这会导致电子表格变得太大,无法处理当前编写的公式);整行被删除。我真的很感激。你为我节省了无数个小时的工作。你以一种我可以理解的方式将其分解,因此我从中学到了前所未有的东西。我想这将有助于你开始。我认为,一旦你知道与电子表格交互的正确方法,调用UI I,GAS真的很容易在这一过程中,我看到了一些具体的例子,说明了如何实施多步骤dea,而不是在刚开始时费力地寻找方法,这对我很有帮助。
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")  
}
 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();

      }
    }
  }