2

Googleスプレッドシートで自分のスプレッドシートに取り組んでいます。こちらからご覧いただけます

このページにアクセスすると、現在のシート (グラフ入力) に 2 つのグラフが表示されます。最初のものは埋め込まれたもので、最後または下のものは"Annotated Time Line". これで、スプレッドシートの行が編集されるたびにグラフを自動的に更新するスクリプトを (グーグルで) 取得しました。このフォームに入力を追加して送信すると、スプレッドシートにデータ/行を追加できます。入力は自動的にスプレッドシートに追加されます。

スクリプトonEdit関数)をトリガーまたは実行すると、最初または一番上のチャートのみが更新されます。しかし、2つ目以降は更新されていません。

コードは次のとおりです。

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 に答える