首页 > 解决方案 > 如何仅在“一个单元格”的谷歌表格中显示我的实时传感器数据?

问题描述

基本上,我使用连接到互联网的 m5stack 制作了一台称重机。我正在将我的实时数据导入 Google 电子表格,但是我不想要那么多数据。我只想在单个单元格中显示实时数据。(像一米?)

我尝试在应用程序脚本中编写代码,但发现很困难。

这是我将数据导入电子表格的代码:

function doPost(e) {
  // シート取得
  var spreadsheet = SpreadsheetApp.openById("***"),
  sheet = spreadsheet.getSheets()[0];
      
  var postjsonString = e.postData.getDataAsString();
  var postdata = JSON.parse(postjsonString);
 
  date = new Date();
  date_time =  Utilities.formatDate(date, 'JST', 'yyyy年M月d日 H時m分s秒'),
  sheet.appendRow([date_time,postdata.sensor.a]); 
 
}

标签: javascriptgoogle-apps-scriptgoogle-sheets

解决方案


我相信你现在的情况和你的目标如下。

  • 您的价值postdata.sensor.a是您期望的正确价值。
  • 您想将 的值放入postdata.sensor.a一个单元格,并且您想创建一个仪表类型的图表(这是来自like a meter?)。

修改点:

  • 根据您的脚本,我想建议使用 2 张纸。一个是日志表,它附加了sheet.appendRow([date_time,postdata.sensor.a]);作为日志的值。另一种是使用当前值显示仪表图的图表表。

当以上几点反映到您的脚本时,它变成如下。

修改后的脚本:

在使用此脚本之前,请设置您的电子表格 ID 以及您期望的仪表图的最大值和最小值。

function doPost(e) {
  var postjsonString = e.postData.getDataAsString();
  var postdata = JSON.parse(postjsonString);

  // I modified below script.
  var spreadsheet = SpreadsheetApp.openById("###");
  var logSheet = spreadsheet.getSheetByName("logSheet") || spreadsheet.insertSheet("logSheet");
  var chartSheet = spreadsheet.getSheetByName("chartSheet") || spreadsheet.insertSheet("chartSheet");

  // Put the values for the log.
  var date_time =  Utilities.formatDate(new Date(), 'JST', 'yyyy年M月d日 H時m分s秒');
  var values = [date_time, postdata.sensor.a];
  logSheet.appendRow(values);

  // Put the values for the chart.
  chartSheet.getRange("A1:B1").setValues([values]);

  // Create gauge chart if the chart is not existing in the chart sheet.
  var max = 100;  // <--- Please set the maximum value for your actual situation.
  var min = 0;  // <--- Please set the minumum value for your actual situation.
  var charts = chartSheet.getCharts();
  if (charts.length == 0) {
    var chart = chartSheet.newChart().setChartType(Charts.ChartType.GAUGE).addRange(chartSheet.getRange('B1')).setPosition(3, 1, 0, 0).setOption('height', 300).setOption('width', 300).setOption('title', 'Sample gauge').setOption('max', max).setOption('min', min).build();
    chartSheet.insertChart(chart);
  }
}
  • 在这个修改后的脚本中,当doPost运行时,值date_time, postdata.sensor.a被附加到“logSheet”的工作表中。此外,这些值被放入“chartSheet”工作表中的单元格“A1:B1”中。当这些工作表不存在时,将自动插入工作表。
  • 在“chartSheet”,当图表不存在时,使用看跌值创建仪表类型图表。

结果:

将上述脚本用于测试值时,会在“chartSheet”中获得以下结果。

在此处输入图像描述

笔记:

  • 当您修改 Web Apps 的脚本时,请将 Web Apps 重新部署为新版本。这样,最新的脚本就会反映到 Web 应用程序中。请注意这一点。
  • 这是一个简单的修改脚本。所以请根据您的实际情况进行修改。例如,如果您不想使用“logSheet”,请删除它的脚本。

参考:


推荐阅读