如何使用脚本编辑器在 Google Sheets 中选择和删除从 ListView (MIT App Inventor) 中选择的行?

问题描述

目前,我正在制作药物管理应用。现在,我需要创建一个删除函数。要删除药物,脚本必须过滤用户名和药物名称(因为可能有多个用户使用相同的药物)。如果两者匹配,则应从 Google 表格中删除该行。

以下是不同用户添加药物的数据:

链接 https://docs.google.com/spreadsheets/d/1IEWSf7gp52GS0nM5I4WyPv-nj3ujSA4cXwUSko77Auw/edit?usp=sharing

以下是我的 Google Apps 脚本:

    function doGet(e) {
  return ManageSheet(e);
}
function doPost(e) {
  return ManageSheet(e);
}

function ManageSheet(e) {

  //READ ALL RECORDS
  if ( e.parameter.func == "ReadAll") {
    var ss = SpreadsheetApp.getActive();
    var sh = ss.getSheets()[0]; 
    var rg = sh.getDatarange().getValues(); 
    var outString = '';
      for(var row=0 ; row<rg.length ; ++row){
        outString += rg[row].join(',') + '\n';  
      } 
    return ContentService.createtextoutput(outString).setMimeType(ContentService.MimeType.TEXT);
  }

  //READ SINGLE RECORD
   else if ( e.parameter.func == "ReadRecord") {
    var ss = SpreadsheetApp.getActive();
    var sh = ss.getSheets()[0];
    var rg = sh.getDatarange().getValues();
    var outString = '';
    outString += rg[parseInt(e.parameter.medication)].join(',');
    return ContentService.createtextoutput(outString).setMimeType(ContentService.MimeType.TEXT);
  }
  
  //CREATE NEW RECORD  
  if (e.parameter.func == "Create") {
    
    var ss = SpreadsheetApp.getActive();
    
    var sh = ss.getSheets()[0];
    
    var data =[e.parameter.username,e.parameter.medication,e.parameter.color,e.parameter.frequency,e.parameter.dosage,e.parameter.time,e.parameter.reminder1,e.parameter.reminder2,e.parameter.reminder3,e.parameter.reminder4,e.parameter.reminder5,e.parameter.remark]; 
    
    sh.appendRow(data);
    
    return ContentService.createtextoutput("Success");
  
  }

}

以下是我的 MIT App Inventor 块用于此屏幕:

My Pills screen

MIT App Inventor blocks for My Pills screen

目前,流程是当用户进入 MyPills 页面时,起始值将是用户名。然后,ListView 将显示用户添加的所有药物。要删除,从列表中选择后,用户可以单击“删除药物”按钮,将弹出一个确认通知,其中包含“是”和“否”选项。所以,现在我在脚本中执行删除功能时遇到问题:将用户名和药物名称作为输入,然后过滤匹配的行,然后删除该行。请帮忙,非常感谢!!!

解决方法

您的脚本中似乎没有删除功能....

尝试这样的事情:

    // deletes a single record (and its row) from sheet. Requires row index and col1 to match
  else if ( fn == 'DELETE' ) {
    var index = e.parameter.INDEX;  //index in list
    var col1 = e.parameter.COL1;  // current/existing value of col1 - it could be replaced...
    for (var i = 0; i < rg.length; i++ ) {
      if ( index != undefined && i == index && col1 == rg[i][0] ) {
        sh.deleteRow(parseInt(index)+1);
      } 
    }
    return ContentService.createTextOutput("Existing record deleted");    
   }

期望行索引和电子表格第 1 列中的数据匹配才能删除。根据您的需要进行调整。

另见:

https://ai2.metricrat.co.uk/guides/google-sheet-crudq-ii

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...