2

我正在谷歌电子表格上处理我的电子表格。你可以在这里参观

如果您访问该页面,您将在当前工作表中看到 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;
}

现在,我应该怎么做或做出什么改变才能让这两个图表正常工作?

谢谢,奥马尔谢里夫

4

2 回答 2

2

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

于 2012-07-18T15:18:36.407 回答
0

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

根据我在制作电子表格的副本中看到的内容,所有图表都在调用该函数时进行了处理。

于 2012-07-03T15:37:05.983 回答