油耗紀錄 Pro v2
雲端已同步
新增紀錄
歷史紀錄 (汽車) 最新排在最上方
| 日期 | 里程 (km) | 行駛 (km) | 油價 (元) | 公升數 (L) | 油耗 (km/L) | 刪除 |
|---|
目前沒有紀錄
年度統計分析
年度總里程
0 km
年度平均油耗
0.00 km/L
年度總公升數
0.00 L
年度總花費
0 元
每月平均油耗趨勢 (km/L)
每月行駛里程對比 (km)
Google Sheets 雲端雙向同步
您的部署 URL 已載入。本系統會將此網址與您的所有紀錄以金融級 AES-256 加密在本地保護,防範外流。🛠️ 最新 Apps Script 程式碼 (支援多工作表自動建立防呆)
請在試算表中貼上此代碼,並部署為「新版本」。程式會自動為您建立 Car 與 Motorcycle 兩份獨立工作表:
function doGet() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var result = {
car: [],
motorcycle: []
};
//---------------------------------
// 汽車分頁處理 (無工作表時自動新增)
//---------------------------------
var carSheet = ss.getSheetByName("Car");
if (!carSheet) {
carSheet = ss.insertSheet("Car");
carSheet.appendRow(["DATE","N.KM","NT/L","L"]);
}
var carValues = carSheet.getDataRange().getDisplayValues();
for (var i = 1; i < carValues.length; i++) {
if(!carValues[i][0] && !carValues[i][1]) continue;
result.car.push({
id: generateUUID(),
date: String(carValues[i][0]).trim(),
mileage: Number(String(carValues[i][1]).replace(/[^0-9.-]/g, '')) || 0,
price: Number(String(carValues[i][2]).replace(/[^0-9.-]/g, '')) || 0,
liters: Number(String(carValues[i][3]).replace(/[^0-9.-]/g, '')) || 0
});
}
//---------------------------------
// 機車分頁處理 (無工作表時自動新增)
//---------------------------------
var motorSheet = ss.getSheetByName("Motorcycle");
if (!motorSheet) {
motorSheet = ss.insertSheet("Motorcycle");
motorSheet.appendRow(["DATE","N.KM","NT/L","L"]);
}
var motorValues = motorSheet.getDataRange().getDisplayValues();
for (var i = 1; i < motorValues.length; i++) {
if(!motorValues[i][0] && !motorValues[i][1]) continue;
result.motorcycle.push({
id: generateUUID(),
date: String(motorValues[i][0]).trim(),
mileage: Number(String(motorValues[i][1]).replace(/[^0-9.-]/g, '')) || 0,
price: Number(String(motorValues[i][2]).replace(/[^0-9.-]/g, '')) || 0,
liters: Number(String(motorValues[i][3]).replace(/[^0-9.-]/g, '')) || 0
});
}
return ContentService.createTextOutput(JSON.stringify(result))
.setMimeType(ContentService.MimeType.JSON);
}
// 智慧 UUID 生成輔助函數
function generateUUID() {
try {
return Utilities.getUuid();
} catch(e) {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
}
}