Skip to content

Googlepスプレッドシート連携コード

データベース連携のGoogleスプレッドシートの設定に使用するコードです。全体をコピーして、スクリプトエディタに貼り付けて下さい。その後、SpreadSheet 側の準備の手順(6)に戻ってください。

const TARGET_SHEET_NAME = '問い合わせ'; // 連携対象のシート名(必要に応じて変更)
const LOG_SHEET_NAME = 'Log'; // エラー記録用シート名(任意)
function doPost(e) {
const rawBody = (e && e.postData && typeof e.postData.contents === 'string') ? e.postData.contents : '';
if (!rawBody) {
return json({ success: false, message: 'No payload' }, 400);
}
try {
const postData = JSON.parse(rawBody); // name属性名がキーになる想定
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName(TARGET_SHEET_NAME);
if (!sheet) {
return json({ success: false, message: `Sheet '${TARGET_SHEET_NAME}' not found` }, 500);
}
const lastCol = sheet.getLastColumn() || 1;
const headers = sheet.getRange(1, 1, 1, lastCol).getValues()[0].map(h => String(h || '').trim());
const normalize = (v) => {
if (v === null || v === undefined) return '';
if (Array.isArray(v)) return v.join(', ');
if (typeof v === 'object') return JSON.stringify(v);
return String(v);
};
const row = headers.map(h => {
if (!h) return '';
return normalize(postData[h]);
});
sheet.appendRow(row);
return json({ success: true, message: 'ok' }, 200);
} catch (err) {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const logSheet = ss.getSheetByName(LOG_SHEET_NAME);
if (logSheet) {
const isoNow = Utilities.formatDate(
new Date(),
Session.getScriptTimeZone(),
"yyyy-MM-dd'T'HH:mm:ssXXX"
);
// 2列目はそのまま rawBody(JSON文字列)。3列目にエラーメッセージを記録
logSheet.appendRow([isoNow, rawBody, String(err)]);
}
return json({ success: false, message: String(err) }, 500);
}
}
function doGet() {
try {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName(TARGET_SHEET_NAME);
if (!sheet) {
return json({ success: false, message: `Sheet '${TARGET_SHEET_NAME}' not found` }, 500);
}
const lastCol = sheet.getLastColumn() || 1;
const headers = sheet.getRange(1, 1, 1, lastCol).getValues()[0].map(h => String(h || '').trim()).filter(Boolean);
const rows = Math.max(sheet.getLastRow() - 1, 0);
return json({
success: true,
message: 'ok',
sheet: sheet.getName(),
headers,
rows
}, 200);
} catch (err) {
return json({ success: false, message: String(err) }, 500);
}
}
// 共通: JSONレスポンス
function json(obj, statusCode) {
const out = ContentService.createTextOutput(JSON.stringify(obj)).setMimeType(ContentService.MimeType.JSON);
if (out.setStatusCode) out.setStatusCode(statusCode || 200);
return out;
}