// =====================================================
// 入熱パス間記録作成 — Google Apps Script
// =====================================================
// 【設定手順】
// 1. Google スプレッドシートを新規作成
// 2. メニュー「拡張機能」→「Apps Script」を開く
// 3. このコードを全選択して貼り付け
// 4. メニュー「デプロイ」→「新しいデプロイ」
// 5. 種類:「ウェブアプリ」、実行ユーザー:「自分」、
// アクセスできるユーザー:「全員」を選択して「デプロイ」
// 6. 表示されたWebアプリのURLをHTMLアプリに設定
// =====================================================
var SHEET_NAME_RECORDS = '溶接記録';
var SHEET_NAME_CONDITIONS = '作業条件';
function doPost(e) {
var result = { status: 'error', message: '' };
try {
var data = JSON.parse(e.postData.contents);
var ss = SpreadsheetApp.getActiveSpreadsheet();
if (data.type === 'pass') {
// パス記録をシートに書き込む
writePassRecord(ss, data);
result = { status: 'ok', message: 'パス記録を保存しました' };
} else if (data.type === 'condition') {
// 作業条件をシートに書き込む
writeCondition(ss, data);
result = { status: 'ok', message: '作業条件を保存しました' };
} else if (data.type === 'clear') {
// 記録のクリア
clearRecords(ss);
result = { status: 'ok', message: 'クリアしました' };
}
} catch (err) {
result = { status: 'error', message: err.toString() };
}
return ContentService
.createTextOutput(JSON.stringify(result))
.setMimeType(ContentService.MimeType.JSON);
}
function doGet(e) {
// 接続確認用
return ContentService
.createTextOutput(JSON.stringify({ status: 'ok', message: '接続OK' }))
.setMimeType(ContentService.MimeType.JSON);
}
// ── パス記録シートへの書き込み ──
function writePassRecord(ss, data) {
var sheet = ss.getSheetByName(SHEET_NAME_RECORDS);
if (!sheet) {
sheet = ss.insertSheet(SHEET_NAME_RECORDS);
// ヘッダー行
var headers = [
'記録日時', 'パス#', '電流(A)', '電圧(V)', '速度(mm/min)',
'入熱(kJ/mm)', 'パス間温度(°C)', '判定', '時刻',
'溶接技能者', '記録者', '材質', 'ワイヤ種類', 'ワイヤ径(mm)', '溶接機', '温度測定器'
];
sheet.appendRow(headers);
sheet.getRange(1, 1, 1, headers.length)
.setFontWeight('bold')
.setBackground('#E85D24')
.setFontColor('#ffffff');
sheet.setFrozenRows(1);
sheet.setColumnWidth(1, 150);
}
var now = new Date();
var row = [
Utilities.formatDate(now, 'Asia/Tokyo', 'yyyy/MM/dd HH:mm:ss'),
data.passNo,
data.I,
data.V,
data.v,
data.Qmm,
data.ipTemp || '',
data.ok ? 'OK' : 'NG',
data.time || '',
data.welder || '',
data.recorder || '',
data.material || '',
data.wireType || '',
data.wireDia || '',
data.machine || '',
data.thermometer || ''
];
sheet.appendRow(row);
// 判定セルに色付け
var lastRow = sheet.getLastRow();
var judgeCell = sheet.getRange(lastRow, 8);
if (data.ok) {
judgeCell.setBackground('#E1F5EE').setFontColor('#0F6E56');
} else {
judgeCell.setBackground('#FCEBEB').setFontColor('#791F1F');
}
}
// ── 作業条件シートへの書き込み ──
function writeCondition(ss, data) {
var sheet = ss.getSheetByName(SHEET_NAME_CONDITIONS);
if (!sheet) {
sheet = ss.insertSheet(SHEET_NAME_CONDITIONS);
} else {
sheet.clearContents();
}
var now = new Date();
var rows = [
['入熱パス間記録', ''],
['記録日時', Utilities.formatDate(now, 'Asia/Tokyo', 'yyyy/MM/dd HH:mm:ss')],
['', ''],
['溶接技能者', data.welder || ''],
['記録者', data.recorder || ''],
['', ''],
['テストピース材質', data.material || ''],
['溶接ワイヤ種類', data.wireType || ''],
['溶接ワイヤ径(mm)', data.wireDia || ''],
['溶接機', data.machine || ''],
['温度測定器', data.thermometer || '']
];
rows.forEach(function(row) { sheet.appendRow(row); });
sheet.getRange(1, 1, 1, 2).setFontWeight('bold').setFontSize(13);
sheet.getRange(1, 1).setFontColor('#E85D24');
sheet.setColumnWidth(1, 160);
sheet.setColumnWidth(2, 260);
}
// ── 記録クリア ──
function clearRecords(ss) {
var sheet = ss.getSheetByName(SHEET_NAME_RECORDS);
if (sheet && sheet.getLastRow() > 1) {
sheet.deleteRows(2, sheet.getLastRow() - 1);
}
}