问题描述
目前,我正在制作药物管理应用。现在,我需要创建一个删除函数。要删除药物,脚本必须过滤用户名和药物名称(因为可能有多个用户使用相同的药物)。如果两者匹配,则应从 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 块用于此屏幕:
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 列中的数据匹配才能删除。根据您的需要进行调整。
另见: