質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

解決済

1回答

1554閲覧

GAS onOpenについてのエラー

mariko163

総合スコア11

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

1クリップ

投稿2018/01/12 08:58

スプレッドシート側から、メール配信処理ができるようにonOpenでスプレッドシートに機能を追加しようとしています。

function onOpen(){ var sheet = SpreadsheetApp.getActiveSpreadsheet(); //メニュー配列 var entries=[ { name: "メールを送信", functionName: "sendEMail" } ]; sheet.addMenu("メール",entries); //メニューを追加 };

こちら自体は無事に動作し、スプレッドシートに機能追加できました。
その後、下記のようにこれまでのコードに追記いたしましたところ、エラーが出ます。
「スクリプト関数 sendEmails が見つかりません。詳しくは https://developers.google.com/apps-script/reference/base/menu#addItem(String,String)
です。
追加する位置がおかしいのでしょうか。いくつか場所を試してみたのですが、うまく動作しません。
お分かりになる方、対処をお知らせいただけますでしょうか。
どうぞよろしくお願いいたします。

function myFunction() { /* スプレッドシートのシートを取得と準備 */ var spreadsheet=SpreadsheetApp.getActiveSheet(); //シートを取得 var rowSheet=spreadsheet.getDataRange().getLastRow(); //シートの使用範囲のうち最終行を取得 var EMAIL_SENT = "送信済み"; /* ドキュメントを取得する */ var docTest=DocumentApp.openById("ドキュメントID"); //ドキュメントをIDで取得 var strDoc=docTest.getBody().getText(); //ドキュメントの内容を取得 ///////////////////////////////////////////// // IDで指定したスプレッドシートをPDF化したい場合// //////////////////////////////////////////// // PDF化したいスプレッドシートのID var ssid = "スプレッドシートID";// スプレッドシートのID // シートID(gid)を指定 var sheetid = "シートID"; // 指定したスプレッドシートを開く var ss = SpreadsheetApp.openById(ssid); //スプレッドシート上のシートをPDFへ変換 var pdf = ss.getAs('application/pdf');  var pdfname = "添付ファイル.pdf"; //PDFをドライブへ作成(保存されます) DriveApp.createFile(pdf).setName(pdfname); /* メール表題、fromアドレス、差出人名を準備 */ var strSubject="タイトル"; //表題 var strFrom="アドレス"; //From var strSender="なまえ"; //差出人 /* シートの全ての行について社名、姓名を差し込みログに表示*/ for(var i=2;i<=rowSheet;i++){ var strCompany=spreadsheet.getRange(i,1).getValue(); //社名 var strSecond=spreadsheet.getRange(i,2).getValue(); //姓 var strFirst=spreadsheet.getRange(i,3).getValue(); //名 var strTo=spreadsheet.getRange(i,4).getValue(); //toアドレス var strBody=strDoc.replace(/{社名}/,strCompany).replace(/{姓}/,strSecond).replace(/{名}/,strFirst); //社名、姓名を置換 Logger.log(strBody); //ドキュメントの内容をログに表示 var emailSent = spreadsheet.getRange(i,5).getValue() //E列 if (emailSent != EMAIL_SENT) { var subject = strTo;//toアドレス GmailApp.sendEmail( strTo, strSubject, strBody, { attachments:pdf, from: strFrom, name: strSender } ); function onOpen(){ var sheet = SpreadsheetApp.getActiveSpreadsheet(); //メニュー配列 var entries=[ { name: "メールを送信", functionName: "sendEMail" } ]; sheet.addMenu("メール",entries); //メニューを追加 };

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

単純にfunction sendEmail() {}が定義されていないからそのエラーが発生していると思います。

functionName: "sendEMail"をfunctionName: "myFunction"に修正するか、

function myFunction() {}をfunction sendEmail() {}に修正するかすれば動くと思います。

投稿2018/01/12 14:01

true

総合スコア440

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mariko163

2018/01/12 14:05

コメントありがとうございます。 1行目で定義しないといけなかったんですね。 動くかまた試しましてお伝えいたします。 初歩的な質問で恐縮です。
true

2018/01/12 14:47

関数宣言で書いているので1行目とかではなくて後で定義しても動きます。 function onOpen() {} function myFunction(){} の順番でも動きます。
mariko163

2018/01/15 00:57

コメントありがとうございます。 定義する場所は見やすいところで、ということですね。 ありがとうございます。 おかげさまで、今無事に動作いたしました。大変助かりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問