Google Script - 3 Werte je Zeile prüfen und ggf. Email versenden
Hallo zusammen,
ich bin totaler Anfänger (Coding Erfahrung 12 STUNDEN) - Dennoch habe ich eine Aufgabe zu erfüllen und brauche Eure Hilfe dabei:
Es handelt sich um folgende Situation:
- in Spalte M eines Google Sheets wird ab Zeile zwei ein Bestellvolumen abgebildet.
- in Spalte P wird ab Zeile zwei die Anzahl der bisher gelieferten Teilmenge des Bestellvolumens aus Spalte M per Formel aufsummiert.
- in Spalte Q wird ab Zeile zwei ein "x" vermerkt sobald die Bestellung geschlossen ist
Der Code soll nun folgendes durchführen:
1. Sobald sich etwas auf dem Tabellenblatt ändert wird eine Funktion ausgelöst
2. Diese FUnktion soll folgendes leisten:
a) Prüfe für jede Zeile ob der Wert in Spalte P größer oder gleich als der Wert in Spalte M ist (ja das kann vorkommen), und ob der Wert in Spalte Q gleichzeitig null ist (bzw. ' ' )
b) Wenn das wahr ist, dann soll eine Email an eine fixe Email Adresse gehen...
Ich habe meinen bisherigen Code hier, der sendet auch eine Mail, aber nicht analog der Logik von oben...
function onEdit(e){
wertPruefen();
}
function wertPruefen(){
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet()
const BereitsErhalten = ['P2:P10000'];
const BestelltesVolumen = ['M2:M10000'];
const BestellungGeschlossen = ['Q2:Q10000'];
for (let i = 0; i < BereitsErhalten.length; i++) {
for (let j = 0; j < BestelltesVolumen.length; j++ ){
for (let k = 0; k < BestellungGeschlossen.length; k++){
if (BereitsErhalten[i] >= BestelltesVolumen[j] && BestellungGeschlossen[k] !== 'x') {
MailApp.sendEmail('m.mustermann@beispiel.de', 'Bestellwert erreicht!', 'Hi Max, ein Bestellwert wurde erreicht!')
}
}
}
}
}
----------------------------
Ich hoffe Ihr könnt mir dabei helfen.
Danke vielmals,
Gruß,
sandrobbe
ich bin totaler Anfänger (Coding Erfahrung 12 STUNDEN) - Dennoch habe ich eine Aufgabe zu erfüllen und brauche Eure Hilfe dabei:
Es handelt sich um folgende Situation:
- in Spalte M eines Google Sheets wird ab Zeile zwei ein Bestellvolumen abgebildet.
- in Spalte P wird ab Zeile zwei die Anzahl der bisher gelieferten Teilmenge des Bestellvolumens aus Spalte M per Formel aufsummiert.
- in Spalte Q wird ab Zeile zwei ein "x" vermerkt sobald die Bestellung geschlossen ist
Der Code soll nun folgendes durchführen:
1. Sobald sich etwas auf dem Tabellenblatt ändert wird eine Funktion ausgelöst
2. Diese FUnktion soll folgendes leisten:
a) Prüfe für jede Zeile ob der Wert in Spalte P größer oder gleich als der Wert in Spalte M ist (ja das kann vorkommen), und ob der Wert in Spalte Q gleichzeitig null ist (bzw. ' ' )
b) Wenn das wahr ist, dann soll eine Email an eine fixe Email Adresse gehen...
Ich habe meinen bisherigen Code hier, der sendet auch eine Mail, aber nicht analog der Logik von oben...
function onEdit(e){
wertPruefen();
}
function wertPruefen(){
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet()
const BereitsErhalten = ['P2:P10000'];
const BestelltesVolumen = ['M2:M10000'];
const BestellungGeschlossen = ['Q2:Q10000'];
for (let i = 0; i < BereitsErhalten.length; i++) {
for (let j = 0; j < BestelltesVolumen.length; j++ ){
for (let k = 0; k < BestellungGeschlossen.length; k++){
if (BereitsErhalten[i] >= BestelltesVolumen[j] && BestellungGeschlossen[k] !== 'x') {
MailApp.sendEmail('m.mustermann@beispiel.de', 'Bestellwert erreicht!', 'Hi Max, ein Bestellwert wurde erreicht!')
}
}
}
}
}
----------------------------
Ich hoffe Ihr könnt mir dabei helfen.
Danke vielmals,
Gruß,
sandrobbe
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 578909
Url: https://administrator.de/forum/google-script-3-werte-je-zeile-pruefen-und-ggf-email-versenden-578909.html
Ausgedruckt am: 22.05.2025 um 05:05 Uhr
5 Kommentare
Neuester Kommentar
Moin,
Ich habe jetzt keinen Plan von den GoogleSheets, aber von der Programmierlogik kostest dich dein Konstrukt unheimlich viel Zeit.
Ich würde mich eine Zählschleife bauen
Und in dieser dann die Prüfung einbauen (rein logisch, nicht syntaktisch):
Dann durchläufst du die 10.000 Zeilen nur einmal und nicht 10.000^3
Edit:
Bei dir kann P aus Zeile 5 auch >= M aus Zeile 5678 sein und gleichzeitig Q in Zeile 123 kein x enthalten.
Vermutlich bist du mit Mails zugemüllt worden!?
Gruß
em-pie
Ich habe jetzt keinen Plan von den GoogleSheets, aber von der Programmierlogik kostest dich dein Konstrukt unheimlich viel Zeit.
Ich würde mich eine Zählschleife bauen
Und in dieser dann die Prüfung einbauen (rein logisch, nicht syntaktisch):
Von i= 2 bis 10000, erhöhe in einer Schritten
Wenn P[I] >= M[i] UND Q[i] != 'x' Dann
Sende Mail
Dann durchläufst du die 10.000 Zeilen nur einmal und nicht 10.000^3
Edit:
Bei dir kann P aus Zeile 5 auch >= M aus Zeile 5678 sein und gleichzeitig Q in Zeile 123 kein x enthalten.
Vermutlich bist du mit Mails zugemüllt worden!?
Gruß
em-pie

Es reicht wenn du hier das Event-Object prüfst. Das enthält den bearbeiteten Range, davon holst du dir die Zeile, damit kannst du dann für die Zeile in der Werte geändert wurden deine o.g. Werte in den Spalten M,P und Q ermitteln:
Bei deiner Variante würde er bei jedem Durchlauf andauernd Mails schicken weil du nirgends hinterlegst das für eine bestimmte Zeile schon eine Mail geschickt wurde.
function onEdit(e){
let colP = 16;
let colM = 13;
let colQ = 17;
let ws = e.source.getActiveSheet();
let crow = e.range.getRow();
let valP = ws.getRange(crow,colP).getValue();
let valM = ws.getRange(crow,colM).getValue();
let valQ = ws.getRange(crow,colQ).getValue();
if (crow > 1 && valP != '' && valM != '' && valP >= valM && valQ == ''){
GmailApp.sendEmail("m.mustermann@beispiel.de", "Bestellwert erreicht!", "Hi Max, der Bestellwert wurde in Zeile " + crow + " erreicht!");
}
}

Hätte ich noch etwas anpassen müssen?
Ja, du verwendest wohl das andere Event, für meinen Code oben muss das "Bearbeiten" Event gewählt werden