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

19

Ich verwende eine externe Anwendung, um Daten in eine Google-Tabelle einzugeben. Diese Arbeitsmappe wird dann von einer separaten Arbeitsmappe (mit der IMPORTRANGE(spreadsheet_key, range_string)Funktion) referenziert , 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: Um es klar zu machen, ich habe derzeit eine Arbeitsmappe mit Daten, die von einer externen Anwendung eingegeben wurden (nenne sie das "Quellblatt"), und eine andere Arbeitsmappe mit einer IMPORTRANGEFunktion darin (nenne sie das "Referenzblatt"). Die von der IMPORTRANGEFunktion 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 stimmt auch nicht mit der Frage überein, wie eine Zelle in Google Spreadsheets mit einer Zelle in einem anderen Dokument verknüpft wird. weil ich die angegebene Funktion als Lösung für diese Frage verwende, um Daten aus einer Tabelle 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.

tlewis3348
quelle
Mir sind die Details der Funktionsweise nicht bekannt, aber ich verwende Folgendes: ifttt.com/google_drive
tlewis3348
@pnuts Können Sie erklären, was Sie unter "Sicherstellen, dass die richtige Version als Quelle verwendet wird" verstehen? Ich habe die Einstellungen für beide Blätter so eingestellt, dass sie jede Minute aktualisiert werden, und die Registerkarten werden so eingestellt, dass sie jede Minute aktualisiert werden. Wie, wo und auf welchem ​​Blatt aktualisiere ich die Quelle?
Tlewis3348
@ pnuts Nun, die Daten werden in separate workbookOrdnung angezeigt . Wie es aussieht, wurde es gerade eingetippt.
tlewis3348
Ja, dies ist das neue Google Sheets. In einer Arbeitsmappe werden die hinzugefügten Daten angezeigt, in der anderen Arbeitsmappe nicht. Ich werde dies zur Klärung der ursprünglichen Frage hinzufügen.
Tlewis3348

Antworten:

14

Ich habe mit dem gleichen Problem zu kämpfen. Anstatt eine benutzerdefinierte Funktion zu schreiben, füge ich eine andere Abfragezeichenfolge hinzu, spreadsheet_urlin IMPORTRANGEder Hoffnung, dass Google jedes Mal, wenn die Seite aktualisiert wird, 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 nicht mehr erlaubt now()innen importrange(). Siehe Kommentar von Hugh unten.

Sam Collins
quelle
6
Ich bin auf diese Antwort gestoßen, als ich versuchte, dasselbe zu tun. Es sieht so aus, als hätte Google es so gemacht, dass now (), rand () und randbetween () nicht in einem importrange () -Aufruf verwendet werden können.
Hugh
Wenn ich die Tabelle so einstelle, dass sie jede Minute aktualisiert wird, wird die Formel auch aktualisiert und ruft neue Daten ab (falls verfügbar)?
Nikhil Sahu
5

Das Folgende kommt von Jimmy in dieser Web Apps-Antwort .

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

Ich habe viele andere Vorschläge ausprobiert, einschließlich der Verwendung der =now()Funktion, des Tricks "Jetzt URL" in diesem Thread oder von Apps Script, um zufälligen Text in einem festgelegten Intervall einzufügen, aber nichts würde die Aktualisierung des Importbereichs erzwingen, außer einer manuellen Bearbeitung des Quellblatts.

Tony
quelle
Arbeitete für mich im Dezember 2018
MalcolmOcean
4

Ich fand den einfachsten Weg, eine einfache ifAussage um das zu machen importrange.

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

Das funktioniert jedes Mal.

Brett Hawthorne
quelle
Ich habe versucht, Ihre Lösung zu implementieren, aber mir ist nicht klar, wie ich B3 verwenden soll. Sie sagen B3 = Now () then=if (Now() > now()-1, IMPORTRANGE(B1,B2),)
Eugene van der Merwe
3

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, dies beim Öffnen oder in bestimmten Zeitintervallen zu skripten, um die Daten auf dem neuesten Stand zu halten.

Tom McGuinness
quelle
2

Ich habe einen einfachen Hack gefunden, 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))
    

    wo tab!B1ist eine der Zellen, die ich durch Code ändere.

javi
quelle
Wie simuliert dies ein manuelles Zellenupdate?
Hämse
2

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\")");  
Samuel Félix
quelle
noch besser wäre cell.setFormula ("=" & cell.getValue ()) ;, damit der Benutzer 2 Sekunden lang keine Null sieht ....
Tony BenBrahim
1

Ich konnte mithilfe eines Apps-Skripts mit einer benutzerdefinierten Funktion einen Weg finden, mein Problem zu lösen ( siehe Beschreibung hier ).

Wenn Sie ersetzen =IMPORTRANGE(spreadsheet_url, range_string)mit in Ihrer Tabelle =DynamicImportRange(spreadsheet_url, sheet_name, range)und den Code unten in Extras einfügen -> Skript - Editor -> Leeres Projekt, sollte es funktionieren (siehe diese auf dem Schreiben Apps - Skripte für weitere Informationen).

/**
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 Auslöser einrichten, indem Sie im Anwendungsskript-Fenster auf Ressourcen -> Auslöser des aktuellen Projekts klicken.

tlewis3348
quelle
4
FÜR ALLE MITGLIEDER HIER BEENDEN : Benutzerdefinierte Tabellenkalkulationsfunktionen können andere Tabellenkalkulationen nicht mehr mit SpreadsheetApp.openById()oder öffnen SpreadsheetApp.openByUrl(). Überprüfen Sie hier und hier
Francesco Vadicamo
1

Um dieses Problem zu now()umgehen, können Sie die Einstellungen der Tabelle so ändern, dass sie stündlich aktualisiert werden.

Datei -> Tabelleneinstellungen -> Berechnung

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

Nikhil Sahu
quelle
0

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 abschließen. Dieses Video soll Ihnen die grundlegende Verwendung erklären.

Orschiro
quelle
2
Beachten Sie bitte, dass es sich, obwohl es auf der Website " Install for Free " geschickt angegeben ist, um ein Add-On mit einem begrenzten kostenlosen Plan handelt, gefolgt von drei bezahlten . Der Link zur Seite "Preise" befindet sich nur ganz unten auf der Website.
Marikamitsos