3

Google Finance からデータを取得し、ドキュメントの複数のシートにデータを自動的に記録する関数を作成しようとしています。セルを編集するまで、常にテキストとして追加する関数として関数を追加することができないようです

function addLog() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var rows = sheet.getDataRange();
  var numRows = rows.getNumRows();
  var numLastRows = rows.getLastRow();

  sheet.appendRow(['2012/10/28','=b92','=c92','Log (auto)','','=index(GoogleFinance(C92,"price",A92);2;2)','','=h92','=i92','=j92','=k92']);


};

上のセル(この場合は92行目)を参照する方法がわかりませんでした:(

4

1 に答える 1

2

setFormula()ではなく メソッドを使用する必要がありますappendRow()。おそらく次のようなものです:

function addLog() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var numLastRow = sheet.getLastRow();

  //add a row at end if necessary
  if (sheet.getMaxRows() == numLastRow) sheet.insertRowAfter(numLastRow);

  sheet.getRange(numLastRow + 1, 2, 1, 10)
    .setFormulas([['=b' + numLastRow,
                  '=c' + numLastRow,
                  '',
                  '',
                  '=index(GoogleFinance(C' + numLastRow + ',"price",A' + numLastRow + ');2;2)',
                  '',
                  '=h' + numLastRow,
                  '=i' + numLastRow,
                  '=j' + numLastRow,
                  '=k' + numLastRow]]);
  sheet.getRange(numLastRow + 1, 1).setValue('2012/10/28');
  sheet.getRange(numLastRow + 1, 4).setValue('Log (auto)');
}

x 番目のシートから y 番目のシートまでこのアクションを実行するには (0 から始まるインデックスを使用)、最も効率的な方法は次のようになると思います。

function addAllLog() {
  var sheets = SpreadsheetApp.getActive().getSheets();
  var x = 1;
  var y = 34;
  for (var i = x; i <= y; i++) {
    addLog(sheets[i]);
  }
}

function addLog(sheet) {
  var numLastRow = sheet.getLastRow();

  //add a row at end if necessary
  if (sheet.getMaxRows() == numLastRow) sheet.insertRowAfter(numLastRow);

  sheet.getRange(numLastRow + 1, 2, 1, 10)
    .setFormulas([['=b' + numLastRow,
                  '=c' + numLastRow,
                  '',
                  '',
                  '=index(GoogleFinance(C' + numLastRow + ',"price",A' + numLastRow + ');2;2)',
                  '',
                  '=h' + numLastRow,
                  '=i' + numLastRow,
                  '=j' + numLastRow,
                  '=k' + numLastRow]]);
  sheet.getRange(numLastRow + 1, 1).setValue('2012/10/28');
  sheet.getRange(numLastRow + 1, 4).setValue('Log (auto)');
}
于 2012-10-28T21:38:22.347 に答える