1. Einführung
Willkommen zum fünften Teil der Codelab-Playlist „Grundlagen von Apps Script mit Google Sheets“. In diesem Codelab erfahren Sie, wie Sie den Tabellendienst in Apps Script verwenden, um einen Datensatz in einem Diagramm darzustellen. Außerdem erfahren Sie, wie Sie den Google Präsentationen-Dienst verwenden, um das Diagramm in eine neue Präsentation in Google Präsentationen zu exportieren.
Lerninhalte
- So erstellen Sie ein Liniendiagramm mit Apps Script.
- Diagramme in eine neue Google-Präsentation exportieren
- So werden dem Nutzer Dialogfelder in Google Tabellen präsentiert.
Hinweis
Dies ist das fünfte Codelab in der Playlist „Grundlagen von Apps Script mit Google Tabellen“. Bevor Sie mit diesem Codelab beginnen, sollten Sie die vorherigen Codelabs durcharbeiten:
- Makros und benutzerdefinierte Funktionen
- Tabellen, Tabellenblätter und Bereiche
- Mit Daten arbeiten
- Datenformatierung
Voraussetzungen
- Grundkenntnisse der grundlegenden Apps Script-Themen, die in den vorherigen Codelabs dieser Playlist behandelt werden.
- Grundlegende Kenntnisse des Apps Script-Editors
- Grundlegende Kenntnisse von Google Sheets
- Kann A1-Notation in Google Sheets lesen
- Grundkenntnisse in JavaScript und der
String
-Klasse
2. Einrichten
Bevor Sie fortfahren, benötigen Sie eine Tabelle mit Daten. Wie bisher haben wir ein Datenblatt bereitgestellt, das Sie für diese Übungen kopieren können. Und so gehts:
- Klicken Sie auf diesen Link, um das Datenblatt zu kopieren, und klicken Sie dann auf Kopie erstellen. Die neue Tabelle wird in Ihrem Google Drive-Ordner gespeichert und heißt „Kopie von Daten und USD-Wechselkursen“.
- Klicken Sie auf den Tabellentitel und ändern Sie ihn von „Kopie von Datumsangaben und USD-Wechselkursen“ in „Datumsangaben und USD-Wechselkurse“. Ihre Tabelle sollte so aussehen und einige grundlegende Informationen zu verschiedenen US-Dollar-Wechselkursen zu unterschiedlichen Datumsangaben enthalten:
- Klicken Sie auf Erweiterungen> Apps Script, um den Skripteditor zu öffnen.
Damit Sie Zeit sparen, haben wir in diese Tabelle etwas Code eingefügt, mit dem Sie ein benutzerdefiniertes Menü einrichten können. Möglicherweise wurde das Menü beim Öffnen Ihrer Kopie der Tabelle angezeigt:
Mit dieser Tabelle und diesem Projekt können Sie mit dem Codelab beginnen. Im nächsten Abschnitt erfahren Sie mehr über Diagramme und zeitgesteuerte Trigger.
3. Diagramm in Google Sheets mit Apps Script erstellen
Angenommen, Sie möchten ein bestimmtes Diagramm erstellen, um einen Datensatz zu visualisieren. Mit Apps Script können Sie Diagramme in Google Sheets erstellen, bearbeiten und einfügen. Wenn ein Diagramm in einer Tabellenkalkulation enthalten ist, wird es als eingebettetes Diagramm bezeichnet.
Diagramme werden verwendet, um eine oder mehrere Datenreihen zu visualisieren. Bei eingebetteten Diagrammen stammen die Daten, die sie präsentieren, in der Regel aus der Tabelle. Normalerweise wird das Diagramm in Google Sheets automatisch aktualisiert, wenn Sie die Daten in der Tabelle aktualisieren.
Mit Apps Script können Sie benutzerdefinierte, eingebettete Diagramme von Grund auf neu erstellen oder vorhandene Diagramme aktualisieren. In diesem Abschnitt werden die Grundlagen zum Erstellen eingebetteter Diagramme in Google Sheets mit Apps Script und dem Spreadsheet
-Dienst vorgestellt.
Implementierung
In Ihrer Kopie der Datentabelle sind im Dataset „Dates and Exchange Rates“ (Datumsangaben und Wechselkurse) die Wechselkurse (für 1 US-Dollar) verschiedener Währungen zu unterschiedlichen Datumsangaben zu sehen. Sie implementieren eine Apps Script-Funktion, mit der ein Diagramm erstellt wird, um einen Teil dieser Daten zu visualisieren.
Und so gehts:
- Fügen Sie im Apps Script-Editor die folgende Funktion am Ende des
Code.gs
-Skripts Ihres Skriptprojekts nach der FunktiononOpen()
ein:
/**
* Creates and inserts an embedded
* line chart into the active sheet.
*/
function createEmbeddedLineChart() {
var sheet = SpreadsheetApp.getActiveSheet();
var chartDataRange = sheet.getRange(
'Dates and USD Exchange Rates dataset!A2:F102');
var hAxisOptions = {
slantedText: true,
slantedTextAngle: 60,
gridlines: {
count: 12
}
};
var lineChartBuilder = sheet.newChart().asLineChart();
var chart = lineChartBuilder
.addRange(chartDataRange)
.setPosition(5, 8, 0, 0)
.setTitle('USD Exchange rates')
.setNumHeaders(1)
.setLegendPosition(Charts.Position.RIGHT)
.setOption('hAxis', hAxisOptions)
.setOption("useFirstColumnAsDomain", true)
.build();
sheet.insertChart(chart);
}
- Speichern Sie Ihr Skriptprojekt.
Code Review
Der von Ihnen hinzugefügte Code implementiert die Funktion, die vom Menüpunkt Diagramm für den Datensatz „Dates and USD Exchange Rates“ erstellen aufgerufen wird, um ein einfaches Liniendiagramm zu erstellen. Sehen wir uns den Code an.
In den ersten Zeilen werden die folgenden drei Variablen eingerichtet:
sheet
: Ein Verweis auf das aktuell aktive Tabellenblatt.chartDataRange
: Der Zeitraum, der visualisiert werden soll. Im Code wird die A1-Notation verwendet, um den Bereich anzugeben, der die Zellen A2 bis F102 im Tabellenblatt mit dem Namen Dates and USD Exchange Rates dataset umfasst. Durch die spezifische Benennung des Tabellenblatts wird sichergestellt, dass das Menüelement auch dann funktioniert, wenn ein anderes Tabellenblatt aktiv ist, da der Bereich immer die Datenposition abdeckt. „Ab Zeile 2“ bedeutet, dass wir die Spaltenüberschriften einbeziehen und nur die 100 aktuellsten Datumsangaben (Zeilen) darstellen.hAxisOptions
: Ein einfaches JavaScript-Objekt, das einige Einstellungsinformationen enthält, die vom Code verwendet werden, um das Erscheinungsbild der horizontalen Achse zu konfigurieren. Konkret werden die Textlabels der horizontalen Achse in einem Winkel von 60 Grad dargestellt und die Anzahl der vertikalen Rasterlinien auf 12 festgelegt.
In der nächsten Zeile wird ein Builder für Liniendiagramme-Objekt erstellt. Eingebettete Diagramme in Apps Script werden mit einem Builder-Entwurfsmuster erstellt. Eine vollständige Erklärung dieses Designmusters würde den Rahmen dieses Codelabs sprengen. Sie müssen nur wissen, dass der Spreadsheet
-Dienst mehrere EmbeddedChartBuilder
-Klassen bereitstellt. Um ein Diagramm zu erstellen, wird in Ihrem Code zuerst ein Builder-Objekt für eingebettete Diagramme erstellt. Anschließend werden mit den zugehörigen Methoden die Diagrammeinstellungen definiert und dann eine build()
-Methode aufgerufen, um das endgültige EmbeddedChart
-Objekt zu erstellen. Ihr Code ändert das EmbeddedChart
-Objekt nie direkt, da die gesamte Diagrammkonfiguration über die Builder-Klassen verwaltet wird.
Der Tabellendienst bietet eine übergeordnete EmbeddedChartBuilder
-Klasse und mehrere untergeordnete Builder-Klassen (z. B. EmbeddedLineChartBuilder
), die von ihr erben. Mithilfe der untergeordneten Klassen kann Apps Script Methoden zur Konfiguration von Diagrammen bereitstellen, die nur für bestimmte Diagrammtypen gelten. Die Klasse EmbeddedPieChartBuilder
bietet beispielsweise die Methode set3D()
, die nur für Kreisdiagramme gilt.
In Ihrem Code wird mit dieser Zeile die Builder-Objektvariable lineChartBuilder
erstellt:
var lineChartBuilder = sheet.newChart().asLineChart();
Im Code wird die Methode Sheet.newChart()
aufgerufen, um ein EmbeddedChartBuilder
-Objekt zu erstellen. Anschließend wird EmbeddedChartBuilder.asLineChart()
verwendet, um den Builder-Typ auf EmbeddedLineChartBuilder
festzulegen.
Anschließend wird das Diagramm mit lineChartBuilder erstellt. Dieser Teil des Codes besteht nur aus einer Reihe von Methodenaufrufen zum Definieren der Diagrammeinstellungen, gefolgt von einem build()
-Aufruf zum Erstellen des Diagramms. Wie Sie in früheren Codelabs gesehen haben, wird im Code Method Chaining verwendet, um den Code lesbar zu halten. Das bewirken die Methodenaufrufe:
addRange(range)
: Definiert den Datenbereich, der im Diagramm dargestellt wird.setPosition(anchorRowPos, anchorColPos, offsetX, offsetY)
: Bestimmt, wo das Diagramm im Tabellenblatt platziert wird. Hier wird die obere linke Ecke des Diagramms in die Zelle H5 eingefügt.setTitle(title)
: Hiermit wird der Diagrammtitel festgelegt.setNumHeaders(headers)
: Gibt an, wie viele Zeilen oder Spalten im Datenbereich als Überschriften behandelt werden sollen. Hier wird die erste Zeile des Datenbereichs als Kopfzeile verwendet. Das bedeutet, dass der Text in dieser Zeile als Labels für die einzelnen Datenreihen im Diagramm verwendet wird.setLegendPosition(position)
: Verschiebt die Diagrammlegende an die rechte Seite des Diagramms. Diese Methode verwendet die Enumeration Charts.Position als Parameter.setOption(option, value)
: Hiermit werden Optionen für komplexe Diagramme festgelegt. Hier wird die OptionhAxis
auf das ObjekthAxisOptions
festgelegt. Mit dieser Methode können Sie verschiedene Optionen festlegen. Die Optionen und möglichen Werte für jeden Diagrammtyp sind in der Charts API Chart Gallery dokumentiert. Die Optionen, die Sie für Liniendiagramme festlegen können, sind beispielsweise unter Konfigurationsoptionen für Liniendiagramme dokumentiert. Die MethodesetOption(option, value)
ist ein fortgeschrittenes Thema. Sie sollten sie daher erst verwenden, wenn Sie sich mit dem Erstellen von Diagrammen in Apps Script besser auskennen.build()
: Erstellt und gibt einEmbeddedChart
-Objekt mit den oben genannten Einstellungen zurück.
Schließlich wird mit dem Code Sheet.insertChart(chart)
aufgerufen, um das erstellte Diagramm in das aktive Tabellenblatt einzufügen.
Ergebnisse
So können Sie Ihre Formatierungsfunktion in Aktion sehen:
- Falls noch nicht geschehen, speichern Sie Ihr Skriptprojekt im Apps Script-Editor.
- Klicken Sie auf das Menüelement Dataset präsentieren > Diagramm „Dataset ‚Dates and USD Exchange Rates‘“.
Ihr Script platziert jetzt ein neues Diagramm rechts neben Ihren Daten:
Glückwunsch! Sie haben mit Apps Script ein eingebettetes Liniendiagramm erstellt. Im nächsten Abschnitt erfahren Sie, wie Sie Ihr Diagramm in Google-Präsentationen exportieren.
4. Diagramme in Google-Präsentationen exportieren
Einer der großen Vorteile von Apps Script ist, dass Sie Daten ganz einfach von einer Google Workspace-Anwendung in eine andere übertragen können. Die meisten dieser Anwendungen haben einen dedizierten Apps Script-Dienst, ähnlich dem Tabellendienst. Gmail hat beispielsweise den Gmail-Dienst, Google Docs den Dokumentdienst und Google Präsentationen den Präsentationen-Dienst. Mit all diesen integrierten Diensten können Sie Daten aus einer Anwendung extrahieren, sie verarbeiten und das Ergebnis in eine andere Anwendung schreiben.
In diesem Abschnitt erfahren Sie, wie Sie alle eingebetteten Diagramme in einer Google-Tabelle in eine neue Google-Präsentation exportieren. Außerdem sehen Sie zwei Möglichkeiten, benutzerdefinierte Nutzernachrichten in Google Sheets anzuzeigen.
Implementierung
Hier implementieren Sie die Funktion, die über den Menüpunkt Dataset präsentieren > Diagramme in Google-Präsentationen exportieren aufgerufen wird. Und so gehts:
- Fügen Sie im Apps Script-Editor die folgende Funktion am Ende des
Code.gs
-Skripts Ihres Skriptprojekts nach der FunktioncreateEmbeddedLineChart()
ein:
/**
* Create a Slides presentation and export
* all the embedded charts in this spreadsheet
* to it, one chart per slide.
*/
function exportChartsToSlides() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
// Fetch a list of all embedded charts in this
// spreadsheet.
var charts = [];
var sheets = ss.getSheets();
for (var i = 0; i < sheets.length; i++) {
charts = charts.concat(sheets[i].getCharts());
}
// If there aren't any charts, display a toast
// message and return without doing anything
// else.
if (charts.length == 0) {
ss.toast('No charts to export!');
return;
}
// Create a Slides presentation, removing the default
// title slide.
var presentationTitle =
ss.getName() + " Presentation";
var slides = SlidesApp.create(presentationTitle);
slides.getSlides()[0].remove();
// Add charts to the presentation, one chart per slide.
var position = {left: 40, top: 30};
var size = {height: 340, width: 430};
for (var i = 0; i < charts.length; i++) {
var newSlide = slides.appendSlide();
newSlide.insertSheetsChart(
charts[i],
position.left,
position.top,
size.width,
size.height);
}
// Create and display a dialog telling the user where to
// find the new presentation.
var slidesUrl = slides.getUrl();
var html = "<p>Find it in your home Drive folder:</p>"
+ "<p><a href=\"" + slidesUrl + "\" target=\"_blank\">"
+ presentationTitle + "</a></p>";
SpreadsheetApp.getUi().showModalDialog(
HtmlService.createHtmlOutput(html)
.setHeight(120)
.setWidth(350),
"Created a presentation!"
);
}
- Speichern Sie Ihr Skriptprojekt.
Code Review
Dieser Code ist möglicherweise kürzer als erwartet. Sehen wir uns an, was der Code macht, indem wir ihn in fünf Abschnitte unterteilen:
1. Diagramme abrufen
In den ersten Zeilen wird die aktive Tabelle nach allen eingebetteten Diagrammen durchsucht und diese werden im Array charts
zusammengefasst. In diesen Zeilen werden die Methoden Spreadsheet.getSheets()
und Sheet.getCharts()
verwendet, um Listen von Tabellenblättern und Diagrammen abzurufen. Mit der JavaScript-Methode Array.concat()
wird die Liste der Diagramme aus jedem Tabellenblatt an charts
angehängt.
2. Prüfen, ob Diagramme exportiert werden können
Mit dem Code wird geprüft, ob Diagramme exportiert werden sollen. Wir möchten vermeiden, dass eine leere Präsentation erstellt wird. Wenn also keine Diagramme vorhanden sind, wird mit Spreadsheet.toast(message)
stattdessen eine Toast-Meldung erstellt. Das ist ein kleines Pop-up-Fenster, das rechts unten in Google Tabellen angezeigt wird, einige Sekunden lang eingeblendet bleibt und dann wieder verschwindet:
Wenn keine Diagramme exportiert werden sollen, wird die Toast-Meldung erstellt und das Programm wird beendet, ohne dass weitere Aktionen ausgeführt werden. Wenn Diagramme exportiert werden sollen, wird in den nächsten Zeilen eine Präsentation erstellt.
3. Präsentation erstellen
Die Variable presentationTitle
wird erstellt, um den Dateinamen der neuen Präsentation zu speichern. Er wird als Name der Tabelle festgelegt, wobei „ Presentation
“ am Ende angehängt wird. Der Code ruft dann die Slides-Dienstmethode SlidesApp.create(name)
auf, um eine Präsentation zu erstellen.
Neue Präsentationen werden mit einer einzelnen leeren Folie erstellt. Das möchten wir in unserer Präsentation nicht, daher wird es mit Presentation.getSlides()
und Slide.remove()
entfernt.
4. Diagramme exportieren
Im nächsten Abschnitt wird der position
und size
der JavaScript-Objekte definiert, um festzulegen, wo die importierten Diagramme auf der Folie platziert werden und wie groß sie sein sollen (in Pixeln).
Der Code durchläuft jedes Diagramm in der Liste „charts“. Für jedes Diagramm wird ein newSlide
mit Presentation.appendSlide()
erstellt und die Folie wird am Ende der Präsentation hinzugefügt. Mit der Methode Slide.insertSheetsChart(sourceChart, left, top, width, height)
wird das Diagramm in die Folie mit den angegebenen position
und size
importiert.
5. Ort der Präsentation teilen
Schließlich muss der Code dem Nutzer mitteilen, wo sich die neue Präsentation befindet, vorzugsweise mit einem Link, auf den er klicken kann, um sie zu öffnen. Dazu wird mit dem HTML
-Dienst von Apps Script ein benutzerdefiniertes modales Dialogfeld erstellt. Modale Dialogfelder (in Apps Script auch als benutzerdefinierte Dialogfelder bezeichnet) sind Fenster, die über der Google Sheets-Benutzeroberfläche angezeigt werden. Wenn benutzerdefinierte Dialogfelder angezeigt werden, kann der Nutzer nicht mit Google Tabellen interagieren.
Zum Erstellen eines benutzerdefinierten Dialogfelds benötigt der Code das HTML, das seinen Inhalt definiert. Diese wird in der Variablen html
bereitgestellt. Der Inhalt umfasst einen kurzen Absatz und einen Hyperlink. Der Hyperlink ist die Variable presentationTitle
, die mit der von Presentation.getUrl()
bereitgestellten Präsentations-URL verknüpft ist. Der Hyperlink verwendet auch das Attribut target="_blank"
, sodass die Präsentation in einem neuen Browsertab und nicht im Dialogfeld geöffnet wird.
Das HTML wird mit der Methode HtmlService.createHtmlOutput(html)
in ein HtmlOutput
-Objekt geparst. Mit dem HtmlOutput
-Objekt kann die Größe des benutzerdefinierten Dialogfelds mit HtmlOutput.setHeight(height)
und HtmlOutput.setWidth(width)
festgelegt werden.
Nachdem htmlOutput
erstellt wurde, wird mit der Methode Ui.showModalDialog(htmlOutput, title)
das Dialogfeld mit dem angegebenen Titel angezeigt.
Ergebnisse
Nachdem Sie das zweite Menüelement implementiert haben, können Sie es in Aktion sehen. So testen Sie die Funktion exportChartsToSlides()
:
- Falls noch nicht geschehen, speichern Sie Ihr Skriptprojekt im Apps Script-Editor.
- Öffnen Sie die Tabelle und klicken Sie auf das Menüelement Dataset präsentieren > Diagramm „Dataset ‚Dates and USD Exchange Rates‘“, um ein Diagramm zum Exportieren zu erstellen. Es wird in Zelle H5 des aktiven Blatts verankert.
- Klicken Sie auf das Menüelement Dataset präsentieren > Diagramme in Google-Präsentationen exportieren. Möglicherweise werden Sie aufgefordert, das Skript noch einmal zu autorisieren.
- Das Skript sollte die Anfrage verarbeiten und das benutzerdefinierte Dialogfeld anzeigen.
- Klicken Sie auf den Link Dates and USD Exchange Rates Presentation (Präsentation zu Datumsangaben und USD-Wechselkursen), um die neue Google-Präsentation zu öffnen:
Sie können auch weitere Diagramme in Ihre Tabelle einfügen und das Menüelement noch einmal auswählen, um eine Präsentation mit mehreren Folien zu erstellen.
Sie können jetzt in Google Sheets erstellte Diagramme in eine Google-Präsentation exportieren. Sie können auch Code schreiben, um ein benutzerdefiniertes Dialogfeld zu erstellen.
Sie haben die letzte Übung dieses Codelabs abgeschlossen. Im nächsten Abschnitt können Sie Ihr Wissen überprüfen.
5. Fazit
Herzlichen Glückwunsch! Sie haben dieses Codelab und die gesamte Codelab-Playlist „Grundlagen von Apps Script mit Google Tabellen“ abgeschlossen. Mithilfe der in dieser Playlist vermittelten Grundlagen können Sie Ihre Kenntnisse in Google Tabellen erweitern und die Funktionen von Apps Script kennenlernen.
War dieses Codelab hilfreich?
Das haben Sie gelernt
- Eingebettetes Liniendiagramm mit Apps Script erstellen
- So präsentieren Sie einem Nutzer in Google Tabellen Infofelder und benutzerdefinierte Dialogfelder.
- Diagramm in eine neue Google-Präsentation exportieren
Nächste Schritte
Du hast diese Playlist erfolgreich abgeschlossen. Es gibt jedoch noch viel mehr über Apps Script zu lernen.
Dann sehen Sie sich gleich diese Infomaterialien an:
- Apps Script-Entwicklerdokumentation
- Apps Script-Anleitungen
- Apps Script-Referenzdokumentation
- Apps Script-Fragen bei Stack Overflow
- Apps Script-Codebeispiele auf GitHub
Viel Spaß beim Erstellen von Skripten!