在 Google 表格移动应用上使用 onEdit 运行函数

问题描述 投票:0回答:3

我的功能现在对我来说很好用,但我有一个问题,让它在移动设备上工作,所以我尝试了另一种方法来使用 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');
}
google-apps-script google-sheets mobile triggers dialog
3个回答
1
投票

试试这个方法

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 在移动设备上不太可靠,有时必须重复触发过程


1
投票

Class Browser、Class UI 和 SpreadsheetApp.toast 在 Google Sheets 移动应用(iOS 和 Android)中不起作用。另一方面,您应该使用可安装的触发器,而不是使用简单的触发器,因为

SpreasheetApp.openByUrl
方法需要授权才能运行。

更改 onEdit 函数的名称,删除

Browser.msgBox('Commande Confirmer');
并创建一个可安装的编辑函数,调用重命名的函数应该使您的脚本在移动应用程序上运行

如果您确实需要在 onEdit 函数完成时收到自定义通知,您可以在特定范围内发送写入消息或图像。如果您使用编辑可安装触发器,您还可以发送电子邮件或调用外部 API。

相关


0
投票

您需要通过触发器注册编辑方法才能在移动设备上触发,如下所示:

function onEditByTrigger(e) {
  ...
}

function _registerTriggers() {

  ScriptApp.newTrigger('onEditByTrigger')
      .forSpreadsheet(SpreadsheetApp.getActive())
      .onEdit()
      .create();
}

然后通过 Apps Script IDE 中的下拉菜单调用方法

_registerTriggers
(可以在“运行/调试”按钮后面找到该方法,选择该方法,然后单击“调试”按钮,系统将提示您授予运行权限。)

此后,在桌面或移动设备上对工作表进行更改将调用

onEditByTrigger
,因此请将当前
onEdit
方法的内容移至
onEditByTrigger
。 UI 调用无法在移动设备上进行,因此需要使用不同的技术来替换它们..(即用其他东西替换
Browser.msgBox()
调用!)

© www.soinside.com 2019 - 2024. All rights reserved.