Wenn farbiger Wert in Spalte, dann diesen Wert mit Email senden (Google Script)
Hallo, Ich bin reiner Anfänger im Programmieren und brauche mal Eure Hilfe.
Ich habe auf Arbeit die Aufgabe bekommen, die Kontrolle der Verbandskästen zu digitalisieren. Das gelingt mir auch. Ich bekomme vor Ablauf der Haltbarkeit der Komponenten immer eine EMail. Dabei färbt sich die Komponente rot. Das ist mit Google-Script so programmiert. Per QR-Code kann ich über ein Formular die Ablaufdaten der Komponenten (bei Austausch) aktualisieren bzw. eine Kontrolle durchführen und das nächste Kontrolldatum hinterlegen. Das Datum aktualisiert sich selbst und nimmt immer das aktuellste. Das ist bis hierher top.
In der Email wird dann nur darauf hingewiesen, dass evtl. etwas abgelaufen ist oder eine Kontrolle ansteht (mit eingebetteten Link zur Tabelle im Drive)!
Nun wollte ich als Bonus, dass der rotgefärbte Wert (Spalte B / Tab2) in der Spalte ausgelesen wird (Können auch mehrere gleichzeitig sein!) und mir auch diese Komponente(n) als EMail mitgeteilt wird/werden. Gibt es da eine Möglichkeit, das mit Google Script zu realisieren? Es wäre cool, wenn man den Code in diesem Code (Bild) integrieren könnte!
Oder halt extra! Vielleicht für mich auch beides von Vorteil!
Der AutoCheck wird per Trigger täglich durchgeführt!
Gruß Frank
Ich habe auf Arbeit die Aufgabe bekommen, die Kontrolle der Verbandskästen zu digitalisieren. Das gelingt mir auch. Ich bekomme vor Ablauf der Haltbarkeit der Komponenten immer eine EMail. Dabei färbt sich die Komponente rot. Das ist mit Google-Script so programmiert. Per QR-Code kann ich über ein Formular die Ablaufdaten der Komponenten (bei Austausch) aktualisieren bzw. eine Kontrolle durchführen und das nächste Kontrolldatum hinterlegen. Das Datum aktualisiert sich selbst und nimmt immer das aktuellste. Das ist bis hierher top.
In der Email wird dann nur darauf hingewiesen, dass evtl. etwas abgelaufen ist oder eine Kontrolle ansteht (mit eingebetteten Link zur Tabelle im Drive)!
Nun wollte ich als Bonus, dass der rotgefärbte Wert (Spalte B / Tab2) in der Spalte ausgelesen wird (Können auch mehrere gleichzeitig sein!) und mir auch diese Komponente(n) als EMail mitgeteilt wird/werden. Gibt es da eine Möglichkeit, das mit Google Script zu realisieren? Es wäre cool, wenn man den Code in diesem Code (Bild) integrieren könnte!
Oder halt extra! Vielleicht für mich auch beides von Vorteil!
Der AutoCheck wird per Trigger täglich durchgeführt!
Gruß Frank
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 33005156258
Url: https://administrator.de/contentid/33005156258
Ausgedruckt am: 24.11.2024 um 17:11 Uhr
9 Kommentare
Neuester Kommentar
let items = [];
// ...
// for (i=5; .......
// ...
if (ALLE.getRange(i,3).getBackground().toLowerCase() == "#ff0000"){
items.push(ALLE.getRange(i,4).getValue());
}
// ...
// }
// ..
if (items.length > 0){
MailApp.sendEmail({
to: "recipient@example.com",
subject: "BlaBlub",
htmlBody: "<h2>Items:</h2><br/>" + items.join('<br/>')
});
}
https://developers.google.com/apps-script/reference/mail/mail-app?hl=de# ...
Gruß Katrin
// Funktion die nach Zellen mit bestimmter Vordergrundfarbe sucht
function SucheFarbigeZellen(rng,color) {
let cells = [];
for (let r = 1;r <= rng.getNumRows();r++){
for (let c = 1;c <= rng.getNumColumns();c++){
if (rng.getCell(r,c).getFontColorObject().asRgbColor().asHexString().toLowerCase() == color.toLowerCase()){
cells.push(rng.getCell(r,c));
}
}
}
return cells;
}
// !!! <<<<<<<<<< die folgende Funktion starten >>>>>>>> !!!
function startCheck () {
// leeres Array erstellen
let items = [];
// Tabellenblatt auf dem gearbeitet wird
let ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Tabellenblatt2');
// rot gefärbte Zellen im Bereich Spalte B5:B(n) des Sheets suchen und Werte dem Array hinzufügen
SucheFarbigeZellen(ws.getRange(5,2,ws.getLastRow(),1),'#ff0000').forEach(x => {
if (x.getValue() != "nächste Kontrolle"){
items.push(x.getValue());
}
});
// wenn es rote items gibt
if (items.length > 0){
// Mail an mehrere Empfänger senden
MailApp.sendEmail({
to: "user1@domain.de",
bcc: "user2@domain.de,user3@domain.de",
subject: "Abgelaufenes Material",
htmlBody: "<h3>Abgelaufene Produkte:</h3><p><ul><li>" + items.join('</li><li>') + "</li></ul></p>"
});
SpreadsheetApp.getUi().alert("Hinweis","E-Mail wurde gesendet!",SpreadsheetApp.getUi().ButtonSet.OK);
} else{
SpreadsheetApp.getUi().alert("Hinweis","Keine roten Werte gefunden!",SpreadsheetApp.getUi().ButtonSet.OK);
}
}
Silbertablett, i'm out. 🖖
Du hast die falsche Funktion ausgeführt!
Schau in den Code dort steht in den Kommentaren extra ganz klar in Zeile 14 welche Funktion du starten musst, die erste Funktion darf nicht gestartet werden denn die wird mit Parametern aus der anderen aufgerufen, deswegen kommt auch der Fehler.
Wozu schreibe ich die Kommentare da wohl rein? 🤔 Genau, damit man sie vorher liest und nicht blind Copy n' pasted! Jeder halbwegs intelligente User versucht den Code erst zu lesen und zu verstehen bevor man ihn anwendet. Gerade als Anwender solle man da erst mal etwas mehr Zeit investieren wenn man das zusammenstöpselt.
Die zu startende Funktion des Skriptes definierst du beim Testen oberhalb des Code-Fensters in der Zeile des Play Buttons in einem DropDown.
Schau in den Code dort steht in den Kommentaren extra ganz klar in Zeile 14 welche Funktion du starten musst, die erste Funktion darf nicht gestartet werden denn die wird mit Parametern aus der anderen aufgerufen, deswegen kommt auch der Fehler.
Wozu schreibe ich die Kommentare da wohl rein? 🤔 Genau, damit man sie vorher liest und nicht blind Copy n' pasted! Jeder halbwegs intelligente User versucht den Code erst zu lesen und zu verstehen bevor man ihn anwendet. Gerade als Anwender solle man da erst mal etwas mehr Zeit investieren wenn man das zusammenstöpselt.
Die zu startende Funktion des Skriptes definierst du beim Testen oberhalb des Code-Fensters in der Zeile des Play Buttons in einem DropDown.
Zitat von @Poergen:
Eine Frage hätte ich dann aber noch. Ich wollte im htmlBody einen Link zu einer Datei einfügen. Als Fehler wurde mir "https" angezeigt.
<a href="https://docs....">abc</a>
Gibt es da eine Alternative?
Eine Frage hätte ich dann aber noch. Ich wollte im htmlBody einen Link zu einer Datei einfügen. Als Fehler wurde mir "https" angezeigt.
<a href="https://docs....">abc</a>
Gibt es da eine Alternative?
Du musst Anführungszeichen innerhalb von Anführungszeichen mit Backslash Escapen
htmlBody: "<h3>Abgelaufene Produkte:</h3><p><ul><li>" + items.join('</li><li>') + "</li></ul></p><a href=\"https://docs....\">abc</a>"