カスタム関数からsendemail()を実行することは許可されていませんが、スクリプトエディターではOK

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

質問

ドメイン内で使用している「ライブ/ランニング」スプレッドシートの特定のメールアドレスに一連のデータを送信する方法を見つけようとしており、トラックのドライバーとそのピックアップ番号を追跡します。シートで利用可能なGoogle Appsスクリプトエディターを使用して、この少しのコードをつなぐことができました。

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();  
}

どんな方法でも、スプレッドシートのセルから関数を呼び出すことができます =sendEmail() そして、それはアクティブな行のみから情報を送信し、その列に次のようにフラグを立てなければなりません EMAIL_SENT だから私は誤って二度とそれをしません。

スクリプトは、内部スクリプトエディターから実行すると完璧に実行され、メールアドレスをハードコードしますが、スプレッドシート自体から実行しようとすると、メッセージが表示されます。

エラー:sendemail(19行目、 "cps_sendemail.gs")を呼び出す許可がありません。

これに関する支援は大歓迎です!ユーザーがMS ExcelやOutlookに戻るのを防ぐのに役立ちます。この部分を機能させると、ユーザーが選択できるアドレスのリストを機能させることができれば、ユーザーがドライバーアドレスを覚えて入力しないようにする他の方法と他の方法を表示できれば、本当に気に入っていただけます。キャリアですが、私はこれだけが期待どおりに機能したいと思っています。

スクリプトは、ユーザーと一緒にGoogleドメインでのみ実行することを許可されます。初めて実行したときは、承認プロセスを経たと確信していましたが、その部分の一部を本当に理解していません。

彼らは現在、MS Excel/Outlookを使用しており、連絡先を使用して選択できる電子メールに行をコピーして貼り付けています。グーグルの連絡先を使用する機能を取得できない場合は、検索機能などを備えたドライバーのシートを作成することを検討していました。連絡先がすぐそこにあるときにリストを保持する必要がありますが、ya ya gottaがやることをします。 !

正しい解決策はありません

他のヒント

読んでください 権限とカスタム関数. 。カスタム関数(スプレッドシート関数から呼び出されるスクリプト)はスプレッドシートのユーザーに開かれているため、認証が必要なサービスを使用することは許可されていません。そのため、メールを送信できません。

これは、サービスにアクセスするスクリプトを許可するプロセスとは異なります。これにより、エラーメッセージが混乱しますが、スクリプトを呼び出している方法であることはご安心ください。

ただし、カスタム関数はとにかくこのタイプのアクションを実行するための悪い方法であるため、スプレッドシートに変更があるたびに機能が再評価され、必要以上に多くのメールを送信するため、機能が再評価されるためです。

代わりに、この操作のメニュー項目を作成することをお勧めします。 (新しいスプレッドシートスクリプトを作成する場合は、エディターで提供されているサンプルコードを参照してください。)ワークフローは、処理したい行にカーソルを移動し、メニューを使用して「SO SO」を使用してスクリプトを呼び出すことです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top