button - 谷歌表格 : delete rows containing specified data

标签 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 文档帮助论坛上发布了这个,但没有收到任何回复。 任何帮助将不胜感激。

最佳答案

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

关于button - 谷歌表格 : delete rows containing specified data,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44643965/

相关文章:

css - 将按钮两个居中对齐,一个在右边

arrays - Google Sheets 公式可跟踪过去 4 周内事件发生的数量

javascript - 为什么 Kimono API 以 404 响应?

google-apps-script - 在 Google-Apps-Script 中使用 Directory API,如何在组内获取组

mysql - Google 表格 JDBC 脚本中的西里尔数据库内容

javascript - RouteXL API 畅游

google-sheets - 使用谷歌表格保持图表中的单元格引用不变?

css - 强制 TextBox 占据 div 中的全部剩余大小

javascript - html中的按钮触发快捷键

html - 将按钮置于 div 容器内居中