Googleスプレッドシートで別のシートへの参照を自動更新するにはどうすればよいですか?


19

外部アプリケーションを使用して、Googleスプレッドシートにデータを入力しています。このワークブックはIMPORTRANGE(spreadsheet_key, range_string)、データを操作および解釈する別のワークブック(関数付き)によって参照されます。私の問題は、参照されているワークブックを個人的に変更するたびに、参照するワークブックは正常に更新されるが、外部アプリケーションがそれを変更するたびに更新されないことです。

「スプレッドシートの設定」を編集して、毎分、変更ごとに再計算が行われるようにしました。さらに、Google Chromeに1時間ごとにページを自動更新する拡張機能もインストールしました。ただし、参照されているワークブックからデータは再インポートされません。数式を新しいセルにコピーしても、データは再インポートされません。

Googleスプレッドシートをトリガーしてデータを再インポートするために、参照ワークブックに対してできることはありますか?

編集:明確にするために、現在、外部アプリケーションによって入力されたデータを含む1つのワークブック(「ソースシート」と呼びます)と、IMPORTRANGE機能を備えた別のワークブック(「参照シート」と呼びます)を持っています。IMPORTRANGE「参照シート」の関数によって表示されるデータには、「ソースシート」を最後に個人的に編集したため、外部アプリケーションによって入力されたデータは含まれません。また、両方のワークブックが新しいGoogleスプレッドシートを使用しています。

編集:また、この質問は、Googleスプレッドシートのセルを別のドキュメントのセルにリンクするにはどうすればよいですか?なぜなら、その質問に対する解決策として与えられた関数を使用して、スプレッドシートからデータをインポートしているからです。問題は、データをインポートする方法ではなく、データのソースを更新する方法です。私の想定では、Googleがこれを処理してくれますが、「参照シート」のデータは更新されず、更新を取得する唯一の方法は、「ソースシート」に物理的に移動することです。 「自分で編集します。


私はそれがどのように動作するかの詳細を認識していないんだけど、私は次のように使用しています:ifttt.com/google_drive
tlewis3348

@pnuts「正しいバージョンがソースとして使用されていることを確認する」ことであなたが意味することを説明できますか?両方のシートの設定が毎分更新されるように設定されており、タブは毎分更新されるように設定されています。どのように、どこで、どのシートでソースを更新しますか?
tlewis3348

@pnutsさて、データはseparate workbook大丈夫です。それはちょうどで入力したように、すべての出演から、それが見えます。
tlewis3348

はい、これは新しいGoogleスプレッドシートです。1つのブックには追加されたデータが表示されますが、他のブックには表示されません。明確にするために、これを元の質問に追加します。
tlewis3348

回答:


14

私は同じ問題に苦しんでいます。代わりに、カスタム関数を書くのは、私はに別のクエリ文字列を追加するspreadsheet_urlにはIMPORTRANGE、ページが更新されるたびに、Googleはそれが新しいスプレッドシートからデータをフェッチするために必要と考えていることを期待して。URLを毎回一意にするために、新しいタイムスタンプを追加するだけです。それは露骨なハックですが、私にとっては多くのシートで機能しています。

私の式は以前は次のように見えました。

=IMPORTRANGE("https://docs.google.com/spreadsheets/d/123123123123/edit#gid=1816927174","'Sheet1'!A1:B25")

そして今、それは次のようになります:

=IMPORTRANGE("https://docs.google.com/spreadsheets/d/123123123123/edit#gid=1816927174"&"?"&now(),"'Sheet1'!A1:B25")

更新:

Googleはnow()Insideを許可しなくなったため、このメソッドは機能しなくなりましたimportrange()。以下のヒューからのコメントを参照してください。


6
同じことをしようとすると、この答えに出会いました。Googleが作成したように見えるため、now()、rand()、およびrandbetween()はimportrange()呼び出し内で使用できません。
ヒュー

スプレッドシートを毎分更新するように設定した場合、数式も更新され、新しいデータを取得しますか(利用可能な場合)。
ニキル・サフ

5

以下は、このWeb Appsの回答の Jimmyからのものです。

  1. 両方のスプレッドシート=now()で、ランダムなセルに方程式を挿入します。Z1
  2. 両方のスプレッドシートに、他のスプレッドシートの=importrange()機能を参照する機能を挿入しますnow
  3. スプレッドシートの設定に移動し、毎分再計算することを選択します。

=now()関数、このスレッドの現在のURLトリック、または設定された間隔でランダムテキストを挿入するAppsスクリプトを使用するなど、他の多くの提案を試みましたが、ソースシートの手動編集を除き、importrangeを強制的に更新することはありませんでした。



4

私が見つけた最も簡単な方法はif周りに簡単な声明を出すことimportrangeです。

B1 = Sheet ID
B2 = Sheet Name and Range
B3 = Now()
=if (B3> now()-1, IMPORTRANGE(B1,B2),)

これは毎回機能します。


私はあなたのソリューションを実装しようとしましたが、B3の使用方法がわかりません。あなたはB3 = Now()と言っています=if (Now() > now()-1, IMPORTRANGE(B1,B2),)
ジンファンデルメルウェ

3

日付スタンプの回避策は私にとってはうまくいかないようです-日付スタンプとrand関数の使用は許可されていないという明示的な注意事項があります。

私の非常にハックな回避策は、セルを削除してからctrl + zを押すことです。毎回強制的に更新されます。このonopenをスクリプト化するのは簡単で、特定の時間間隔でデータを最新に保つのは簡単です。


2

手動のセル更新をシミュレートし、外部スプレッドシートで変更を開始する簡単なハックを見つけました。

  1. 次のようなカスタム関数を作成しました:

    // Hack function used just to simulate a manual update
    function hack(value) {
      var list = []
      list.push(value);
      return list;
    }
    
  2. 次に、私のシートでこのように呼び出します:

    =arrayformula(hack(tab!B1))
    

    どこtab!B1私は、コードによって変更細胞の一つです。


これは手動のセル更新をどのようにシミュレートしますか?
-haemse

2

または...単純なスクリプトを作成し、最初に値cero(0)を指定してから、式を戻し、これでトリックを実行できます。

  var cell = sheet.getRange("B1:B1"); //SHEET TO INSERT VALUE
  cell.setFormula("=0");
   Utilities.sleep(2000); //JUST TO GIVE TIME TO UPDATE (OPTIONAL)
  var cell = sheet.getRange("B1:B1");
  cell.setFormula("=ImportRange(\"YOUR_SHEET_ID\",\"RANGE_TO_INSERT\")");  

ユーザーが.... 2秒間ゼロを見ていないので、さらに良いcell.setFormulaは、(「=」&cell.getValue());,だろう
トニーBenBrahim

1

カスタム関数を備えたAppsスクリプトを使用して、問題を解決する方法を見つけることができました(詳細は こちら)。

=IMPORTRANGE(spreadsheet_url, range_string)スプレッドシートを次のように置き換え、=DynamicImportRange(spreadsheet_url, sheet_name, range)以下のコードを[ツール]-> [スクリプトエディター]-> [空のプロジェクト]に貼り付けると、機能するはずです(アプリスクリプトの作成の詳細については、こちらを参照してください)。

/**
Usage: =DynamicImportRange(spreadsheet_url, sheet_name, range)
Compare to: =IMPORTRANGE(spreadsheet_url, range_string)

Where the given arguments are placeholders that should be replaced
by arguments specific to your use-case.
 */
function DynamicImportRange(sheet_url, sheet_name, sheet_range) {
  var values = SpreadsheetApp.openByUrl(sheet_url).getSheetByName(sheet_name).getRange(sheet_range).getValues();
  return values
};

/**
*/
function RefreshSheet() {
  // Update the following two variables to suit your particular situation
  var sheet_name = "sample_sheet_sheet"
  var range = "A1"

  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheet_name);
  var formula1 = "Loading...";
  var formula2 = sheet.getRange(range).getFormula().toString().replace('"', '\"');
  // The following assumes that the data is being inserted into the sheet in the same
  // location as it is in in the source sheet.
  var form_range = formula2.split(",")[2].split("\"")[1];
  sheet.getRange(form_range).clear();
  sheet.getRange(range).setValue(formula1);
  Utilities.sleep(245);
  sheet.getRange(range).setValue(formula2);
};

シートを定期的に更新する場合は、[アプリスクリプト]ウィンドウで[リソース]-> [現在のプロジェクトのトリガー]に移動して、トリガーを設定できます。


4
ALLのGoogler END UP FOR HERE:スプレッドシートのカスタム関数を使用して(もう)他のスプレッドシートを開くことができませんSpreadsheetApp.openById()SpreadsheetApp.openByUrl()ここここを
フランチェスコヴァディカモ

1

now()ロードブロッキングの回避策として、スプレッドシートの設定を変更して1時間ごとに更新できます。

ファイル->スプレッドシート設定->計算

変更時および毎時」または「変更時および毎分」に再計算するようにシートを更新します。念頭に置いて、1分ごとに再計算を選択すると、スプレッドシートがハングアップする場合があります。


0

GoogleスプレッドシートアドオンSheetgoを使用して、別のシートから参照を自動的に更新できます。1か月あたり30のアップデートを無料で使用するか、有料のサブスクリプションを取得してさらにアップデートすることができます。このビデオでは、基本的な使用方法を説明しています。


2
サイトに「Install for Free」と巧妙に記載されていますが、1つの限定無料プランの後に3つの有料プランが続くアドオンであることに注意してください。価格設定ページへのリンクは、サイトの一番下にあります。
マリカミトソス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.