web-dev-qa-db-ja.com

更新されたデータをGoogleスプレッドシートの新しい列に追加する方法

= GOOGLEFINANCEを使用して、銘柄記号のある列Aを読み取り、右側の列に価格を入力するGoogleスプレッドシートアプリを作成しています

これは毎日更新され、AとBの間の列にB1の日付コードで追加されます。

更新されるたびに、新しいデータが追加されるのではなく、データがコピーされます。値自体を入力するのではなく、数式自体をスプレッドシートに追加しているようです。

screen shot

ここに私のコードがあります

function myFunction() {
  SpreadsheetApp.getActiveSheet().insertColumns(2);
  SpreadsheetApp.getActiveSheet().getRange('B1').setValue('=now()');
  SpreadsheetApp.getActiveSheet().getRange('B2:B10').setValue('=iferror(GOOGLEFINANCE(A2:A10,"price"),"")');
}
2
Michael Smith

更新されるたびに、新しいデータが追加されるのではなく、データがコピーされます。値自体を入力するのではなく、数式自体をスプレッドシートに追加しているようです。

私が正しく理解していれば、値を更新し続けるのではなく、列が追加されたときの価格の「スナップショット」を列に保持してほしいと思います。

これを行うには、式をその時点で計算された値に置き換えて値を「フリーズ」します。

// select the range you want to "freeze":
var range = SpreadsheetApp.getActiveSheet().getRange('B:B');

// replace the cell formulas with the calculated values:
range.setValues(range.getValues());

GOOGLEFINANCE関数を使用してこれを手動でテストし、関数を数値として現在の価格に置き換えました。これを関数の最後に追加して、取得後に価格を「凍結」することができます。

別の解決策は、GOOGLEFINANCE関数で start_dateパラメーター を使用することです。現在の日付を値として取得し、それをstart_dateとして式に渡すと、その日付の価格が常に取得されます。

2
Christopher Su