1

以下についてのガイダンスを求めています。

ユーザーが Formstack フォームを送信 -> フォーム エントリが Google スプレッドシートの行にデータを入力 -> 変数を定義する列ヘッダーを使用して、その送信 (現在はシート内の行) のドキュメント マージの実行をトリガー -> 送信済み経由でマージされたドキュメントをユーザーに電子メールで送信電子メールアドレス。

私のドキュメントでは、変数の多くを条件付きで処理する機能が必要です (フォームの応答に基づく if/then 条件付きテキスト)。Ultradoc というアプリで遊んだことがあります。これは、Google ドキュメントでの変数の処理に最適で、条件などをサポートしています。

ただし、問題は、1 行のデータを選択する方法がわからないことです。むしろ、各列のすべてに対してマージを実行するように設計されています。

1 つのアイデアは、その新しい ROW を取得し、何らかの方法で 2 行のシート (ヘッダー + 送信された行) のように見せるスクリプトを実行することです?? どういうわけか他の行を非表示にしますか? これはひどく不器用に思えます。このようなものにアプローチする正しい方法は何ですか?

前もって感謝します

4

1 に答える 1

2

実際、これにはサードパーティのアプリは必要ありません。フォームを Google フォームとして作成し、スクリプトを作成してフォーム送信時に実行します。

フォームに入力された値を取得するには、フォーム送信をパラメーターとして関数に渡します。function processForm(e){

e.valuesフォーム内のデータを取得するには、配列にアクセスします。フォームの一番上のアイテムから始まる、ゼロ インデックスです。

送信されたデータを変数に格納する

var name = e.values[0];
var email = e.values[1];
// and so on...

検証またはドキュメント処理を実行します。

テンプレート ドキュメントのコピーを作成する

var copyId   = DocsList.getFileById("templateDocID")
            .makeCopy(docName+' from '+name) //or whatever you wanted to call the resulting document
            .getId();
var copyDoc = DocumentApp.openById(copyId);
var copyBody = copyDoc.getActiveSection();

テンプレート内のテキストを置き換える

copyBody.replaceText("NAME", name);
copyBody.replaceText("EMAIL", email);
// and so on...

ドキュメントをユーザーに送信します (私のアプリケーションでは、pdf として送信しましたが、好きなように送信できます)

copyDoc.saveAndClose();
var pdf = DocsList.getFileById(copyId).getAs("application/pdf");
MailApp.sendEmail(email, copyDoc.getName(), "Here's your document", {attachments:pdf});
DocsList.getFileById(copyId).setTrashed(true);
于 2012-11-19T20:22:59.490 に答える