実現したいこと
google フォームで、自分に関連する項目をプルダウンメニューから選択し、送信ボタンを押すと、
同時にその自分に関連がある内容一覧がcsvファイルで自動でダウンロードできるようにしたいです。
自分に関連するところの一覧は、スプレッドシート上で、filter関数を使って、フィルタリングしてあるので、
そのシートをcsvで落とすだけです。
色々と調べて
前提
参考ホームページ
https://technical.verybestcbp.com/downloadcsv/
にたどり着きました。
とても簡単にCSV化、しかもexcelでの文字化けの解消までしてくれ、
スプレッドシートのGASでは実行できました。
CSVもダウンロードできました。
しかし、トリガーを使って、フォーム送信時に上記の関数を実行しようとしたら
Exception: Cannot call SpreadsheetApp.getUi() from this context.
** at DownloadCsvFile(コード:261:18)**
エラーが出ます。
該当のソースコード
// JSを用いてCSVファイルをダウンロードする
function DownloadCsvFile() {
// dialog.html でにHTMLファイルを生成する
// evaluate() は dialog.html 内の GAS を実行するため( <?= => の箇所)
const html = HtmlService.createTemplateFromFile("dialog").evaluate()
// 上記HTMLファイルをダイアログ出力
SpreadsheetApp.getUi().showModalDialog(html, "ダウンロード中です")
}
// -----以下はJS側で使用------
// シート名からファイル名を作成する
// return ファイル名
function getFileName() {
const sheets = SpreadsheetApp.openById('1BjZhmDbUFPICwhMZVcr2Wc90Uj52dMO9Sna8tCzuksY').getSheets();
const sheet7 = sheets[5];
const now = new Date()
const datetime = Utilities.formatDate( now, 'Asia/Tokyo', 'yyyyMMddHHmm')
// アクティブシート名+現在日時
return sheet7.getName() + '_' + datetime + '.csv'
}
// データの取得
function getData() {
// スプレッドシート上の値を二次元配列の形で取得
const sheets = SpreadsheetApp.openById('1BjZhmDbUFPICwhMZVcr2Wc90Uj52dMO9Sna8tCzuksY').getSheets();
const sheet7 = sheets[5];
// const values = sheet.getDataRange().getValues()
const values = sheet7.getDataRange().getDisplayValues()
// 二次元配列をCSV形式のテキストデータに変換
let dataArray = []
for (let i = 0; i < values.length; i++) {
dataArray.push(values[i].join(","))
}
return dataArray.join("\r\n"); // 改行コード
}
試したこと
スプレッドシートのGAS上からは実行できました。
トリガーでフォーム送信時にするとできなくなります。
フォームの側のGASに入れて実行しても同じようなエラーでした。
Exception: Cannot call SpreadsheetApp.getUi() from this context.
補足情報(FW/ツールのバージョンなど)
実は、上記のようなGASが2つあり、2つのフォームから、それぞれ別のシートをCSVでダウンロードできるようにしたいです。
そこで、
https://tgg.jugani-japan.com/tsujike/2021/05/gas-form4/
を参考に、分岐で実行できるようにしたいのですが、
その前段階のトリガーの段階で失敗します。
どうぞよろしくお願いします。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/08/31 08:46