お問い合わせ

    氏名

    メールアドレス

    件名

    メッセージ本文



    763万 キーワード

    2021年 検索パフォーマンス

    57.8万 人が訪問

    2021年 訪問ユーザー数

    WordPressのスキルアップはこちら!▶[click]
    いま、どうしてる? 誰でも検索できます

    【GoogleAppsScript】[1/2]スプレッドシートで今日の日付に一致した行番号の内容を毎日メールで自動送信するスクリプト

    GAS(グーグルアップススクリプト)
    この記事は約5分で読めます。
    「ワードプレスで未来を変える!」
    誰でも挑戦できます!!
    【未経験挑戦可!】スキルアップしたい!WordPressに挑戦したい!何かに挑戦して未来を変えたい!という方をお待ちしています↓↓

    例えば「毎日決まった時間にスプレッドシート上の今日の日付と一致した行番号の内容(今日の名言)をメールで自動送信したい」と思った場合にGAS(GoogleAppsScript)で実現する方法です。

    スクリプトエディタを起動する

    このあたりは、毎度おなじみのGoogleスプレッドシートを準備してツールから「スクリプトエディタ」を起動します。

    スクリプトエディタが立ち上がります。

    まずはスプレッドシートのデータ読み込み用変数をセットする

    このあたりも毎回ですが、まずはスプレッドシートのデータを読み込むための変数を準備します。※SPREADSHEET_IDのところは、開くスプレッドシートのIDをセットします。

    const spreadSheet = SpreadsheetApp.openById("SPREADSHEET_ID");
    const activeSheet = spreadSheet.getActiveSheet;
    const sheetName = '名言';
    const dataSheet = spreadSheet.getSheetByName(sheetName);

    それぞれの変数はこのような役割の感じです。※変数名は覚えやすい名前に随時改変ください。

    • spreadSheet … ファイルを読み込む
    • activeSheet … アクティブなシートを読み込む ※無くてもOK
    • sheetName … シート名を直接指定して読み込む
    • dataSheet … データのあるシートを読み込む ※前の変数とまとめてしまってもOK

    データ取得用の変数をセットする

    このような感じでデータを取得するための変数を準備します。

    let dRange = dataSheet.getDataRange();
    let lastRow = dataSheet.getLastRow();
    let lastCol = dataSheet.getLastColumn();
    let today = Utilities.formatDate( new Date(), 'Asia/Tokyo', 'yyyy/MM/dd');
    let todayCol;
    let getToday;
    • dRange … 表のデータを取得するための変数 ※データのRangeが入る。使わないかもしれない。
    • lastRow … 最終行の番号を知る ※ループ判定用
    • lastCol … 最終列の番号を知る ※使わないかもしれないが列側になった時用
    • today … 今日の日時を取得してyyyy/MM/dd形式に変換する
    • todayCol… 今日の行番号を取得 ※後で使う
    • getToday … 今日の日付を取得する ※後で使う

    送信先アドレス 件名 本文用の変数

    メール送信用の変数を準備します。

    // 送信先アドレス 件名 本文
    let toSend = "from.eguchi@gmail.com";
    let toSubject;
    let toBody;
    • toSend … 送信先のメールアドレス
    • toSubject … メールの件名用 ※固定でもOKですがひとまず空にしておく
    • toBody … メール本文用 ※後で追加する

    これで大体の下準備は完了かと思います。グローバル変数にセットしておきます。

    function sendMail()

    メール送信用の関数をセットします。名前は任意ですが「sendMail」のような感じがシンプルでよいのではと思います。

    あとは、下記のような感じでループを作ります。

    function sendMail() {
    
    //「今日の行番号」を取得する
    for (var i = 1; i <= lastRow; i++ ) {
     getToday = dataSheet.getRange(1,i).getValue();
     getToday = Utilities.formatDate( getToday, 'Asia/Tokyo', 'yyyy/MM/dd');
    
      if(getToday == today){
       todayCol = i;
       toSubject = dataSheet.getRange(i,2).getValue();
       toBody = dataSheet.getRange(i,3).getValue();
       
        GmailApp.sendEmail(toSend,toSubject,toBody);
      }
    

    何をやっているかというと…

    1. A列(getRange(i,1))が今日の日付(変数:today)と一致した時
    2. その行番号を取得する
    3. B列(getRange(i,2))の値を件名(toSubject)
    4. C列(getRange(i,3))の値を本文にセットする
    5. メール送信する
    6. 最終行まで行ってしまったら終了

    みたいな流れです。

    エラーが起きた時のために、念のためログもセットしておきます。

    console.log("todayCol:"+todayCol);
    console.log("getToday:"+getToday);
    console.log("lastCol:"+lastCol);
    console.log("dRange:"+dRange);
    console.log("toSend:"+toSend);
    console.log("toSubject:"+toSubject);
    console.log("toBody:"+toBody);

    スクリプトを実行してみる

    ひとまずスクリプトを実行します。いつものように「権限を確認」が表示されるのでGoogleアカウントに権限を与えます。

    実行してみます。

    Exception: The parameters…

    Exception: The parameters (String,String,String) don’t match the method signature for Utilities.formatDate.

    エラーが表示されました。

    don’t match the method signatureと言われます・・・。どうやら、Utilities.formatDateの中がダメなのかな?という感じです。

    中を関数で入れたりしているので、全て日付の状態に変更してみます。

    ダメでした。

    まとめ

    ここまでのところで、エラーが表示されてしまいスクリプトの実行が止まってしまいましたが、ここからうまく実行できるように修正を進めていきます。

    この続きについてはPART2の記事に書いていますので、ご参考ください😃

    Loading
    タイトルとURLをコピーしました