Googleフォームの回答データを、印刷用シートへ取り込むGASコードです。
未取込分だけを追加するため、同じデータの重複取込を防げます。
コードが長いため、このページでは一部のみ表示しています。
全文コードは下のリンクからダウンロードしてください。
このコードでできること
・フォーム回答シートから未取込データだけ取得
・印刷用シートへ作業報告書データを追加
・報告番号をR0001形式で自動採番
・開始時間と終了時間から作業時間を計算
・印刷用シートA列にチェックボックスを設定
・フォーム回答シートに「取込済み」を記録
使用するシート
このコードでは、次の2つのシートを使用します。
・フォームの回答 1
・印刷用シート
シート名が違う場合は、コード内のシート名を変更してください。
GASコード
GASコード(一部抜粋)
function importFormResponsesToPrintSheet() {
const formSheetName = 'フォームの回答 1';
const printSheetName = '印刷用シート';
const importStatusCol = 13;
const importedText = '取込済み';
const ss = SpreadsheetApp.getActiveSpreadsheet();
const formSheet = ss.getSheetByName(formSheetName);
const printSheet = ss.getSheetByName(printSheetName);
if (!formSheet) {
throw new Error('フォーム回答シートが見つかりません。');
}
if (!printSheet) {
throw new Error('印刷用シートが見つかりません。');
}
const lastRow = formSheet.getLastRow();
if (lastRow < 2) {
Browser.msgBox('取込対象のデータがありません。');
return;
}
const formData = formSheet.getRange(2, 1, lastRow - 1, 13).getValues();
let reportNumber = getNextReportNumber(printSheet);
const outputData = [];
const importedRows = [];
for (let i = 0; i < formData.length; i++) {
const row = formData[i];
const workDate = row[1];
const workerName = row[2];
const siteName = row[3];
const importStatus = row[12];
if (importStatus === importedText) {
continue;
}
if (!workDate && !workerName && !siteName) {
continue;
}
const reportId = 'R' + String(reportNumber).padStart(4, '0');
const workTime = calculateWorkTime(row[5], row[6]);
outputData.push([
false,
reportId,
workDate,
workerName,
siteName,
row[4],
row[5],
row[6],
workTime,
row[7],
row[8],
row[9],
row[10],
row[11]
]);
importedRows.push(i + 2);
reportNumber++;
}
if (outputData.length === 0) {
Browser.msgBox('未取込データはありません。');
return;
}
const startRow = printSheet.getLastRow() + 1;
printSheet.getRange(startRow, 1, outputData.length, outputData[0].length).setValues(outputData);
printSheet.getRange(startRow, 1, outputData.length, 1).insertCheckboxes();
importedRows.forEach(function(rowNumber) {
formSheet.getRange(rowNumber, importStatusCol).setValue(importedText);
});
Browser.msgBox(outputData.length + '件のデータを印刷用シートへ取り込みました。');
}
このページでは、メイン処理のみ掲載しています。
報告番号を取得する関数や、作業時間を計算する関数も必要です。
全文コードは、下のリンクからダウンロードしてください。
コードダウンロード
このコードは少し長いため、全文はダウンロード形式で配布しています。
コピペで使う場合は、こちらのコードを利用してください。
▶ GASでフォーム回答データを印刷用シートへ取り込むコード
カスタマイズ例
パターン①:シート名を変更する
使用しているシート名が違う場合は、次の部分を変更します。
const formSheetName = 'フォームの回答 1';
const printSheetName = '印刷用シート';
例:
const formSheetName = '作業報告書回答';
const printSheetName = '印刷データ';
パターン②:取込済みの文字を変更する
M列に入力する文字を変更できます。
const importedText = '取込済み';
例:
const importedText = '済';
よくあるエラー
フォーム回答シートが見つかりません
対処法
・シート名がコードと一致しているか確認
・全角、半角、スペースの違いを確認
未取込データはありません
対処法
・M列に「取込済み」が入っていないか確認
・フォーム回答シートに新しい回答があるか確認
初回実行時の注意点
初めて実行すると、Googleの承認画面が表示されます。
これはエラーではありません。
スプレッドシートを操作するために必要な確認です。
画面の案内に従って承認してください。
使う場面
このコードは、作業報告書システムの準備で使います。
Googleフォームに集まった回答を、印刷やPDF作成に使いやすい形へ整理します。
次の工程で、チェックした作業報告書だけを帳票化できます。
関連記事
▶ 【自動入力の準備】印刷用の作業報告書シートを作成する方法
▶ Googleフォームの回答データを使って作業報告書へ内容を入力する方法
▶ GASでチェックした作業報告書を帳票作成してPDF保存するコード
▶ AIにフォーム回答データを印刷用シートへ取り込む機能を作らせてみた結果
詳しい使い方は、こちらの手順書記事で解説しています。

コメント