如何通过谷歌电子表格应用程序的自定义代码更新或管理带注释的时间线图?



我正在谷歌电子表格上制作我的电子表格。你可以在这里访问它。

如果您访问该页面,您将在当前工作表中看到 2 个图表(图形输入)。第一个是嵌入式的,最后一个或下面的一个是"Annotated Time Line"。现在,我有一个脚本(通过谷歌搜索),每当编辑电子表格的行时自动更新图表。通过在此表单中添加和提交输入,您可以在电子表格中添加一些数据/行。输入将自动添加到电子表格中。

现在,当我触发或运行脚本onEdit函数)时,只有第一个或顶部图表会更新。但是第二个或以下一个没有更新。

这是代码:

function onEdit() {
  var s = SpreadsheetApp.getActiveSheet();
  var c = s.getCharts();
  for (var i in c) {
    var ch = c[i];
    var ranges = ch.getRanges();
    var mod = ch.modify();
    for (var j in ranges) {
      var range = ranges[j];
      mod.removeRange(range);
      var newRange = expandRange_(range);
      mod.addRange(newRange);
    }
    s.updateChart(mod.build());
  }
}
function rangeShouldExpand_(range) {
  var s = range.getSheet();
  var numCol = range.getNumColumns()
  var values = s.getSheetValues(range.getLastRow(), range.getColumn(), 2, numCol);
  for (var i = 0; i < numCol; i++) {
    if (!values[0][i] && !values[1][i] || !!values[0][i] && !!values[1][i]) {
      continue;
    } else {
      return false;
    }
  }
  return true;
}
function expandRange_(range) {
  var s = range.getSheet()
  var startRow = range.getRow();
  var startCol = range.getColumn();
  var numRows = range.getNumRows();
  var numCols = range.getNumColumns();
  while (rangeShouldExpand_(range)) {
    numRows++;
    range = s.getRange(startRow, startCol, numRows, numCols);
  }
  return range;
}

现在,我应该做什么或应该进行哪些更改才能使两个图表正常工作?

谢谢奥马尔·谢里夫

遗憾的是,

嵌入式图表功能目前仅适用于所有可用图表的未记录子集,其中可能不包括时间线图类型。您可以提交功能请求,以便在我们的问题跟踪器上更好地记录此功能。

您的脚本似乎按照设计的方式工作,这意味着图表会更新on edit",这意味着当用户访问工作表时。如果您在没有任何其他用户操作的情况下在表单提交时更新它,那么我建议您添加一个" on form submit "触发器以使用电子表格资源面板调用您的更新函数。

从我在我制作的电子表格副本上看到的内容来看,调用函数时会处理所有图表。

最新更新