スプレッドシートに小さなスクリプトを1回だけ貼り付けてデプロイします。Google Cloud Consoleの設定は不要です。
1
「価格調整の推移記録」スプレッドシートを開き、上部メニューの 「拡張機能」→「Apps Script」 をクリックします。
2
既存のコードをすべて削除し、以下のスクリプトを貼り付けて
「保存」(Ctrl+S)します。
function doGet(e) {
var sheetName = (e && e.parameter && e.parameter.sheet) ? e.parameter.sheet : '各物件単価';
try {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName(sheetName);
if (!sheet) throw new Error('シートが見つかりません: ' + sheetName);
var values = sheet.getDataRange().getValues();
return ContentService.createTextOutput(JSON.stringify({ values: values }))
.setMimeType(ContentService.MimeType.JSON);
} catch (err) {
return ContentService.createTextOutput(JSON.stringify({ error: err.message }))
.setMimeType(ContentService.MimeType.JSON);
}
}
function doPost(e) {
try {
var payload = JSON.parse(e.postData.contents);
var ss = SpreadsheetApp.getActiveSpreadsheet();
if (payload.action === 'update_master') {
var sheet = ss.getSheetByName(payload.sheetName || '各物件単価');
if (!sheet) throw new Error('マスタシートが見つかりません');
var colIdx = sheet.getLastColumn() + 1;
sheet.getRange(1, colIdx).setValue(payload.dateHeader);
payload.results.forEach(function(r) {
// 既存行から一致する物件名・日区分を探す
});
var values = sheet.getDataRange().getValues();
var lastProp = '';
var existingKeys = {};
for (var i = 1; i < values.length; i++) {
var propCell = values[i][1];
var dayType = values[i][2];
if (propCell && String(propCell).trim() !== '') lastProp = String(propCell).trim();
if (dayType !== '平日' && dayType !== '週末') continue;
var key = lastProp + '|' + dayType;
existingKeys[key] = i + 1; // 1-based row
}
var resultsMap = {};
payload.results.forEach(function(r) { resultsMap[r.propName + '|' + r.dayType] = r.newPrice; });
for (var key in resultsMap) {
if (existingKeys[key]) sheet.getRange(existingKeys[key], colIdx).setValue(resultsMap[key]);
}
// 新規物件を末尾追加
var nextRow = values.length + 1;
payload.results.forEach(function(r) {
var k = r.propName + '|' + r.dayType;
if (!existingKeys[k]) {
if (r.dayType === '平日') sheet.getRange(nextRow, 2).setValue(r.propName);
sheet.getRange(nextRow, 3).setValue(r.dayType);
sheet.getRange(nextRow, colIdx).setValue(r.newPrice);
existingKeys[k] = nextRow;
nextRow++;
}
});
}
if (payload.action === 'write_report') {
var name = '提案レポート_' + payload.runMonth;
var ws = ss.getSheetByName(name);
if (ws) ws.clearContents(); else ws = ss.insertSheet(name);
var rows = [payload.headers].concat(payload.data);
if (rows.length > 0) ws.getRange(1, 1, rows.length, rows[0].length).setValues(rows);
}
return ContentService.createTextOutput(JSON.stringify({ success: true }))
.setMimeType(ContentService.MimeType.JSON);
} catch (err) {
return ContentService.createTextOutput(JSON.stringify({ error: err.message }))
.setMimeType(ContentService.MimeType.JSON);
}
}
3
右上の 「デプロイ」→「新しいデプロイ」 をクリックします。
4
「種類の選択」で 「ウェブアプリ」 を選び、「アクセスできるユーザー」を 「全員」 に設定して 「デプロイ」 をクリックします。
※ Googleアカウントでの承認が求められたら「アクセスを許可」します。
5
表示された 「ウェブアプリのURL」(https://script.google.com/macros/s/.../exec)をコピーして、上の設定欄の「GAS Web App URL」に貼り付けます。その後 Step 1 の「読み込む」ボタンを押してください。