Google ドキュメント の自動作成! / Google スプレッドシート & Google フォーム
という動画をアップしていました。
最近、コメントや個別でご連絡をいただくこともあり、とても嬉しいです!
いつもありがとうございます🙇♂️
こんなプログラム作って欲しいとか、こんなことできたらいいな?的なことがあれば教えてください!
勉強しながら作ります💪✨
まずは Google ドキュメントの自動発行
流れは、
テンプレートとして Google ドキュメント の雛形を作成
Google スプレッドシート に必要事項を入力
実行
テンプレートに従った Google ドキュメント を作成
PDFに変換
任意の相手にメールを送る
という感じです。
プログラムはこんな感じ。
// フォルダの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 フォーム からドキュメントを発行する
基本的にやっていることは同じです。
流れは、
テンプレートとして Google ドキュメント の雛形を作成
Google フォーム に必要事項を入力
実行
テンプレートに従った Google ドキュメント を作成
PDFに変換
任意の相手にメールを送る
プログラムはこんな感じ
/*---- 初期設定ここから ----*/
// フォルダの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になって、学校ごとの現状に合わせてカスタムしていただければと思います‼️