Nicht erlaubt, sendEmail () aus der benutzerdefinierten Funktion auszuführen, sondern in der Skripteditor OK, OK

StackOverflow https://stackoverflow.com/questions/19840894

Frage

Ich habe versucht, einen Weg zu finden, um eine einzelne Datenreihe in eine bestimmte E -Mail -Adresse in einer Tabelle "Live/Running" zu senden, die ich in meiner Domain verwende, um die Lkw -Treiber und deren Abholzahlen zu verfolgen. Ich habe es geschafft, diesen kleinen Code mit dem in den Blättern verfügbaren Google Apps -Skripteditor zusammenzusetzen:

function sendEmail()
{
   var sheet = SpreadsheetApp.getActiveSheet();
   var activeRow = sheet.getActiveCell().getRow();
   var cellID = "H" + activeRow;    
   var dataRange = sheet.getRange(activeRow, 1, 1, 6);
   var EMAIL_SENT = "EMAIL_SENT";
   var data = dataRange.getValues();
   Logger.log(data[0][0]);

   var emailAddress = usercellnum@carrier.net;
   var message = data;
   var subject = "CG-PU#";
   var emailSent = sheet.getRange(cellID).getValue();

   if (emailSent != "EMAIL_SENT")
   {
     MailApp.sendEmail(emailAddress, subject, message);
     var cell = sheet.getRange(cellID);
     cell.setValue(EMAIL_SENT);
   }
  }
SpreadsheetApp.flush();  
}

Wie auch immer ich die Funktion von einer Zelle in meiner Tabelle aufrufen kann =sendEmail() und es sollte die Informationen nur aus der aktiven Zeile senden und dann diese Zeile als enn als EMAIL_SENT Also mache ich es nicht versehentlich noch einmal.

Das Skript läuft perfekt, wenn ich es von Innern -Skripteditor ausführe und die E -Mail -Adresse harte Codierung ausführe. Wenn ich jedoch versuche, sie aus der Tabellenblatt selbst auszuführen, erhalte ich die Nachricht:

Fehler: Sie haben keine Berechtigung, Sendemail (Zeile 19, Datei "CPS_Sendemail.gs") anzurufen.

Jede Unterstützung damit wird sehr geschätzt! Es würde helfen, meinen Benutzer davon abzuhalten, zu MS Excel und Outlook zurückzulaufen. Wenn ich diesen Teil davon funktioniert, würde ich es wirklich mögen, wenn ich die Funktion eine Liste von Adressen anzeigen kann, aus denen der Benutzer auswählen kann, oder eine andere Möglichkeit, den Benutzer davon abzuhalten Träger, aber ich würde gerne so viel davon wie erwartet funktionieren lassen.

Das Skript würde/sollte nur mit meinen Benutzern in meiner Google -Domain ausgeführt werden, und als ich es zum ersten Mal ausführte, war ich sicher, dass ich den Autorisierungsprozess durchgemacht habe, aber diesen Teil der Dinge nicht wirklich verstehe.

Sie verwenden derzeit MS Excel/Outlook und kopieren und fügen die Zeile in eine E -Mail ein, aus der sie ihre Kontakte verwenden können, um auszuwählen. Wenn ich die Funktion nicht dazu bringen kann, Googles -Kontakte zu verwenden, habe ich darüber nachgedacht, ein Treiberblatt mit einer Look -Up -Funktion oder so etwas zu erstellen - eine Art Schmerz, um eine Liste aufzubewahren, wenn Kontakte genau dort sind -, aber Sie tun, was Sie tun müssen !

Keine korrekte Lösung

Andere Tipps

Drüber lesen Berechtigungen und benutzerdefinierte Funktionen. Da benutzerdefinierte Funktionen (Skripte, die aus Tabellenkalkulationsfunktionen genannt werden) für jeden Benutzer einer Tabelle geöffnet sind, dürfen sie keinen Dienst verwenden, der eine Authentifizierung erfordert. Deshalb können Sie keine Post von einem senden.

Dies unterscheidet sich von dem Prozess der Autorisierung eines Skripts, um auf Ihre Dienste zuzugreifen. Das macht die Fehlermeldung verwirrend, aber seien Sie versichert, dass Sie das Skript aufgerufen haben.

Kein Problem, denn eine benutzerdefinierte Funktion ist ohnehin eine schlechte Möglichkeit, diese Art von Aktion auszuführen, da die Funktion jedes Mal neu bewertet wird, wenn sich die Tabelle ändert und viele weitere E-Mails sendet, als Sie möchten.

Ich empfehle Ihnen, stattdessen einen Menüelement für diesen Vorgang zu erstellen. (Sehen Sie sich den Beispielcode im Editor an, wenn Sie ein neues Spreadsheet -Skript erstellen.) Der Workflow würde darin bestehen, den Cursor in die gewünschte Zeile zu verschieben, und verwenden Sie das Menü, um es so zu machen, dass Ihr Skript aufgerufen wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top