能否制作整合Google Sheets多工作表数据的热泵COP时间线图表?
实现跨日期COP时间线图表方案
完全可行,你只需要新增一个汇总工作表整合所有日期的COP数据,再基于整合后的数据生成图表即可,具体步骤和代码如下:
1. 准备汇总工作表
创建一个专门用于展示跨日期趋势的工作表,命名为COP趋势汇总(可自行修改),用来存放所有日期的完整时间戳和对应COP值。
2. 编写数据整合脚本
这个脚本会遍历所有以日期命名的工作表(假设你的日工作表命名格式是YYYY-MM-DD,比如2024-05-20),提取每个工作表的时间、COP数据,并合并成带日期的完整时间戳:
function collectAllCOPData() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const summarySheet = ss.getSheetByName("COP趋势汇总") || ss.insertSheet("COP趋势汇总"); // 清空汇总表旧数据(保留表头) if (summarySheet.getLastRow() > 1) { summarySheet.getRange(2, 1, summarySheet.getLastRow()-1, 2).clearContent(); } const dateSheetRegex = /^\d{4}-\d{2}-\d{2}$/; // 匹配日期格式的工作表名 const sheets = ss.getSheets(); let allData = []; // 遍历所有工作表 sheets.forEach(sheet => { const sheetName = sheet.getName(); if (!dateSheetRegex.test(sheetName)) return; // 跳过非日期命名的工作表 const lastRow = sheet.getLastRow(); if (lastRow < 2) return; // 跳过无数据的工作表 // 提取当日时间(A列)和COP(K列)数据 const timeRange = sheet.getRange(2, 1, lastRow-1, 1).getValues(); const copRange = sheet.getRange(2, 11, lastRow-1, 1).getValues(); const date = new Date(sheetName); // 合并日期和时间,生成完整时间戳 for (let i = 0; i < timeRange.length; i++) { const timeStr = timeRange[i][0]; if (!timeStr) continue; // 跳过空行 const fullTimestamp = new Date(date); const [hours, minutes] = timeStr.split(":"); fullTimestamp.setHours(parseInt(hours), parseInt(minutes)); allData.push([fullTimestamp, copRange[i][0]]); } }); // 将整合后的数据写入汇总表并排序 if (allData.length > 0) { summarySheet.getRange(2, 1, allData.length, 2).setValues(allData); summarySheet.getRange(2, 1, allData.length, 2).sort({column: 1, ascending: true}); // 手动设置表头(如果汇总表是新建的) if (summarySheet.getRange(1,1).getValue() === "") { summarySheet.getRange(1,1).setValue("时间戳"); summarySheet.getRange(1,2).setValue("COP"); } } }
3. 编写跨日期图表生成脚本
基于汇总表的数据创建时间线面积图:
function createTimelineChart() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const summarySheet = ss.getSheetByName("COP趋势汇总"); if (!summarySheet || summarySheet.getLastRow() < 2) return; // 清空汇总表已有的旧图表(避免重复) const charts = summarySheet.getCharts(); charts.forEach(chart => summarySheet.removeChart(chart)); // 创建时间线面积图 const timelineChart = summarySheet.newChart().asAreaChart() .addRange(summarySheet.getRange(1, 1, summarySheet.getLastRow(), 2)) // 包含表头的完整数据范围 .setTitle('COP 跨日期趋势') .setXAxisTitle('时间') .setYAxisTitle('COP') .setPosition(4, 21, 0, 0) .setOption('hAxis.format', 'yyyy-MM-dd HH:mm') // 设置X轴时间显示格式 .setOption('legend.position', 'none') // 单条趋势线无需图例 .build(); summarySheet.insertChart(timelineChart); }
4. 设置自动触发
让汇总数据和图表自动更新,在Google Apps Script编辑器中设置定时触发器:
- 点击左侧「触发器」图标
- 添加新触发器,选择
collectAllCOPData函数,设置触发频率(比如每小时一次或每天固定时间) - 再添加一个触发器,选择
createTimelineChart,触发时间与数据收集同步
注意事项
- 确保日工作表命名严格遵循
YYYY-MM-DD格式,否则数据整合脚本会跳过这些工作表 - 若你的时间格式不是
HH:mm,需修改脚本中分割时间的逻辑 - 数据量较大时建议降低触发频率,避免超出GAS配额限制
内容的提问来源于stack exchange,提问作者Petit Bateau
相关产品推荐
相关产品推荐

