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;}