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

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

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

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

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

Q&A

2回答

775閲覧

【GAS】委任状をGoogle Apps Scriptを使って、半自動化したい。

okarin_555

総合スコア21

Google Apps Script

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

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

0グッド

0クリップ

投稿2019/07/03 00:16

前提・実現したいこと

Google spread sheetに入力したデータをGoogle Documentのテンプレートに挿入し、
それをドライブの指定のホルダーに格納したいと考えています。

発生している問題・エラーメッセージ

PDFが壊れており、閲覧は出来るものの、印刷等が出来ない。
Google ドキュメント上の用紙の大きさ、改行やフォントの大きさが無視され、反映されない。

エラーメッセージ

getAsなどを使うと、関数getAsが見つかりません。などのエラーが表示されます。

該当のソースコード

function toggleMenu() {
SpreadsheetApp.getUi()
.createMenu('追加メニュー') // メニューの追加
.addItem('委任状の作成', 'createYokohama') // 項目の追加

.addToUi();
}

function createYokohama(){
/Google SpreadSheet/
var mySheet=SpreadsheetApp.getActiveSheet(); //シートを取得
var rowSheet=mySheet.getDataRange().getLastRow(); //シートの使用範囲のうち最終行を取得

/Google Documentを取得/
var docBrowse = DocumentApp.openById("*********************************");
docBrowse.editAsText().setFontFamily('MS PMincho');
var strDoc = docBrowse.getBody().getText();//ドキュメントの内容を取得

Logger.log(docBrowse.getName());
Logger.log(docBrowse.getBody().getText());

for(var i=2;i<=rowSheet;i++){

var staffId = mySheet.getRange(i,1).getValue(); //スタッフID var staffName = mySheet.getRange(i,2).getValue(); //スタッフ名前 var strAddress = mySheet.getRange(i,3).getValue(); //住所 var strName = mySheet.getRange(i,4).getValue(); //自分の名前 var firstYear = mySheet.getRange(i,5).getValue();//生年月日:年 var firstMonth = mySheet.getRange(i,6).getValue();//生年月日:月 var firstDay = mySheet.getRange(i,7).getValue();//生年月日:日 var listContent = mySheet.getRange(i,8).getValue();//リスト項目 var secondYear = mySheet.getRange(i,9).getValue();//年号:令和**年 var secondMonth = mySheet.getRange(i,11).getValue();//年号:月 var secondDay = mySheet.getRange(i,12).getValue();//年号:日 var strAddress2 = mySheet.getRange(i,13).getValue();//該当スタッフの住所 //テンプレートに名前などの値を挿入する。 var strBody = strDoc .replace(/{住所}/,strAddress) .replace(/{氏名}/,strName) .replace(/{yyyy}/,firstYear) .replace(/{mm}/,firstMonth) .replace(/{dd}/,firstDay) .replace(/{リスト項目}/,listContent) .replace(/{YY}/,secondYear) .replace(/{MM}/,secondMonth) .replace(/{DD}/,secondDay) .replace(/{住所2}/,strAddress2); Logger.log(strBody); //ドキュメントの内容をログに表示

}

var folder = DriveApp.getFolderById('******************************');
var pdfName = [staffId,staffName];
folder.createFile(pdfName,strBody,"application/pdf");
Logger.log(folder.getName());

}

試したこと

getBlobなどを試したが同じようなエラー表記。
関数getBlobが見つかりませんといったメッセージが表示されます。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

hiroshi0240

2019/07/03 11:42

Google Documentのテンプレートに挿入しと書かれてますが、取得されてるのはtextデータなので、テンプレートの体を成していません。多分実現されたい事をやるには、テンプレート用のドキュメントファイルをコピーして新たなドキュメントファイルを作った物にデータ書き換えをするか、スプレッドシートでテンプレートを作成しておいて、入力箇所をセルで決めておく方法が現実的かと思います。処理的には後者がオススメですが、書かれていない前提条件を加味して検討し、質問を修正されるのが良いかと思います
okarin_555

2019/07/04 00:13 編集

ご回答、ありがとうございます!!盲点でした。複製をするという過程を完全に考慮していませんでした。GoogleDocumentの原本はファイル管理の面からは不要なのですが、複製をしないと、実現出来ないって事ですよね。複製しない場合は、テンプレートを書き換えてしまいますよね.....。 2番目の方法の方がシンプルな処理でできそうな感じがしますが、今回は、上の方法でやってみたいと思います。
guest

回答2

0

現象を見て思いつきで書いてます^^;

PDFが壊れており、閲覧は出来るものの、印刷等が出来ない。

Google ドキュメント上の用紙の大きさ、改行やフォントの大きさが無視され、反映されない。

状況から見て、正しく PDF は作成されているが、Google ドキュメントのテンプレートが適用されていない。と読めます。

追記依頼の hiroshi0240 さんの指摘を読むと「テンプレートの体を成していません」とあるので、適用されないのはそれが原因かと。

切り分けとしては、Google ドキュメントのテンプレートを使用した「差込後」のファイルが正しく作成できるか確認すると良いです。

投稿2019/07/03 23:20

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

okarin_555

2019/07/04 00:06

なるほど!!まずはPDFにする前に、Google documentの複製ができるかどうかを確かめてみます!!
退会済みユーザー

退会済みユーザー

2019/07/04 00:26

あー。。。多分、この回答、ハズレですね^^; コード読まずに回答しましたが、 folder.createFile(pdfName,strBody,"application/pdf") とあるので、閲覧できる PDF が元のテンプレートに沿った形でできているのであれば、Google ドキュメントへの差し込みはできている気がします。
guest

0

createFileでPDFができるとは知らなかったのですが、"application/pdf"のところMimeType.PDFとしたらどうでしょうか

投稿2019/07/03 23:06

編集2019/07/03 23:07
papinianus

総合スコア12705

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

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

okarin_555

2019/07/04 00:15

試してみます。ご回答ありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問