You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否制作整合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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 05:44:51