見出し画像

Google ドキュメント の自動作成! / Google スプレッドシート & Google フォーム

という動画をアップしていました。
最近、コメントや個別でご連絡をいただくこともあり、とても嬉しいです!

いつもありがとうございます🙇‍♂️

こんなプログラム作って欲しいとか、こんなことできたらいいな?的なことがあれば教えてください!
勉強しながら作ります💪✨

まずは Google ドキュメントの自動発行

流れは、

  1. テンプレートとして Google ドキュメント の雛形を作成

  2. Google スプレッドシート  に必要事項を入力

  3. 実行

  4. テンプレートに従った Google ドキュメント を作成

  5. PDFに変換

  6. 任意の相手にメールを送る

という感じです。

テンプレート
必要事項を入力するシート

プログラムはこんな感じ。

// フォルダのID
const FOLDER_ID = '';// ここに作成したドキュメントを保存するフォルダのIDを入れる
// テンプレートドキュメントのID
const DOCUMENT_ID = '';//テンプレートとなるドキュメントのIDを入れる

function criateDocuments() {//メイン関数
const ss = SpreadsheetApp.getActiveSheet();
const lastRow = ss.getLastRow();
for(row = 2;row<=lastRow;row++){
  if(ss.getRange(row,8).getValue()==''){
    var stamp = ss.getRange(row,1).getValue();//タイムスタンプを取得(今回はなくても動きます)
    var address = ss.getRange(row,2).getValue();//メールアドレスを取得
    var name = ss.getRange(row,3).getValue();//宛名を取得
    var proviso = ss.getRange(row,4).getValue();//但書を取得
    var count = ss.getRange(row,5).getValue();//物品の個数を取得
    var cost = ss.getRange(row,6).getValue();//金額を取得
    var title = ss.getRange(row,7).getValue();//請求書タイトル
    var todayStr = Utilities.formatDate(stamp, 'JST', 'yyyy-MM-dd');
    // IDからフォルダを取得
    const folder = DriveApp.getFolderById( FOLDER_ID );
    // テンプレートを取得
    const template = DriveApp.getFileById( DOCUMENT_ID );
    // ファイル名を指定
    const fileName = title;
    // フォルダにテンプレートのコピーを作成してファイル名をつける
    const newFile = template.makeCopy( fileName, folder );
    // 作成したファイルを開く
    const document = DocumentApp.openById( newFile.getId() );
    // ボディを取得
    let body = document.getBody();
    // 予約語をリプレース
    body.replaceText( '<<title>>', title );
    body.replaceText( '<<stamp>>', todayStr );
    body.replaceText( '<<count>>', count );
    body.replaceText( '<<cost>>', cost );
    body.replaceText( '<<name>>', name );
    body.replaceText( '<<proviso>>', proviso );
    document.saveAndClose();
    ss.getRange(row,9).setValue(newFile.getUrl());
    //宛先
    let To = address;
    // メール件名
    let Subject = title;
    // メール本文
    let Body = 'お世話になります。\n\n請求書を添付致します。\n\nご確認のほど、よろしくお願いいたします。';
    // ドキュメントのBlobオブジェクトをPDFにして取得
    let attachment = document.getBlob().getAs(MimeType.PDF);
    // 添付ファイルをつけてメールを送信
    GmailApp.sendEmail(To, Subject, Body, {attachments:[attachment]});
    }
  ss.getRange(row,8).setValue('発行済')
  }
}

IDって何?とか、実際にどんな動きをするのか気になる方は動画をご覧ください!


続いて、Google フォーム からドキュメントを発行する

基本的にやっていることは同じです。

流れは、

  1. テンプレートとして Google ドキュメント の雛形を作成

  2. Google フォーム  に必要事項を入力

  3. 実行

  4. テンプレートに従った Google ドキュメント を作成

  5. PDFに変換

  6. 任意の相手にメールを送る

これを、Google クラスルーム と連携させても楽しいですよね!!

プログラムはこんな感じ

/*---- 初期設定ここから ----*/
// フォルダのID
const FOLDER_ID = '';
// テンプレートドキュメントのID
const DOCUMENT_ID = '';

function criateDocuments(e) {//メイン関数
var values = e.values;//フォームの回答を取得
var stamp = values[0];//タイムスタンプを取得(今回はなくても動きます)
var name = values[1];//落とし物名を取得
var date = values[2];//日付を取得
var time = values[3];//時刻を取得
var place = values[4];//場所を取得
var image1 = values[6];//写真1を取得
var image2 = values[7];//写真2を取得
var memo = values[5];//メモを取得
image1 = image1.replace('https://drive.google.com/open?id=','');
image2 = image2.replace('https://drive.google.com/open?id=','');
let attachImg1 = DriveApp.getFileById(image1).getBlob();
let attachImg2 = DriveApp.getFileById(image2).getBlob();
// IDからフォルダを取得
const folder = DriveApp.getFolderById( FOLDER_ID );
// テンプレートを取得
const template = DriveApp.getFileById( DOCUMENT_ID );
// ファイル名を指定
const fileName = name;
// フォルダにテンプレートのコピーを作成してファイル名をつける
const newFile = template.makeCopy( fileName, folder );
// 作成したファイルを開く
const document = DocumentApp.openById( newFile.getId() );
// ボディを取得
let body = document.getBody();
// 予約語をリプレース
body.replaceText( '<<stamp>>', stamp );
body.replaceText( '<<name>>', name );
body.replaceText( '<<place>>', place );
body.replaceText( '<<date>>', date );
body.replaceText( '<<time>>', time );
body.replaceText( '<<memo>>', memo );
body.appendImage(attachImg1).setWidth(200).setHeight(200);
body.appendImage(attachImg2).setWidth(200).setHeight(200);
document.saveAndClose();

 // メール件名
 let Subject ='落とし物情報:'+name;
 // メール本文
 let Body = '落とし物がありました。\n\n詳細を添付致します。\n\nご確認のほど、よろしくお願いいたします。';
 // ドキュメントのBlobオブジェクトをPDFにして取得
 let attachment = document.getBlob().getAs(MimeType.PDF);
 // 送信先メールアドレスの不要なスペース削除
 let To = '';
   // 添付ファイルをつけてメールを送信
   GmailApp.sendEmail(To, Subject, Body, {attachments:[attachment]});
 }
作成したドキュメント

これの良いところは、画像を入れることができるとこですね!!

詳しい解説は動画をどうぞ!!笑

YouTube チャンネル

動画一覧

ポートフォリオ

AppSheet 関係のTweet


何かと0から1を作るのは大変だと思います。学校はどこも似たような問題課題に対応していると思います。それなのに、先生って自分だけで頑張ろうとするんですよね。ボクの資料やnoteが1になって、学校ごとの現状に合わせてカスタムしていただければと思います‼️