it-swarm.com.de

Wie kann ich Google Sheets dazu bringen, einen Verweis auf ein anderes Blatt automatisch zu aktualisieren?

Ich verwende eine externe Anwendung, um Daten in eine Google-Tabelle einzugeben. Diese Arbeitsmappe wird dann von einer separaten Arbeitsmappe referenziert (mit der Funktion IMPORTRANGE(spreadsheet_key, range_string)), die die Daten bearbeitet und interpretiert. Mein Problem ist, dass die referenzierende Arbeitsmappe immer dann aktualisiert wird, wenn ich die referenzierte Arbeitsmappe persönlich ändere. Wenn die externe Anwendung sie ändert, wird sie jedoch nicht aktualisiert.

Ich habe versucht, die "Tabellenkalkulationseinstellungen" so zu bearbeiten, dass jede Minute und bei jeder Änderung eine Neuberechnung erfolgt. Außerdem habe ich in Google Chrome eine Erweiterung installiert, die die Seite stündlich automatisch aktualisiert. Die Daten werden jedoch nicht erneut aus der Arbeitsmappe importiert, auf die verwiesen wird. Auch wenn ich die Formel in eine neue Zelle kopiere, werden die Daten nicht erneut importiert.

Kann ich die referenzierende Arbeitsmappe ändern, um Google Sheets zum erneuten Importieren der Daten zu veranlassen?

Bearbeiten: Zur Verdeutlichung habe ich derzeit eine Arbeitsmappe mit Daten, die von einer externen Anwendung eingegeben wurden (nennen Sie sie das "Quellblatt"), und eine andere Arbeitsmappe mit einer IMPORTRANGE -Funktion (nennen Sie es das "Referenzierungsblatt"). Die von der Funktion IMPORTRANGE im "Referenzierungsblatt" angezeigten Daten enthalten keine von der externen Anwendung eingegebenen Daten, da ich das "Quellblatt" zuletzt persönlich bearbeitet habe. Außerdem verwenden beide Arbeitsmappen die neuen Google Sheets.

Bearbeiten: Diese Frage ist auch nicht mit identisch. Wie verknüpfe ich eine Zelle in Google Spreadsheets mit einer Zelle in einer anderen Zelle? document? , da ich die als Lösung für diese Frage angegebene Funktion verwende, um Daten aus einer Kalkulationstabelle zu importieren. Das Problem ist nicht, wie die Daten importiert werden, sondern wie die Datenquelle aktualisiert wird. Ich gehe davon aus, dass Google dies für mich erledigt hätte, aber die Daten im "Referenzblatt" werden nicht aktualisiert, und ich kann sie nur finden, wenn ich physisch in das "Quellblatt" gehe "und bearbeite es selbst.

19
tlewis3348

Ich habe mit dem gleichen Problem zu kämpfen. Anstatt eine benutzerdefinierte Funktion zu schreiben, füge ich spreadsheet_url in IMPORTRANGE eine andere Abfragezeichenfolge hinzu, in der Hoffnung, dass Google bei jeder Aktualisierung der Seite glaubt, dass Daten aus einer neuen Tabelle abgerufen werden müssen. Ich füge einfach einen neuen Zeitstempel hinzu, um die URL jedes Mal eindeutig zu machen. Es ist ein eklatanter Hack, aber er hat bei mir auf vielen Blättern funktioniert.

Meine Formel sah früher so aus:

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

Und jetzt sieht es so aus:

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

Aktualisieren:

Diese Methode funktioniert nicht mehr, da Google now() innerhalb von importrange() nicht mehr zulässt. Siehe Kommentar von Hugh unten.

14
Sam Collins

Das Folgende kommt von Jimmy in diese Web Apps Antwort .

  1. Fügen Sie in beiden Arbeitsblättern eine =now() - Gleichung in eine zufällige Zelle ein, z. B. Z1.
  2. Fügen Sie in beide Arbeitsblätter eine Funktion =importrange() ein, die auf die Funktion now des anderen Arbeitsblatts verweist.
  3. Rufen Sie Ihre Tabellenkalkulationseinstellungen auf und wählen Sie die Option, jede Minute neu zu berechnen.

Ich habe viele andere Vorschläge ausprobiert, darunter die Funktion =now(), den Trick now URL in diesem Thread oder Apps Script, um zufälligen Text in einem festgelegten Intervall einzufügen Quellblatt.

5
Tony

Ich fand den einfachsten Weg, eine einfache if -Anweisung um importrange zu setzen.

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

Das funktioniert jedes Mal.

4
Brett Hawthorne

Die Problemumgehung für Datumsstempel scheint bei mir nicht zu funktionieren - es wird ausdrücklich darauf hingewiesen, dass die Verwendung von Datumsstempeln und Rand-Funktionen nicht zulässig ist.

Mein sehr hackiger Workaround ist, die Zelle zu löschen und dann Strg + Z zu drücken. Es erzwingt jedes Mal eine Aktualisierung. Es ist trivial, dieses Skript beim Öffnen oder in bestimmten Zeitintervallen auszuführen, um die Daten auf dem neuesten Stand zu halten.

3
Tom McGuinness

ODER ... Sie könnten ein einfaches Skript erstellen, indem Sie zuerst den Wert cero (0) und dann die Formel zurückgeben und dies tun:

  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
Samuel Félix

Ich fand einen einfachen Hack, um ein manuelles Zellen-Update zu simulieren und Änderungen in einer externen Tabelle zu starten.

  1. Erstellt eine benutzerdefinierte Funktion wie folgt:

    // Hack function used just to simulate a manual update
    function hack(value) {
      var list = []
      list.Push(value);
      return list;
    }
    
  2. Dann nenne ich es auf meinem Blatt so:

    =arrayformula(hack(tab!B1))
    

    wobei tab!B1 eine der Zellen ist, die ich durch Code ändere.

2
javi

Als Problemumgehung für den Roadblock now() können Sie die Einstellungen der Tabelle so ändern, dass sie stündlich aktualisiert werden.

Datei -> Tabelleneinstellungen -> Berechnung

Aktualisieren Sie das Blatt, um es am "bei Änderung und jede Stunde" oder "bei Änderung und jede Minute" neu zu berechnen. Beachten Sie jedoch, dass bei Auswahl der Option "Neuberechnung jede Minute" die Tabelle möglicherweise nicht mehr reagiert.

1
Nikhil Sahu

Ich konnte einen Weg finden, um mein Problem zu lösen (ausführlich hier ), indem ich ein Apps-Skript mit einer benutzerdefinierten Funktion verwendete.

Wenn Sie =IMPORTRANGE(spreadsheet_url, range_string) in Ihrer Tabelle durch =DynamicImportRange(spreadsheet_url, sheet_name, range) ersetzen und den folgenden Code in Tools -> Script Editor -> Blank Project einfügen, sollte dies funktionieren (siehe this für weitere Informationen) Informationen zum Schreiben von Apps-Skripten).

/**
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);
};

Wenn Sie möchten, dass das Blatt regelmäßig aktualisiert wird, können Sie einen Trigger einrichten, indem Sie im Anwendungsskript-Fenster auf Ressourcen -> Trigger des aktuellen Projekts klicken.

1
tlewis3348

Sie können das Google Sheets-Add-on Sheetgo verwenden, um Ihre Referenz automatisch von einem anderen Blatt aus zu aktualisieren. Sie können 30 Updates pro Monat kostenlos nutzen oder ein kostenpflichtiges Abonnement für weitere Updates erwerben. Dieses Video sollte Ihnen die grundlegende Verwendung erklären.

0
orschiro