雙方法同步計算中
試驗原始數據工作表
修改「檢體序號」時系統會自動辨識檢體類別。亦可手動在選單中微調。
Formaldehyde Quantitative Analysis System (Spectrophotometry & HPLC)
修改「檢體序號」時系統會自動辨識檢體類別。亦可手動在選單中微調。
| # | 分析日期 | 檢體序號 | 檢體類別 | 檢液理論濃度 (μg/mL) |
檢體理論含量 (mg/kg) |
取樣重量 M (g) |
定容體積 V (mL) |
分光吸光值 (550 nm) |
HPLC 積分面積 (425 nm) |
操作 |
|---|
所有標準曲線相關係數 r、ICV 相對誤差、QC/QCr 回收率與平行樣 SPL/SPLr RPD 均符合規範標準。
| 分析方法 | 空白試驗 (BLK) | ICV 檢液濃度 | ICV 相對誤差 | QC 回收率 | QCr 回收率 | QC/QCr 平均回收率 | QC/QCr RPD | SPL/SPLr RPD | 品管綜合判定 |
|---|
每個檢體均先扣除 H2O (ZERO) 吸收值後,以校正後吸光值進行線性擬合計算。
| 分析日期 | 檢體序號 | 檢體類別 | 原始吸光值 | 校正後吸光值 | 檢液濃度 C (μg/mL) | 取樣量 (g) | 定容量 (mL) | 檢體含量 (mg/kg) | 最終報告結果 |
|---|
直接以訊號積分面積進行標準曲線擬合(不扣除 H2O 吸收值)。
| 分析日期 | 檢體序號 | 檢體類別 | 訊號積分面積 | 檢液濃度 C (μg/mL) | 取樣量 (g) | 定容量 (mL) | 檢體含量 (mg/kg) | 最終報告結果 |
|---|
Formaldehyde Analysis & QA System - Version Log
基礎單一分光光度法數據線上計算、線性擬合與 CSV 輸入匯出功能。
上傳天平秤重、分光光度計或 HPLC 數據照片,系統自動擷取數據並帶入
💡 API Key 僅暫存在此瀏覽器分頁,不會寫入 D1。請先按「測試連線」確認金鑰有效。
設定 Google Apps Script Web App URL 實現每日數據自動寫入歷史雲端庫
部署步驟:開啟 Google 試算表 → 點選選單「擴充功能」 → 「Apps Script」 → 清空原內容並貼上以下程式碼 → 點擊右上「部署」 → 「新增部署」 → 選擇「網頁應用程式 (Web App)」 → 將誰可以存取設為「所有人 (Anyone)」 → 複製獲得的 Web App 網址貼於上方!
function doPost(e) {
try {
var data = JSON.parse(e.postData.contents);
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("甲醛檢驗歷史紀錄") || ss.insertSheet("甲醛檢驗歷史紀錄");
// 建立表頭
if (sheet.getLastRow() === 0) {
sheet.appendRow([
"同步時間", "分析日期", "檢體序號", "檢體類別",
"理論濃度(μg/mL)", "理論含量(mg/kg)", "取樣重量(g)", "定容體積(mL)",
"分光吸光值", "HPLC面積", "分光計算濃度", "分光計算含量",
"分光結果", "HPLC計算濃度", "HPLC計算含量", "HPLC結果"
]);
sheet.getRange(1, 1, 1, 16).setFontWeight("bold").setBackground("#f1f5f9");
}
var timestamp = new Date().toLocaleString("zh-TW", {timeZone: "Asia/Taipei"});
data.rows.forEach(function(r) {
sheet.appendRow([
timestamp,
r.date || data.date,
r.id,
r.type,
r.conc_theory !== null && r.conc_theory !== undefined ? r.conc_theory : "",
r.content_theory !== null && r.content_theory !== undefined ? r.content_theory : "",
r.weight !== null && r.weight !== undefined ? r.weight : "",
r.volume !== null && r.volume !== undefined ? r.volume : "",
r.spectro_abs !== null && r.spectro_abs !== undefined ? r.spectro_abs : "",
r.hplc_area !== null && r.hplc_area !== undefined ? r.hplc_area : "",
r.conc_calc !== undefined && r.conc_calc !== null ? r.conc_calc : "",
r.content_calc !== undefined && r.content_calc !== null ? r.content_calc : "",
r.final_text || "",
r.hplc_conc_calc !== undefined && r.hplc_conc_calc !== null ? r.hplc_conc_calc : "",
r.hplc_content_calc !== undefined && r.hplc_content_calc !== null ? r.hplc_content_calc : "",
r.hplc_final_text || ""
]);
});
return ContentService.createTextOutput(JSON.stringify({result: "success"}))
.setMimeType(ContentService.MimeType.JSON);
} catch(err) {
return ContentService.createTextOutput(JSON.stringify({result: "error", error: err.toString()}))
.setMimeType(ContentService.MimeType.JSON);
}
}