Verwenden Sie Google Sheets, um eine E-Mail basierend auf dem Zellenwert zu senden

Verwenden Sie Google Sheets, um eine E-Mail basierend auf dem Zellenwert zu senden

Das Senden einer E-Mail aus Google Sheets erfordert die Verwendung eines Google Apps-Skripts. Aber keine Sorge, wenn Sie noch nie ein einzelnes Google Apps-Skript erstellt haben, ist das Senden einer E-Mail sehr einfach.

Im folgenden Tutorial erfahren Sie, wie Sie den Wert einer Zelle in Google Sheets überprüfen . Wenn der Wert einen bestimmten Schwellenwert überschreitet, können Sie automatisch eine Warn-E-Mail an eine beliebige E-Mail-Adresse senden.

Es gibt viele Verwendungsmöglichkeiten für dieses Skript. Sie könnten eine Benachrichtigung erhalten, wenn die täglichen Einnahmen in Ihrem Verkaufsbericht unter ein bestimmtes Niveau fallen. Oder Sie könnten eine E-Mail erhalten, wenn Ihre Mitarbeiter in Ihrer Projektverfolgungstabelle melden, dass sie dem Kunden zu viele Stunden in Rechnung gestellt haben.

Unabhängig von der Anwendung ist dieses Skript überzeugend. Es erspart Ihnen auch die Zeit, Ihre Tabellenkalkulationsaktualisierungen manuell überwachen zu müssen.

Schritt 1: Senden einer E-Mail mit Google Sheets

Bevor Sie ein Google Apps-Skript erstellen können, um eine E-Mail aus Google Tabellen zu senden , benötigen Sie außerdem eine Gmail-E-Mail-Adresse, auf die Google Apps Script zugreift, um Ihre Benachrichtigungs-E-Mails zu versenden.

Sie müssen auch eine neue Tabelle erstellen, die eine E-Mail-Adresse enthält.

Fügen Sie einfach eine Namensspalte und eine E-Mail-Spalte hinzu und füllen Sie sie mit der Person aus, die die Benachrichtigungs-E-Mail erhalten soll.

Verwenden Sie Google Sheets, um eine E-Mail basierend auf dem Zellenwert zu senden

Nachdem Sie nun eine E-Mail-Adresse haben, an die Sie eine Benachrichtigungs-E-Mail senden können, ist es an der Zeit, Ihr Skript zu erstellen.

Um in den Skripteditor zu gelangen, klicken Sie auf Extras und dann auf Skripteditor .

Sie sehen ein Skriptfenster mit einer Standardfunktion namens  myFunction() . Benennen Sie diese in SendEmail() um .

Fügen Sie als Nächstes den folgenden Code in die Funktion SendEmail() ein:

// Fetch the email address var emailRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1").getRange("B2"); var emailAddress = emailRange.getValues(); // Send Alert Email. var message = 'This is your Alert email!'; // Second column var subject = 'Your Google Spreadsheet Alert'; MailApp.sendEmail(emailAddress, subject, message);

So funktioniert dieser Code:

  • getRange und getValues ​​ziehen den Wert aus der in der getRange-Methode angegebenen Zelle.
  • var Nachricht und var Betreff definieren den Text, der Ihre Benachrichtigungs-E-Mail bilden wird.
  • Die Funktion MailApp.sendEmail führt schließlich die Funktion zum Senden von E-Mails von Google Scripts mithilfe Ihres verbundenen Google-Kontos aus.

Speichern Sie das Skript, indem Sie auf das Datenträgersymbol klicken , und führen Sie es dann aus, indem Sie auf das Symbol „ Ausführen “ (Pfeil nach rechts) klicken.

Denken Sie daran, dass Google Script die Berechtigung benötigt, auf Ihr Google Mail-Konto zuzugreifen , um die E-Mail zu senden. Wenn Sie das Skript zum ersten Mal ausführen, sehen Sie möglicherweise eine Warnung wie unten.

Verwenden Sie Google Sheets, um eine E-Mail basierend auf dem Zellenwert zu senden

Klicken Sie auf Berechtigungen überprüfen und Sie sehen einen weiteren Warnbildschirm, den Sie umgehen müssen.

Dieser Warnbildschirm wird angezeigt, weil Sie ein benutzerdefiniertes Google-Skript schreiben, das nicht als offizielles registriert ist.

Verwenden Sie Google Sheets, um eine E-Mail basierend auf dem Zellenwert zu senden

Klicken Sie einfach auf Erweitert und dann auf den Link Go to SendEmail (unsafe) .

Sie müssen dies nur einmal tun. Ihr Skript wird ausgeführt und die E-Mail-Adresse, die Sie in Ihrer Tabelle angegeben haben, erhält eine E-Mail wie die untenstehende.

Verwenden Sie Google Sheets, um eine E-Mail basierend auf dem Zellenwert zu senden

Schritt 2: Lesen eines Werts aus einer Zelle in Google Sheets

Nachdem Sie nun erfolgreich ein Google Apps-Skript geschrieben haben, das eine Benachrichtigungs-E-Mail senden kann, ist es an der Zeit, diese Benachrichtigungs-E-Mail funktionaler zu gestalten.

Im nächsten Schritt lernen Sie, wie Sie einen Datenwert aus einer Google-Tabelle auslesen, den Wert überprüfen und eine Popup-Meldung ausgeben, wenn dieser Wert über oder unter einer Obergrenze liegt.

Bevor Sie dies tun können, müssen Sie ein weiteres Blatt in der Google-Tabelle erstellen, mit der Sie arbeiten. Nennen Sie dieses neue Blatt „MyReport“.

Verwenden Sie Google Sheets, um eine E-Mail basierend auf dem Zellenwert zu senden

Denken Sie daran, dass Zelle D2 diejenige ist, die Sie überprüfen und vergleichen möchten. Stellen Sie sich vor, Sie möchten jeden Monat wissen, ob Ihr Gesamtumsatz unter 16.000 $ gefallen ist.

Lassen Sie uns das Google Apps-Skript erstellen, das dies tut.

Gehen Sie zurück in Ihr Skript-Editor-Fenster, indem Sie auf Extras und dann auf Skript-Editor klicken .

Wenn Sie dieselbe Tabelle verwenden, haben Sie immer noch die  Funktion SendEmail() darin. Schneiden Sie diesen Code aus und fügen Sie ihn in Notepad ein. Du wirst es später brauchen.

Fügen Sie die folgende Funktion in das Codefenster ein.

function CheckSales() { // Fetch the monthly sales var monthSalesRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("MyReport").getRange("D2"); var monthSales = monthSalesRange.getValue(); var ui = SpreadsheetApp.getUi(); // Check totals sales if (monthSales < 16000){="" ui.alert('sales="" too="" low!');="" }="">

Wie dieser Code funktioniert:

  • Laden Sie den Wert aus Zelle D2 in die Variable monthSales .
  • Die IF-Anweisung vergleicht die monatlichen Verkäufe in Zelle D2 mit 16.000 $
  • Wenn der Wert über 16.000 liegt, löst der Code ein Browser-Meldungsfeld mit einer Warnung aus.

Speichern Sie diesen Code und führen Sie ihn aus. Wenn es richtig funktioniert, sollten Sie die folgende Warnmeldung in Ihrem Browser sehen.

Verwenden Sie Google Sheets, um eine E-Mail basierend auf dem Zellenwert zu senden

Da Sie nun ein Google Apps-Skript haben, das eine E-Mail-Benachrichtigung senden kann, und ein weiteres Skript, das einen Wert aus einer Tabelle vergleichen kann, können Sie die beiden kombinieren und eine Benachrichtigung senden, anstatt eine Warnmeldung auszulösen.

Schritt 3: Alles zusammenfügen

Jetzt ist es an der Zeit, die beiden Skripts, die Sie erstellt haben, zu einem einzigen Skript zu kombinieren.

Zu diesem Zeitpunkt sollten Sie über eine Tabelle mit einer Registerkarte namens Sheet1 verfügen, die den Empfänger der Benachrichtigungs-E-Mail enthält. Die andere Registerkarte namens MyReport enthält alle Ihre Verkaufsinformationen.

Zurück im Skripteditor ist es an der Zeit, alles, was Sie bisher gelernt haben, in die Praxis umzusetzen.

Ersetzen Sie den gesamten Code im Skripteditor durch Ihre beiden Funktionen, die wie hier gezeigt bearbeitet wurden.

function CheckSales() { // Fetch the monthly sales var monthSalesRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("MyReport").getRange("D2"); var monthSales = monthSalesRange.getValue(); // Check totals sales if (monthSales < 16000){="" fetch="" the="" email="" address="" var="" emailrange="SpreadsheetApp.getActiveSpreadsheet().getSheetByName(" sheet1").getrange("b2");"="" var="" emailaddress="emailRange.getValues();" send="" alert="" email.="" var="" message='This month your sales were ' +="" monthsales;="" second="" column="" var="" subject='Low Sales Alert' ;="" mailapp.sendemail(emailaddress,="" subject,="" message);="" }="">

Beachten Sie die Änderungen hier.

Fügen Sie innerhalb der IF-Anweisung das SendEmail- Skript innerhalb der CheckSales()- Funktion innerhalb der Klammern der if-Anweisung ein.

Zweitens verketten Sie die Variable monthSales mit dem Zeichen + an das Ende der E-Mail-Nachricht .

Jetzt müssen Sie nur noch jeden Monat die CheckSales()-Funktion auslösen.

Dazu im Skripteditor:

  1. Klicken Sie auf den Menüpunkt Bearbeiten und dann auf Auslöser des aktuellen Projekts .
  2. Klicken Sie unten auf dem Bildschirm auf Neuen Auslöser erstellen .
  3. Wählen Sie die auszuführende CheckSales- Funktion aus.
  4. Ändern Sie Ereignisquelle auswählen in zeitgesteuert .
  5. Ändern  Sie die Art des zeitbasierten Triggers auswählen zu Monatstimer .

Klicken Sie auf Speichern , um den Trigger abzuschließen.

Verwenden Sie Google Sheets, um eine E-Mail basierend auf dem Zellenwert zu senden

Jeden Monat wird Ihr neues Skript ausgeführt und vergleicht den monatlichen Gesamtumsatz in Zelle D2 mit 16.000 $.

Wenn es weniger sind, sendet es eine Benachrichtigungs-E-Mail, die Sie über die niedrigen monatlichen Verkäufe informiert.

Verwenden Sie Google Sheets, um eine E-Mail basierend auf dem Zellenwert zu senden

Wie Sie sehen, bietet Google Apps Scripts viele Funktionen in einem kleinen Paket. Mit nur ein paar einfachen Codezeilen können Sie einige ziemlich erstaunliche Dinge tun.

Wenn Sie noch etwas experimentieren möchten, versuchen Sie, das Vergleichslimit von 16.000 $ in eine andere Zelle in der Tabelle einzufügen, und lesen Sie es dann in Ihr Skript ein, bevor Sie den Vergleich durchführen. Auf diese Weise können Sie das Limit ändern, indem Sie einfach den Wert im Blatt ändern.

Indem Sie den Code optimieren und neue Codeblöcke hinzufügen, können Sie auf diesen einfachen Dingen aufbauen, die Sie lernen, um schließlich einige erstaunliche Google Scripts zu erstellen.

Automatisierung des Prozesses

Soweit so gut, aber das obige Skript wird nur dann manuell ausgeführt, wenn wir keine Trigger setzen. Glücklicherweise hat Google die Konfiguration der ausgelösten Automatisierung vereinfacht. Hier sind die Schritte. 

Klicken Sie im Apps Script-Editor auf das Symbol Trigger in der linken Seitenleiste (es sieht aus wie eine kleine Uhr).

Klicken Sie auf den Link Neuen Trigger erstellenr oder auf den Link Trigger hinzufügen Schaltfläche in der unteren rechten Ecke der Trigger-Seite.

Wählen Sie im Dropdown-Menü Wählen Sie aus, welche Funktion ausgeführt werden soll sendEmails< aus eine i=4> Funktion.

Wählen Sie im Dropdown-Menü Ereignisquelle auswählen Zeitgesteuert

Wählen Sie im Dropdown-Menü Typ des zeitbasierten Triggers auswählen die gewünschte Häufigkeit aus (z. B. Tagestimer für tägliche E-Mails, Wochentimer für wöchentliche E-Mails usw.).

Wählen Sie ggf. den gewünschten Zeitraum oder Wochentag aus.

Klicken Sie auf Speichern um den Trigger zu erstellen.

Klicken Sie nach dem Speichern auf die Schaltfläche Bereitstellen in der oberen rechten Ecke und befolgen Sie die Anweisungen zum Beschriften und Definieren der Bereitstellung. Sie müssen der Automatisierung Berechtigungen zur Ausführung erteilen, und das Gleiche gilt für das Skript selbst.  

Da es in unserem Beispiel um das Versenden von Rechnungserinnerungen geht, gehen wir für den angegebenen Auslöser davon aus, dass diese monatlich erfolgen und dass es angemessen ist, sie jeden 1. des Monats zwischen 13:00 und 14:00 Uhr zu versenden. Aber natürlich können Sie die Häufigkeit und den Zeitpunkt je nach Bedarf ändern. 

So senden Sie eine E-Mail mit Anhang

Um Ihnen zu zeigen, wie Sie E-Mails mit Anhängen versenden, verwenden wir das Beispielblatt mit Rechnungserinnerungen wieder und überarbeiten das Snippet, um Anhänge einzuschließen. Jetzt beginnen wir mit der Funktion und die E-Mail-Vorlage kommt später im Code. sendEmailReminders

Wir sollten hervorheben, dass das Snippet unten E-Mail-Anhänge aus einem Google Drive-Ordner abruft, wobei es wichtig ist, die Ordner-ID anzugeben und die vorgegebene Namenskonvention einzuhalten. Mehr dazu unter Lassen Sie uns den Codeabschnitt aufschlüsseln

function sendEmailReminders() { // Das aktive Blatt abrufen var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // Den Datenbereich abrufen (ohne die Kopfzeile) var dataRange = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn()); // Werte aus dem Datenbereich abrufen var data = dataRange.getValues(); // Schleife durch die Datenzeilen for (var i = 0; i < data.length; i++) { var row = data[i]; // Werte aus jeder Spalte abrufen var businessName = row[0]; var email = row[1]; var billNumber = row[2]; var billAmount = row[3]; var dueDate = row[4]; var subject = row[5]; // E-Mail-Text var emailBody = "Lieber " + Firmenname + ",\n\n" + "Dies ist eine Erinnerung daran, dass Rechnung #" + Rechnungsnummer + " für $" + Rechnungsbetrag + " ist fällig am " + Fälligkeitsdatum + ".\n" + "Bitte finden Sie die beigefügte Rechnung.\n\n" + "Vielen Dank für Ihre prompte Aufmerksamkeit in dieser Angelegenheit."; // Hängen Sie die entsprechende Rechnung an – Sie müssen die korrekte Ordner-ID angeben, in der Ihre Rechnungen gespeichert sind var billFolderId = 'YOUR_FOLDER_ID_HERE'; var billFolder = DriveApp.getFolderById(invoiceFolderId); var billFiles = billFolder.getFilesByName(invoiceNumber + '.pdf'); // Vorausgesetzt, dass die Rechnungsdateien im PDF-Format vorliegen var billFile; if (invoiceFiles.hasNext()) { billFile = billFiles.next(); } else { // Wenn die Rechnungsdatei nicht gefunden wird, können Sie diese Zeile überspringen oder einen Fehler protokollieren console.error("Rechnungsdatei für Rechnungsnummer nicht gefunden: " +voiceNumber); weitermachen; } // E-Mail mit Anhang senden MailApp.sendEmail({ to: email, subject: subject, body: emailBody, attachments: [invoiceFile] }); } }

Lassen Sie uns den Code aufschlüsseln

1. Definieren Sie die Funktion:sendEmailReminders

Funktion sendEmailReminders() {

Die Zeile deklariert eine Funktion namens , die den Code zum Senden von E-Mail-Erinnerungen mit Anhängen enthält.sendEmailReminders

2. Holen Sie sich das aktive Blatt:

var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

Die Zeile ruft das aktive Blatt aus dem aktuell geöffneten Google Sheets-Dokument ab.

3. Rufen Sie den Datenbereich ab (ohne die Kopfzeile):

var dataRange = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn());

Diese Zeile ruft den Datenbereich im Blatt ab, mit Ausnahme der Kopfzeile. Es beginnt in der zweiten Zeile (Zeile 2) und der ersten Spalte (Spalte 1) und erstreckt sich bis zur letzten Zeile und letzten Spalte des Blattes.

Randbemerkung: Wenn Sie Ihr benutzerdefiniertes Blatt erstellen, müssen Sie es an Ihr Blatt anpassen. dataRange

4. Holen Sie sich die Werte aus dem Datenbereich:

var data = dataRange.getValues();

Diese Zeile ruft die Werte (Inhalte) aus dem im vorherigen Schritt definierten Zellbereich ab.

5. Durchlaufen Sie die Datenzeilen:

for (var i = 0; i < data.length; i++) { var row = data[i];

Diese Schleife durchläuft jede Zeile im Array. Die Variable stellt die aktuelle Datenzeile in jeder Iteration dar.fordatarow

6. Holen Sie sich die Werte aus jeder Spalte:

var businessName = row[0]; var email = row[1]; var billNumber = row[2]; var billAmount = row[3]; var dueDate = row[4]; var subject = row[5];

Die obigen Zeilen extrahieren die Werte aus jeder Spalte in der aktuellen Datenzeile. Jeder Wert wird später einer Variablen zugewiesen, damit er im Skript leichter referenziert werden kann. Die angegebenen Werte entsprechen unserem Beispielblatt. 

7. Erstellen Sie den E-Mail-Text:

var emailBody = "Lieber " + Firmenname + ",\n\n" + "Dies ist eine Erinnerung daran, dass Rechnung #" + Rechnungsnummer + " für $" + Rechnungsbetrag + " ist fällig am " + Fälligkeitsdatum + ".\n" + "Bitte finden Sie die beigefügte Rechnung.\n\n" + "Vielen Dank für Ihre prompte Aufmerksamkeit in dieser Angelegenheit.";

Der Code erstellt den E-Mail-Text anhand der aus dem Blatt extrahierten Werte. Der E-Mail-Text ist eine Zeichenfolge, die den Firmennamen, die Rechnungsnummer, den Rechnungsbetrag und das Fälligkeitsdatum enthält.

8. Holen Sie sich die entsprechende Rechnungsdatei:

var billFolderId = 'YOUR_FOLDER_ID_HERE'; var billFolder = DriveApp.getFolderById(invoiceFolderId); var billFiles = billFolder.getFilesByName(invoiceNumber + '.pdf'); var Rechnungsdatei; if (invoiceFiles.hasNext()) { billFile = billFiles.next(); } else { console.error("Rechnungsdatei für Rechnungsnummer nicht gefunden: " + Rechnungsnummer); weitermachen; }

Diese Zeilen rufen die Rechnungsdatei ab, die der aktuellen Zeile zugeordnet ist. 

Zunächst wird über seine Ordner-ID auf den Rechnungsdateiordner zugegriffen. Ersetzen Sie unbedingt die tatsächliche Ordner-ID. YOUR_FOLDER_ID_HERE

Beachten Sie, dass die Namenskonvention in unserem Beispiel lautet und die tatsächliche Rechnung den Namen „123456.pdf“ trägt. Wenn Ihre Anhangsdateien einen anderen Namen haben, müssen Sie die Formatierung aktualisieren. (Rechnungsnummer + '.pdf')

Als nächstes sucht das Skript nach einer Datei mit demselben Namen wie die Rechnungsnummer (vorausgesetzt, die Datei liegt im PDF-Format vor). 

Wenn die Datei gefunden wird, wird sie der Variablen zugewiesen. Andernfalls protokolliert das Skript eine Fehlermeldung und fährt mit der nächsten row.invoiceFile fort

9. Senden Sie die E-Mail mit dem Anhang:

MailApp.sendEmail({ to: email, subject: subject, body: emailBody, attachments: [invoiceFile] });

Diese Zeile sendet den Text und die E-Mail-Anhänge. Hier sind die Ergebnisse, die Sie erhalten sollten. Außerdem gelten alle Automatisierungsschritte wie zuvor beschrieben, und es ist sinnvoll, den monatlichen Trigger beizubehalten, da es hier um den Versand von Rechnungserinnerungen geht. 

Senden Sie eine HTML-E-Mail mit GSheets

Um eine HTML-E-Mail zu senden, können Sie einige recht einfache Änderungen am zuvor beschriebenen Skript vornehmen. Hier ist es: 

function sendEmailReminders() { // Das aktive Blatt abrufen var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // Den Datenbereich abrufen (ohne die Kopfzeile) var dataRange = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn()); // Werte aus dem Datenbereich abrufen var data = dataRange.getValues(); // Schleife durch die Datenzeilen for (var i = 0; i < data.length; i++) { var row = data[i]; // Werte aus jeder Spalte abrufen var businessName = row[0]; var email = row[1]; var billNumber = row[2]; var billAmount = row[3]; var dueDate = row[4]; var subject = row[5]; // HTML-E-Mail-Text var emailBodyHtml = "<p>Lieber " + Firmenname + ",</p>" + "<p>Dies ist eine Erinnerung daran, dass Rechnung #" + Rechnungsnummer + " für $" + Rechnungsbetrag + " ist fällig am " + Fälligkeitsdatum + ".</p>" + "<p>Die beigefügte Rechnung finden Sie hier.</p>" + "<p>Vielen Dank für Ihre schnelle Bearbeitung dieser Angelegenheit.</p>"; // Hängen Sie die entsprechende Rechnung an – Sie müssen die korrekte Ordner-ID angeben, in der Ihre Rechnungen gespeichert sind var billFolderId = 'YOUR_FOLDER_ID_HERE'; var billFolder = DriveApp.getFolderById(invoiceFolderId); var billFiles = billFolder.getFilesByName(invoiceNumber + '.pdf'); // Vorausgesetzt, dass die Rechnungsdateien im PDF-Format vorliegen var billFile; if (invoiceFiles.hasNext()) { billFile = billFiles.next(); } else { // Wenn die Rechnungsdatei nicht gefunden wird, können Sie diese Zeile überspringen oder einen Fehler protokollieren console.error("Rechnungsdatei für Rechnungsnummer nicht gefunden: " +voiceNumber); weitermachen; } // E-Mail mit Anhang senden MailApp.sendEmail({ to: email, subject: subject, htmlBody: emailBodyHtml, attachments: [invoiceFile] }); } }

In dieser Version wird der Klartext durch eine Variable ersetzt, die HTML-formatierten Inhalt enthält. emailBodyemailBodyHtml

Beim Aufrufen der Funktion wird auch die Eigenschaft „body“ durch die Eigenschaft ersetzt, die die E-Mail als HTML-email.MailApp.sendEmail()htmlBody sendet

Randnotizen: 

Der Einfachheit halber verwenden wir im Skript „statt“. Beide Optionen würden funktionieren, sind aber auf jeden Fall besser lesbar. Sie können das Skript jedoch jederzeit neu formatieren und den Verkettungsoperator bei der String-Interpolation durch Platzhalter ersetzen. varconstconst${Ausdruck}

Außerdem enthält keines der Skripte Funktionen, da diese für unsere Beispiele nicht erforderlich waren. Aber natürlich ist es auch möglich, diese Art von Skripten hinzuzufügen und sogar zu automatisieren. bccbcc

Schließlich können Sie die Sache aufpeppen, indem Sie benutzerdefinierte CSS-Stile hinzufügen. Sehen Sie sich die aktualisierte Funktion unten an. var emailBodyHtml =

// HTML-E-Mail-Text mit CSS-Stilen var emailBodyHtml = "<html><head><style>" + "body {Schriftfamilie: Arial, serifenlos;}" + "p {font-size: 14px;}" + ".invoice-info {font-weight: Bold; Farbe: #4a4a4a;}" + "</style></head><body>" + "<p>Sehr geehrte Damen und Herren <span class='invoice-info'>" + Firmenname + "</span>,</p>" + "<p>Dies ist eine Erinnerung daran, dass Rechnung #<span class='invoice-info'>" + Rechnungsnummer + "</span> für $<span class='invoice-info'>" + Rechnungsbetrag + "</span> ist fällig am <span class='invoice-info'>" + Fälligkeitsdatum + "</span>.</p>" + "<p>Die beigefügte Rechnung finden Sie hier.</p>" + "<p>Vielen Dank für Ihre schnelle Bearbeitung dieser Angelegenheit.</p>" + "</body></html>";

Profi-Tipps: 

  • Gehen Sie vorsichtig damit um, einige Postfachanbieter unterstützen und stellen stark stilisierte E-Mails möglicherweise nicht richtig oder überhaupt nicht dar. <Stil>
  • Verwenden Sie Mailtrap-E-Mail-Tests, um zu sehen, inwieweit Postfachanbieter Ihre HTML-E-Mails unterstützen. 
  • Um es noch einmal zu betonen: Wenn Sie mit einem hohen Volumen senden müssen, ist es immer am besten, einen richtigen MTA anstelle der Funktion zu verwenden. sendEmail
  • Beachten Sie in diesem Zusammenhang die Einschränkungen Ihres Gmail-Kontos. Diese unterscheiden sich für Google Workspace und/oder Ihr privates Konto. 

Wie versende ich Trigger-E-Mails aus Google Sheets?

Wenn eine Zelle einen bestimmten Wert erreicht

Wir zeigen Ihnen, wie Sie eine automatische E-Mail basierend auf einem Zellenwert versenden. In unserem Beispiel wird die Rechnung gesendet, wenn die Zelle „Rechnungsbetrag“ „0“ erreicht, was auf einen abgewanderten Kunden hinweist. 

Der angegebene Zellenwert löst eine benutzerdefinierte Abwanderungs-E-Mail aus, um den Kunden sofort zu kontaktieren. Und auch hier bleiben die Automatisierungsschritte gleich, Sie können weiterhin den monatlichen Trigger für diese E-Mails verwenden. 

Beachten Sie, dass es sich bei dem Skript um dasselbe handelt, das wir zum Versenden von HTML-E-Mails und Anhängen verwendet haben. Es verfügt jedoch über eine weitere Funktionsebene zur Einführung der beschriebenen bedingten Logik. Hier ist der Code. 

function sendEmailReminders() { // Das aktive Blatt abrufen var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // Den Datenbereich abrufen (ohne die Kopfzeile) var dataRange = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn()); // Werte aus dem Datenbereich abrufen var data = dataRange.getValues(); // Schleife durch die Datenzeilen for (var i = 0; i < data.length; i++) { var row = data[i]; // Werte aus jeder Spalte abrufen var businessName = row[0]; var email = row[1]; var billNumber = row[2]; var billAmount = row[3]; var dueDate = row[4]; var subject = row[5]; // Bestimmen Sie den E-Mail-Text basierend auf dem Rechnungsbetrag var emailBodyHtml; if (invoiceAmount == 0) { // Kunden-E-Mail abwandern subject = "Kundenabwanderungsbenachrichtigung"; emailBodyHtml = "<html><head><style>" + "body {Schriftfamilie: Arial, serifenlos;}" + "p {font-size: 14px;}" + ".invoice-info {font-weight: Bold; Farbe: #4a4a4a;}" + "</style></head><body>" + "<p>Lieber " + Firmenname + ",</p>" + "<p>Wir haben festgestellt, dass Ihr Rechnungsbetrag 0 $ beträgt. Es tut uns leid, dass Sie gehen, und würden uns über jede Rückmeldung darüber freuen, warum Sie sich entschieden haben, unsere Dienste nicht mehr zu nutzen.</p>" + "<p>Wenn wir etwas tun können, um unsere Dienstleistungen zu verbessern oder Ihr Geschäft zurückzugewinnen, lassen Sie es uns bitte wissen.</p>" + "<p>Vielen Dank für Ihr bisheriges Geschäft.</p>" + "</body></html>"; } else { // Reguläre Rechnungs-E-Mail emailBodyHtml = "<html><head><style>" + "body {Schriftfamilie: Arial, serifenlos;}" + "p {font-size: 14px;}" + ".invoice-info {font-weight: Bold; Farbe: #4a4a4a;}" + "</style></head><body>" + "<p>Sehr geehrte Damen und Herren <span class='invoice-info'>" + Firmenname + "</span>,</p>" + "<p>Dies ist eine Erinnerung daran, dass Rechnung #<span class='invoice-info'>" + Rechnungsnummer + "</span> für $<span class='invoice-info'>" + Rechnungsbetrag + "</span> ist fällig am <span class='invoice-info'>" + Fälligkeitsdatum + "</span>.</p>" + "<p>Die beigefügte Rechnung finden Sie hier.</p>" + "<p>Vielen Dank für Ihre schnelle Bearbeitung dieser Angelegenheit.</p>" + "</body></html>"; } // Hängen Sie die entsprechende Rechnung an – Sie müssen die korrekte Ordner-ID angeben, in der Ihre Rechnungen gespeichert sind var billFolderId = 'YOUR_FOLDER_ID_HERE'; var billFolder = DriveApp.getFolderById(invoiceFolderId); var billFiles = billFolder.getFilesByName(invoiceNumber + '.pdf'); // Vorausgesetzt, dass die Rechnungsdateien im PDF-Format vorliegen var billFile; if (invoiceFiles.hasNext()) { billFile = billFiles.nächste(); } else { // Wenn die Rechnungsdatei nicht gefunden wird, können Sie diese Zeile überspringen oder einen Fehler protokollieren console.error("Rechnungsdatei für Rechnungsnummer nicht gefunden: " +voiceNumber); weitermachen; } // E-Mail mit Anhang senden MailApp.sendEmail({ to: email, subject: subject, htmlBody: emailBodyHtml, attachments: [invoiceFile] }); } }

Bis zum Codebruch 

Beachten Sie, dass wir uns nur auf den Inhalt der Funktion konzentrieren, um eine Wiederholung des bereits Beschriebenen zu vermeiden. emailBodyHtml

Der aktualisierte Teil des Codes bestimmt den Inhalt des E-Mail-Textes basierend auf dem Rechnungsbetrag. Wenn der Rechnungsbetrag ist, wird davon ausgegangen, dass es sich um einen Abwanderungskunden handelt, und es wird eine andere E-Mail-Vorlage verwendet. Hier ist eine Aufschlüsselung des Codes: „0“

var emailBodyHtml;

Es deklariert eine Variable mit dem Namen und speichert den Inhalt des E-Mail-Texts. Und es bleibt zunächst undefiniert.emailBodyHtml

if (invoiceAmount == 0) { ... }

Die Anweisung prüft, ob der Rechnungsbetrag 0 ist. Wenn dies der Fall ist, wird der Code in den geschweiften Klammern ausgeführt. Dieser Block enthält die E-Mail-Vorlage für die Abwanderung von Kunden.if(`{}`)

subject = "Benachrichtigung zur Kundenabwanderung";

Die Zeile setzt den E-Mail-Betreff auf für abwandernde Kunden. "Abwanderungskundenbenachrichtigung"

emailBodyHtml = "<html><head><style>" + ...

 Die Zeile legt den Wert der Variablen für die E-Mail-Vorlage zur Kundenabwanderung fest. Die Vorlage ist eine HTML-Zeichenfolge mit im Abschnitt definierten CSS-Stilen. Der E-Mail-Text enthält Platzhalter für den Firmennamen und eine Nachricht an den Kunden.emailBodyHtml<head>

} anders { ... }

Der Block wird ausgeführt, wenn der Rechnungsbetrag nicht 0 ist. Er setzt die Variable auf die reguläre Rechnungs-E-Mail-Vorlage. Die E-Mail-Vorlage ist eine HTML-Zeichenfolge mit im Abschnitt definierten CSS-Stilen. Der E-Mail-Text enthält Platzhalter für den Firmennamen, die Rechnungsnummer, den Rechnungsbetrag und das Fälligkeitsdatum.elseemailBodyHtml<head>

Mithilfe dieser bedingten Logik sendet das Skript einen anderen E-Mail-Text, je nachdem, ob der Rechnungsbetrag (Abwanderungskunde) oder ungleich Null (reguläre Rechnung) ist. 0

Wenn sich der Zellenwert ändert

Jetzt nehmen wir dasselbe Skript wie oben und erweitern es, um einen anderen Anwendungsfall abzudecken – ein Kunde führt ein Upgrade durch und der Account Manager muss eine „Dankeschön“-E-Mail mit einer Rechnung senden. 

Zur Erläuterung: Die Idee besteht darin, dass der Account Manager jeden Monat ein neues Blatt (in unserem Beispiel Blatt 2) mit den Anmeldeinformationen der Kunden hat. 

Der Code vergleicht nun die beiden Blätter und sendet anstelle der regulären Rechnungs-E-Mail automatisch eine „Dankeschön“-E-Mail an Kunden, die ein Upgrade durchgeführt haben (ihren Rechnungsbetrag). a> ist größer im Vergleich zum vorherigen). 

Außerdem ist es nicht nötig, die Abwanderungs-E-Mail anzufassen, da die Möglichkeit besteht, dass jemand beschlossen hat, unseren imaginären Service nicht mehr zu nutzen. Hier ist das Skript.

function sendEmailReminders() { var sheet1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1"); var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2"); var dataRange1 = sheet1.getRange(2, 1, sheet1.getLastRow() - 1, sheet1.getLastColumn()); var dataRange2 = sheet2.getRange(2, 1, sheet2.getLastRow() - 1, sheet2.getLastColumn()); var data1 = dataRange1.getValues(); var data2 = dataRange2.getValues(); for (var i = 0; i < data1.length; i++) { var row1 = data1[i]; var row2 = data2[i]; var businessName = row1[0]; var email = row1[1]; var billNumber = row1[2]; var billAmount1 = parseFloat(row1[3].toString().replace('$', '').replace(',', ' 39;.')); var billAmount2 = parseFloat(row2[3].toString().replace('$', '').replace(',', ' 39;.')); if (isNaN(invoiceAmount1) || isNaN(invoiceAmount2)) { console.error("Ungültige Rechnungsbeträge für Unternehmen: " + Geschäftsname + ". RechnungAmount1: " + RechnungAmount1 + ", RechnungAmount2: " + RechnungAmount2 ); weitermachen; } var dueDate = row1[4]; var Betreff; var emailBodyHtml; if (invoiceAmount1 < billAmount2) { console.log("Senden der E-Mail „Vielen Dank für das Upgrade“ an " + email + ". billAmount1: " + billAmount1 + ", billAmount2: " + Rechnungsbetrag2); subject = "Vielen Dank für das Upgrade"; emailBodyHtml = "<html><body>" + "<p>Lieber " + Firmenname + ",</p>" + "<p>Vielen Dank für das Upgrade! Wir schätzen Ihr Geschäft und freuen uns darauf, Sie zu bedienen.</p>" + "<p>Mit freundlichen Grüßen</p>" + "<p>Ihr Unternehmen</p>" + "</body></html>"; MailApp.sendEmail({ to: email, subject: subject, htmlBody: emailBodyHtml }); } else if (invoiceAmount1 == 0) { console.log("Senden der E-Mail „Kundenabwanderungsbenachrichtigung“ an " + email + ". billAmount1: " + billAmount1); subject = "Benachrichtigung zur Kundenabwanderung"; emailBodyHtml = "<html><head><style>" + "body {Schriftfamilie: Arial, serifenlos;}" + "p {font-size: 14px;}" + ".invoice-info {font-weight: Bold; Farbe: #4a4a4a;}" + "</style></head><body>" + "<p>Lieber " + Firmenname + ",</p>" + "<p>Wir haben festgestellt, dass Ihr Rechnungsbetrag 0 $ beträgt. Es tut uns leid, dass Sie gehen, und würden uns über jede Rückmeldung darüber freuen, warum Sie sich entschieden haben, unsere Dienste nicht mehr zu nutzen.</p>" + "<p>Wenn wir etwas tun können, um unsere Dienstleistungen zu verbessern oder Ihr Geschäft zurückzugewinnen, lassen Sie es uns bitte wissen.</p>" + "<p>Vielen Dank für Ihr bisheriges Geschäft.</p>" + "</body></html>"; MailApp.sendEmail({ to: email, subject: subject, htmlBody:emailBodyHtml }); } else { console.log("Senden einer 'Rechnungserinnerungs-E-Mail an " + email + ". RechnungAmount1: " + RechnungAmount1 + ", RechnungAmount2: " + RechnungAmount2); subject = "Rechnungserinnerung"; emailBodyHtml = "<html><head><style>" + "body {Schriftfamilie: Arial, serifenlos;}" + "p {font-size: 14px;}" + ".invoice-info {font-weight: Bold; Farbe: #4a4a4a;}" + "</style></head><body>" "<p>Sehr geehrte Damen und Herren <span class='invoice-info'>" + Firmenname + "</span>,</p>" + "<p>Dies ist eine Erinnerung daran, dass Rechnung #<span class='invoice-info'>" + Rechnungsnummer + "</span> für $<span class='invoice-info'>" + billAmount1 + "</span> ist fällig am <span class='invoice-info'>" + Fälligkeitsdatum + "</span>.</p>" + "<p>Die beigefügte Rechnung finden Sie hier.</p>" + "<p>Vielen Dank für Ihre schnelle Bearbeitung dieser Angelegenheit.</p>" + "</body></html>"; // Hängen Sie die entsprechende Rechnung an – Sie müssen die korrekte Ordner-ID angeben, in der Ihre Rechnungen gespeichert sind var billFolderId = 'YOUR_FOLDER_ID_HERE'; var billFolder = DriveApp.getFolderById(invoiceFolderId); var billFiles = billFolder.getFilesByName(invoiceNumber + '.pdf'); // Vorausgesetzt, dass die Rechnungsdateien im PDF-Format vorliegen var billFile; if (invoiceFiles.hasNext()) { billFile = billFiles.next(); } else { // Wenn die Rechnungsdatei nicht gefunden wird, können Sie diese Zeile überspringen oder einen Fehler protokollieren console.error("Rechnungsdatei für Rechnungsnummer nicht gefunden: " +voiceNumber); weitermachen; } MailApp.sendEmail({ to: email, subject: subject, htmlBody: emailBodyHtml, attachments: [invoiceFile] }); } } }</p>" + "</body></html>"; // Hängen Sie die entsprechende Rechnung an – Sie müssen die korrekte Ordner-ID angeben, in der Ihre Rechnungen gespeichert sind var billFolderId = 'YOUR_FOLDER_ID_HERE'; var billFolder = DriveApp.getFolderById(invoiceFolderId); var billFiles = billFolder.getFilesByName(invoiceNumber + '.pdf'); // Vorausgesetzt, dass die Rechnungsdateien im PDF-Format vorliegen var billFile; if (invoiceFiles.hasNext()) { billFile = billFiles.next(); } else { // Wenn die Rechnungsdatei nicht gefunden wird, können Sie diese Zeile überspringen oder einen Fehler protokollieren console.error("Rechnungsdatei für Rechnungsnummer nicht gefunden: " +voiceNumber); weitermachen; } MailApp.sendEmail({ to: email, subject: subject, htmlBody: emailBodyHtml, attachments: [invoiceFile] }); } } }</p>" + "</body></html>"; // Hängen Sie die entsprechende Rechnung an – Sie müssen die korrekte Ordner-ID angeben, in der Ihre Rechnungen gespeichert sind var billFolderId = 'YOUR_FOLDER_ID_HERE'; var billFolder = DriveApp.getFolderById(invoiceFolderId); var billFiles = billFolder.getFilesByName(invoiceNumber + '.pdf'); // Vorausgesetzt, dass die Rechnungsdateien im PDF-Format vorliegen var billFile; if (invoiceFiles.hasNext()) { billFile = billFiles.next(); } else { // Wenn die Rechnungsdatei nicht gefunden wird, können Sie diese Zeile überspringen oder einen Fehler protokollieren console.error("Rechnungsdatei für Rechnungsnummer nicht gefunden: " +voiceNumber); weitermachen; } MailApp.sendEmail({ to: email, subject: subject, htmlBody: emailBodyHtml, attachments: [invoiceFile] }); } } }

Bis zum Codebruch 

1. Das Skript beginnt damit, Verweise auf Blatt1 und Blatt2 abzurufen.

var sheet1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1"); var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2");

2. Anschließend werden die Daten aus beiden Blättern abgerufen, beginnend mit der zweiten Zeile, um Kopfzeilen auszuschließen.

var dataRange1 = sheet1.getRange(2, 1, sheet1.getLastRow() - 1, sheet1.getLastColumn()); var dataRange2 = sheet2.getRange(2, 1, sheet2.getLastRow() - 1, sheet2.getLastColumn()); var data1 = dataRange1.getValues(); var data2 = dataRange2.getValues();

3. Das Skript iteriert über die Zeilen in beiden Blättern (vorausgesetzt, die Anzahl der Zeilen ist in beiden Blättern gleich). Es vergleicht die Rechnungsbeträge von Blatt1 und Blatt2 für jede entsprechende Zeile.

for (var i = 0; i < data1.length; i++) { var row1 = data1[i]; var row2 = data2[i]; // Rechnungsbeträge aus beiden Blättern abrufen var billAmount1 = parseFloat(row1[3].toString().replace('$', '').replace(' ,', '.')); var billAmount2 = parseFloat(row2[3].toString().replace('$', '').replace(',', ' 39;.'));

Kopieren

4. Anschließend prüft das Skript die Bedingungen für den Versand unterschiedlicher E-Mail-Typen anhand des Vergleichs der Rechnungsbeträge von Sheet1 und Sheet2.

if (invoiceAmount1 < billAmount2) { // „Vielen Dank für das Upgrade“ senden email } else if (invoiceAmount1 == 0) { // „Kundenabwanderungsbenachrichtigung“ senden email } else { // „Rechnungserinnerung“ senden Email }

Kopieren

Der wichtigste Vergleich besteht darin, zu prüfen, ob der Rechnungsbetrag in Tabelle 1 geringer ist als der Rechnungsbetrag in Tabelle 2 für dieselbe Zeile (d. h. denselben Kunden). Wenn „true“, geht das Skript davon aus, dass der Kunde ein Upgrade durchgeführt hat, und sendet eine E-Mail. Andernfalls prüft es, ob andere Bedingungen vorliegen (Abwanderung oder regelmäßige Rechnungserinnerungen) und sendet die entsprechende E-Mail.if (invoiceAmount1 < billAmount2)"Vielen Dank für das Upgrade"

Wenn eine Google Sheets-Datei aktualisiert wird

Nun lohnt es sich, einen etwas anderen Anwendungsfall zu besprechen, bei dem andere Personen als der Account Manager Zugriff auf die Tabelle haben. 

Nehmen wir an, dass unser Account Manager einen ganzen Tag damit verbracht hat, Kunden zu treffen und ihre Fragen zu beantworten. Den Kunden steht eine Tabelle zur Verfügung, in der sie das Problem kurz beschreiben und einen Slot buchen können. 

Okay, es gibt viel bessere Möglichkeiten, Kundenbuchungen und -anfragen zu bearbeiten. Für das Tutorial bleiben wir jedoch bei diesem Ansatz.

Schritt 1

Zuerst müssen wir eine Tabelle erstellen. Wie unten gezeigt, ist unsere ziemlich einfach und enthält nur drei Zeilen mit Manager, Zeitfenster und Abfrage.

Schritt 2

Als nächstes benötigen Sie Google-Skripte, um E-Mails auszulösen, wenn jemand das Blatt mit seiner Anfrage aktualisiert und so einen Slot bucht. Hier ist ein Beispiel. 

//@OnlyCurrentDoc function processEdit(e) { MailApp.sendEmail({ to: "[email protected]" ;, Betreff: „Neue Buchung – Kundenzeitfenster“, Text: „Ein Kunde hat eine Frage an Sie.“ });

Kopieren

Um Ihnen das Verständnis zu erleichtern, lohnt es sich, die Hauptfunktionen zu besprechen. 

  • //@OnlyCurrentDoc – diese Annotation signalisiert, dass das Skript nur im angegebenen Google Sheet ausgeführt werden soll. Durch das Entfernen der Anmerkung wurde das Skript in Ihren anderen Dateien aktiviert. 
  • Funktion processEdit () – ein Trigger (den wir im nächsten Schritt einrichten) führt das Skript mit dieser Funktion aus. Die Funktion legt einfach den Prozess fest, um jedes Mal eine E-Mail zu erhalten, wenn jemand das Blatt aktualisiert.
  • (e) – Diese Anmerkung stellt das Objekt mit Daten zu den Änderungen dar. Es verfügt über eine Range-Eigenschaft, um zu signalisieren, dass ein Bereich oder eine Zelle bearbeitet wurde. 
  • MailApp – ein Objekt, das die Funktion zum Weiterleiten der E-Mail verwendet. 

Bevor Sie fortfahren, können Sie das Blatt und den Code testen. Wenn Sie das Beispielblatt verwenden, füllen Sie einfach eine der Zellen unter der Spalte „Abfrage“ aus und führen Sie das Skript aus. Die E-Mail sollte sofort in Ihrem Posteingang eintreffen, allerdings ist das Skript noch nicht automatisiert.

Schritt 3

Es ist an der Zeit, einen Auslöser für den automatischen E-Mail-Versand festzulegen und zu autorisieren. Klicken Sie in Apps Script im Seitenmenü auf das Weckersymbol. Klicken Sie dann auf „…neuen Trigger erstellen“. 

Wählen Sie im Popup-Fenster zur Triggerkonfiguration die folgenden Kriterien aus.

  • ProzessBearbeiten
  • Kopf
  • Aus Tabellenkalkulation
  • Beim Bearbeiten

Hinweis: Es ist in Ordnung, wenn Sie die Standardeinstellungen für Fehlerbenachrichtigungen beibehalten, aber Sie können sie ändern das ggf. Es hat keinen Einfluss auf die Gesamtfunktion des Triggers oder des Skripts. Dies kann für alle Google-Skripte gelten, die Sie automatisieren möchten. 

Klicken Sie auf Speichern, autorisieren Sie den Auslöser für Ihr Konto und Sie sehen ihn im  Auslöser Liste. Stellen Sie außerdem sicher, dass Sie auf die Schaltfläche Bereitstellen klicken, um den Auslöser zu aktivieren. 

Jetzt können Sie zum Blatt zurückkehren, eine weitere Zelle in der Spalte „Abfrage“ füllen und prüfen, ob Sie die automatische Benachrichtigung erhalten haben. 

Randbemerkung: Sie können das Blatt nach Ihren Wünschen anpassen, aber das bedeutet, dass Sie auch das Skript anpassen müssen.

Tags: #HOW-TO

Ingwer 2.7.53.0

Ingwer 2.7.53.0

Ginger ist eine kostenlose Rechtschreib- und Grammatikprüfung.

Blöcke

Blöcke

Blocks ist ein Denkspiel für Grundschüler der 3. Klasse, mit dem sie ihre Erkennungs- und Sehfähigkeiten trainieren können. Es wird von Lehrern in das Programm zur Unterstützung des IT-Unterrichts aufgenommen.

Mathway

Mathway

Mathway ist eine sehr nützliche App, die Ihnen bei der Lösung all jener mathematischen Probleme helfen kann, die ein komplexeres Werkzeug als den integrierten Taschenrechner Ihres Geräts erfordern.

Adobe Presenter

Adobe Presenter

Adobe Presenter ist eine E-Learning-Software von Adobe Systems, die auf der Microsoft Windows-Plattform als Microsoft PowerPoint-Plug-in verfügbar ist.

Tukan 2.3.0

Tukan 2.3.0

Toucan ist eine Bildungstechnologieplattform. Es ermöglicht Ihnen, eine neue Sprache zu lernen, während Sie auf gängigen, alltäglichen Websites surfen.

ENetViet 24.2

ENetViet 24.2

eNetViet ist eine Anwendung, die Eltern mit der Schule verbindet, in der ihre Kinder studieren, damit sie die aktuelle Lernsituation ihres Kindes klar verstehen können.

Duolingo

Duolingo

Duolingo – Sprachen kostenlos lernen, oder einfach Duolingo, ist ein Bildungsprogramm, mit dem Sie viele verschiedene Sprachen lernen und üben können.

RapidTyping

RapidTyping

RapidTyping ist ein praktisches und benutzerfreundliches Tastatur-Trainingstool, mit dem Sie Ihre Tippgeschwindigkeit verbessern und Rechtschreibfehler reduzieren können. Mit Lektionen für viele verschiedene Niveaus bringt Ihnen RapidTyping bei, wie Sie tippen oder bestehende Fertigkeiten verbessern.

MathType 7.4.10.53

MathType 7.4.10.53

MathType ist eine interaktive Gleichungssoftware des Entwicklers Design Science (Dessci), mit der Sie mathematische Notationen für Textverarbeitung, Präsentationen, E-Learning usw. erstellen und kommentieren können. Dieser Editor wird auch zum Erstellen von TeX-, LaTeX- und MathML-Dokumenten verwendet.

Grammatikalisch

Grammatikalisch

Die KI-gestützten Apps von Grammarly helfen Menschen, effektiver zu kommunizieren. Millionen von Benutzern verlassen sich täglich auf Grammarly, um ihre Nachrichten, Dokumente und Social-Media-Beiträge klarer, fehlerfrei und professioneller zu gestalten.