Programmgesteuertes Aktualisieren einer in Google Docs gehosteten Tabellenkalkulation

8

Ich habe eine bereits vorhandene Tabelle in Google Docs gehostet. Jeden Monat aktualisiere ich dieses Dokument. Ich habe ein Template-Workset in der Spreizung, die ich klonen und dann aktualisieren möchte.

Ich würde es vorziehen, das Arbeitsblatt zu klonen, anstatt es von Grund auf neu zu erstellen, da es ziemlich komplexe Formeln enthält.

Ich benutze die Python-API für die Google-Dokumente hier:

Ссылка

Kann jemand ein Arbeitsblatt in einem bereits vorhandenen Dokument klonen und kopieren?

Bearbeiten

Ich schien einen Leser verwirrt zu haben. Ich habe keine Excel-Tabelle. Ich habe nur eine Google Docs-Tabelle mit einem Vorlagenarbeitsblatt.

Ich möchte dieses Arbeitsblatt klonen, umbenennen und dann programmatisch bearbeiten.

    
chollida 03.12.2009, 05:58
quelle

6 Antworten

6
  1. Klonen Sie Ihr Vorlagenarbeitsblatt mit den Anweisungen unter Dokumente kopieren
  2. Greifen Sie auf die Liste der Arbeitsblätter im geklonten Dokument zu und durchlaufen Sie sie die erforderliche Tabelle.
  3. Verwenden Sie den Zellen-Feed , um die entsprechende Zelle in Ihrer Tabelle zu erhalten. dann aktualisieren Sie die Werte.
DoctorRuss 02.11.2010, 15:43
quelle
4

Whoa !!! Stellen Sie den LKW zurück. Es gibt einen viel einfacheren Ansatz

Ich habe das in den letzten Wochen ein wenig erforscht, weil ich das gleiche für meine monatlichen Berichte plane. Ich habe den tatsächlichen Code noch nicht ausgearbeitet, aber ich füge ihn hinzu, wenn ich Fortschritte mache.

In Google Docs gibt es so viele APIs und ähnliche Begriffe für die Arbeit mit Dokumenten, dass die Dinge ein wenig verwirrend sein können. Wenn Sie noch nicht wissen, stellen Sie in Ihrem Kopf fest, dass GAS (Google Apps Scripting) und GAE (Google App Engine) zwei völlig verschiedene Dinge sind. Obwohl sie ähnlich klingen, sind sie ungefähr so ​​ähnlich wie Java zu JavaScript.

GAS sind die in Google Docs eingebetteten Scripts (die hoffentlich in Zukunft als eigenständige Module importiert werden können), die Dinge wie Validierung und dynamische Dokumente antreiben, aber sie sind viel mächtiger als die meisten anderen (sie können Dinge wie Ändern / Aktualisieren externer Dokumente und Antworten per E-Mail). Denken Sie daran, dass diese leicht sein müssen, da sie auf Googles Servern laufen. Wenn dein Skript zu lange braucht, um es zu beenden, wird die Ausführung vorzeitig abgebrochen (google um die Grenzen zu finden). Das bedeutet, dass Sie nur vanilla JS (keine Frameworks wie jQuery) und Leistungsoptimierungen verwenden sollten, wo immer dies möglich ist.

GAE dagegen ist wie ein Webserver (mit einer verfügbaren Datenbankschicht), der irgendwo in der Cloud lebt. Es existiert als eine praktische (und bereits bereitgestellte) Middleware-Ebene für Unternehmen / Interessen, um benutzerdefinierte Apps zu erstellen, um mehr Gewicht zu heben. Leider ist die API des externen Spreadsheets zu beschränkt, um das zu erreichen, woran wir gerade arbeiten, so dass es keine Option ist.

Automatisierung mit Google Apps Scripting und zeitbasierten Triggern

Dieser Ansatz sollte funktionieren, erfordert aber einen leicht hackischen Ansatz.

Öffnen Sie die Arbeitsmappe mit Ihren Berichtsblättern. Klicken Sie auf [Extras] - & gt; [Script Editor...]. Dort angekommen [Trigger] - & gt; [Auslöser des aktuellen Skripts ...].

Wenn keine Trigger vorhanden sind, fügen Sie einen hinzu. Wählen Sie dann im Dropdown-Menü "Ereignisse" die Option "Zeitgesteuert" aus.

Willkommen in der Welt der serverseitigen Event-Handler. Eine der netten Funktionen, die Sie mit Cloud-basierten Dokumenten erhalten, ist die Möglichkeit, Cron-Jobs direkt in Ihrem Dokument auszulösen. Keine externe Middleware notwendig.

Wenn Sie es noch nicht bemerkt haben, gibt es keinen Auslöser für "Monatstimer". Hier wird es hacky. Um das Fehlen dieser Funktion zu umgehen, müssen wir den Trigger täglich auslösen und JavaScript verwenden, um das aktuelle Datum mit dem Datum des vorherigen Tages abzugleichen.

[Code wird hier]

gehen

Zuerst kommt die Funktion, die an den Ereignishandler für die Zeitauslösung angehängt wird. Dieser Codeblock analysiert das Datum einfach, vergleicht es mit dem vorherigen Datum und speichert den Wert in einem ausgeblendeten Blatt (das wir als Out Persistence Layer verwenden) für den Vergleich des nächsten Tages. Wenn die Bedingung für den neuen Monat erfüllt ist, wird der nächste Codeblock ausgeführt.

[Code wird hier]

gehen

Ihr wird sich offensichtlich ein wenig von meinem unterscheiden, aber das Grundkonzept ist:

  • Laden Sie das SpreadSheet-Objekt (nicht zu verwechseln mit einem Sheet-Objekt)
  • Suchen Sie die Vorlage Blattobjekt
  • Klonen Sie das Vorlagenblatt und geben Sie ihm einen geeigneten datumsbereichsbezogenen Namen

In meinem nächsten Schritt werde ich Daten aus dem Monat extrahieren, um ein gestapeltes Liniendiagramm zu erstellen, um meinen übergeordneten Benutzern den aktuellen Status zu melden.

Hinweis: Aufgrund der Multi-User-Collaboration-Eigenschaft von Dokumenten müssen Ereignisse serverseitig ausgelöst werden. Dies schafft ein großes Problem für uns. Da der Ereigniscode bei Codefehlern anderswo ausgeführt wird, erhalten wir keine Rückmeldung von unserem Browser. Die einzige Lösung besteht darin, eine Benachrichtigung für den Auslöser einzurichten, um Sie sofort per E-Mail zu benachrichtigen, wenn das Skript Fehler aufweist .

Update: Bei der Recherche habe ich eine andere coole Technik gefunden. Wenn ich es schaffen kann, das ohne irgendwelche Bugs funktionieren zu lassen, kann ich versuchen, den Auslöser mit einem in Google Kalender markierten Datum aufzurufen.

    
Evan Plaice 03.01.2012 00:33
quelle
2

Zuerst habe ich noch nie mit Python gearbeitet - aber ich sage Ihnen, wie ich das in C ++ gemacht habe.

Ich habe cURL verwendet, um eine GET-Anfrage an das Google zu richten Dokumenten-API . Die Binärdaten der Datei wurden zurückgegeben und ich schrieb das in eine Datei. Jetzt hatte ich die XLS-Datei und dann benutzte ich eine C / C ++ - Bibliothek, die XLS-Dateien lesen konnte, um die heruntergeladene Datei zu manipulieren. Die API, die ich verwendete, unterstützte eine Vielzahl von Optionen. Sie könnten alles tun, was Sie in Excel tun könnten. Nach der Änderung habe ich es erneut in Google Docs hochgeladen.

    
Charles 09.12.2009 08:49
quelle
2

Das ist wirklich kompliziert. Ich verstehe, dass Sie Ihre Tabellen mit Python über ihre API bearbeiten können, Google bietet diese Möglichkeit in vielen ihrer Web-Services an und es geschieht alles durch das Senden von HTTP-Post-Anfragen aus XML. Ich hoffe, Sie kennen diesen Teil. t.

Nach diesem können Sie zumindest Arbeitsblätter hinzufügen, aus denen Zeilen gelesen werden können andere Arbeitsblätter und schreiben Sie Zeilen in Arbeitsblätter. Wenn Sie müssen, können Sie es eine Zeile nach der anderen kopieren, aber eine zusätzliche POST-Anfrage für jede Zeile senden scheint wie eine schreckliche Idee.

Bearbeiten:

Ich lerne mehr und mehr darüber, aber immer noch weit davon entfernt, Ihr ursprüngliches Problem zu lösen. Diese Übersicht der REST-Prinzipien behandelt den grundlegenden Interaktionsstil zwischen Programmen im Web. Google scheint es religiös zu verfolgen.

Alles findet innerhalb des HTTP-Protokolls statt, etwas, von dem ich bis heute nichts wusste. In dieser HTTP-Spezifikation wird das grundlegende Spiel erklärt. Es ist nicht so trocken wie es aussieht, und vielleicht bin ich nur ein großer Geek, aber ich finde es inspirierend zu lesen. Nicht anders als die Verfassung der Vereinigten Staaten.

Da Sie also ein Dokument "klonen" wollen, verwenden Sie eine GET-Anfrage für ein bestimmtes Arbeitsblatt und senden dieses Arbeitsblatt dann als Payload von POST zurück.

Näher kommen:)

    
Nathan 07.12.2009 03:13
quelle
1

Konnten Sie Ihre Tabelle nicht als xls exportieren und dann als neues Dokument mit einem (leicht) anderen Namen hochladen, indem Sie den neuen Namen in den XML-Metadaten angeben?

Die Abschnitte zum Herunterladen und Erstellen / Hochladen von Dokumenten sollten unter CSSL nützlich sein.

Ich kann in den Python-API-Dokumenten keine Import- / Exportfunktionalität sofort sehen, aber das Senden einiger HTTP-Anforderungen ist nicht so schlecht.

    
torbiak 09.12.2009 03:12
quelle
0

(Feb 2017) Umformulierung der Frage mit der aktuellen Terminologie: Wie kopiert man eine Google Sheet-Vorlage und modifiziert sie (die Kopie) programmatisch? Kurze Antwort: Es ist viel einfacher mit aktuellen Google-APIs, insbesondere der Google Drive v3-API und den Google Tabellen Version 4 und Sie können dies mit jeder Sprache tun, die von den Google APIs unterstützt wird Clientbibliotheken .

Die neueste Google Tabellen-API stellt Funktionen bereit, die in älteren Versionen nicht verfügbar sind, dh Entwicklern programmgesteuerten Zugriff auf ein Blatt zu geben, als ob Sie die Benutzeroberfläche verwenden würden, dh gefrorene Zeilen erstellen, Zellen formatieren, Zeilen / Spalten ändern, hinzufügen Pivot-Tabellen, Zellenvalidierung, Diagramme erstellen usw.

Wie Sie sich denken können, dient die Google Tabellen-API in erster Linie dazu, programmatisch auf Tabellenkalkulationsoperationen zuzugreifen & amp; Funktionalität, wie oben beschrieben, aber um Datei -level Zugriff wie das Kopieren eines Vorlagenblatts durchzuführen, verwenden Sie die %Vor%

Wenn Sie mit modernen Google-APIs noch relativ neu sind, habe ich ein (etwas veraltetes), aber benutzerfreundliches Intro Video für dich. Es gibt 2 Videos, die vielleicht auch nützlich sind, einschließlich eines, das die Verwendung der Drive API demonstriert. Das sind die Videos 2, 3 und 4 in dieser Playlist . Videos 23 & amp; 25 sind ein weiteres Paar mit den Drive and Sheets APIs.

Alle neueren Videos findest du in dieser Playlist . Dort findest du ein weiteres Paar Videos mit der Google Tabellen-API plus eine Wiederholung des obigen Codes zum Kopieren von Vorlagen, aber Kopieren einer Folienvorlage, die dann mit der Folien-API geändert wird (Video 2 ).

Wie in einer anderen Antwort erwähnt, können Sie auch Google Apps Script verwenden, um etwas Ähnliches zu tun, wenn Sie diese Umgebung gegenüber bevorzugen Verwendung von REST-APIs, obwohl Apps Script derzeit ältere APIs verwendet. Außerdem gibt es einige wenige ausstehende Fehler, die das Ganze etwas herausfordernder machen (speziell ) dieses und dieses ).

    
wescpy 28.02.2017 02:56
quelle

Tags und Links