我的功能现在对我来说很好用,但我有一个问题,让它在移动设备上工作,所以我尝试了另一种方法来使用 OnEdit 功能,所以当它是我想要午餐的功能时我之前创建过,但现在它不起作用,我不知道为什么它不起作用,我请求你帮助解决这个小问题;) 谢谢你
function onEdit(e) {
var range = e.range;
var spreadSheet = e.source;
var sheetName = spreadSheet.getActiveSheet().getName();
var column = range.getColumn();
var row = range.getRow();
var value = SpreadsheetApp.getActiveSheet().getRange(row, column).getValue();
if(sheetName == 'New Orders' && column == 12 && value=='COMMANDE VALIDER')
{
VALIDERCOMMANDE();
}
}
function VALIDERCOMMANDE() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var copySheet = ss.getSheetByName("New Orders");
var url = "https://docs.google.com/spreadsheets/d/1eTWG_XZt-3CMzkxgKM4pCvD41deGMdka37eQkHM9oDg/edit#gid=0";
var ss2 = SpreadsheetApp.openByUrl(url);
var pasteSheet = ss2.getSheetByName("Order Pull");
// get source range
var max = copySheet.getMaxRows().toString();
var range = copySheet.getRange(2, 1, max, 12);
var dataValues = range.getValues();
for (i = 1; i < dataValues.length; i++) {
if (dataValues[i][11] === 'COMMANDE VALIDER') {
pasteSheet.appendRow([dataValues[i][0],
dataValues[i][1],
dataValues[i][2],
dataValues[i][3],
dataValues[i][4],
dataValues[i][5],
dataValues[i][6],
dataValues[i][7],
dataValues[i][8],
dataValues[i][9],
dataValues[i][10],
dataValues[i][11]]);
var clearRow = i + 2;
copySheet.getRange('D' + clearRow + ':L' + clearRow).clearContent();
}
}
// get destination range
var destination = pasteSheet.getRange(pasteSheet.getLastRow() + 1, 1, max, 1);
// clear source values
Browser.msgBox('Commande Confirmer');
}
function onMyEdit(e) {
const sh = e.range.getSheet();
if (sh.getName() == 'New Orders' && e.range.columnStart == 12 && e.value == 'COMMANDE VALIDER') {
VALIDERCOMMANDE();
}
}
function VALIDERCOMMANDE() {
var ss = SpreadsheetApp.getActive();
var csh = ss.getSheetByName("New Orders");
var id = "1eTWG_XZt-3CMzkxgKM4pCvD41deGMdka37eQkHM9oDg";
var ss2 = SpreadsheetApp.openById(id);
var psh = ss2.getSheetByName("Order Pull");
var vs = csh.getRange(2,1,csh.getLastRow() - 1, 12).getValues().filter(r => r[11] == 'COMMANDE VALIDER').filter(e => e);
psh.getRange(psh.getLastRow() + 1, 1, vs.length, 12).setValues(vs);
}
我经常发现 onEdits 在移动设备上不太可靠,有时必须重复触发过程
Class Browser、Class UI 和 SpreadsheetApp.toast 在 Google Sheets 移动应用(iOS 和 Android)中不起作用。另一方面,您应该使用可安装的触发器,而不是使用简单的触发器,因为
SpreasheetApp.openByUrl
方法需要授权才能运行。
更改 onEdit 函数的名称,删除
Browser.msgBox('Commande Confirmer');
并创建一个可安装的编辑函数,调用重命名的函数应该使您的脚本在移动应用程序上运行
如果您确实需要在 onEdit 函数完成时收到自定义通知,您可以在特定范围内发送写入消息或图像。如果您使用编辑可安装触发器,您还可以发送电子邮件或调用外部 API。
相关
您需要通过触发器注册编辑方法才能在移动设备上触发,如下所示:
function onEditByTrigger(e) {
...
}
function _registerTriggers() {
ScriptApp.newTrigger('onEditByTrigger')
.forSpreadsheet(SpreadsheetApp.getActive())
.onEdit()
.create();
}
然后通过 Apps Script IDE 中的下拉菜单调用方法
_registerTriggers
(可以在“运行/调试”按钮后面找到该方法,选择该方法,然后单击“调试”按钮,系统将提示您授予运行权限。)
此后,在桌面或移动设备上对工作表进行更改将调用
onEditByTrigger
,因此请将当前 onEdit
方法的内容移至 onEditByTrigger
。 UI 调用无法在移动设备上进行,因此需要使用不同的技术来替换它们..(即用其他东西替换 Browser.msgBox()
调用!)