Brug Google Sheets til at sende en e-mail baseret på celleværdi

Afsendelse af en e-mail fra Google Sheets kræver brug af et Google Apps Script. Men bare rolig, hvis du aldrig har oprettet et eneste Google Apps-script før, er det meget nemt at sende en e-mail.

I det følgende selvstudie lærer du, hvordan du kontrollerer værdien af ​​en celle i Google Sheets . Hvis værdien er over en vis tærskelgrænse, kan du automatisk sende en advarsels-e-mail til enhver e-mailadresse, du ønsker.

Der er mange anvendelsesmuligheder for dette script. Du kan modtage en advarsel, hvis den daglige indtjening i din salgsrapport falder til under et bestemt niveau. Eller du kan få en e-mail, hvis dine medarbejdere rapporterer, at de har faktureret kunden for mange timer i dit projektsporingsregneark.

Uanset applikationen er dette script overbevisende. Det sparer dig også for tid til at skulle overvåge dine regnearksopdateringer manuelt.

Trin 1: Send en e-mail med Google Sheets

Før du kan oprette et Google Apps Script til at sende en e-mail fra Google Sheets , skal du også bruge en Gmail-e-mail-adresse, som Google Apps Script vil få adgang til for at sende dine underretnings-e-mails.

Du skal også oprette et nyt regneark, der indeholder en e-mailadresse.

Du skal blot tilføje en navnekolonne og en e-mailkolonne, og udfylde dem med den person, du ønsker, skal modtage advarselsmailen.

Brug Google Sheets til at sende en e-mail baseret på celleværdi

Nu hvor du har en e-mailadresse at sende en advarselsmail til, er det tid til at oprette dit script.

For at komme ind i script-editoren skal du klikke på Værktøjer og derefter klikke på Script-editor .

Du vil se et scriptvindue med en standardfunktion kaldet  myFunction() . Omdøb dette til SendEmail() .

Indsæt derefter følgende kode i SendEmail()-funktionen:

// 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);

Sådan fungerer denne kode:

  • getRange og getValues ​​trækker værdien fra den celle, der er angivet i getRange-metoden.
  • var-besked og var-emne definerer den tekst, der skal bygge din advarsels-e-mail.
  • MailApp.sendEmail - funktionen udfører endelig Google Scripts sende e-mail-funktion ved hjælp af din tilsluttede Google-konto.

Gem scriptet ved at klikke på diskikonet , og kør det derefter ved at klikke på kørselsikonet (højre pil).

Husk, at Google Script skal have tilladelse til at få adgang til din Gmail-konto for at sende e-mailen. Så første gang du kører scriptet, kan du muligvis se en advarsel som nedenfor.

Brug Google Sheets til at sende en e-mail baseret på celleværdi

Klik på Gennemse tilladelser , og du vil se en anden advarselsskærm, som du skal omgå.

Denne advarselsskærm skyldes, at du skriver et tilpasset Google Script, der ikke er registreret som et officielt.

Brug Google Sheets til at sende en e-mail baseret på celleværdi

Bare klik på Avanceret , og klik derefter på linket Gå til SendE-mail (usikkert) .

Du behøver kun at gøre dette én gang. Dit script vil køre, og den e-mailadresse, du har angivet i dit regneark, vil modtage en e-mail som den nedenfor.

Brug Google Sheets til at sende en e-mail baseret på celleværdi

Trin 2: Læsning af en værdi fra en celle i Google Sheets

Nu hvor du har skrevet et Google Apps Script, der kan sende en advarsels-e-mail, er det tid til at gøre denne advarsels-e-mail mere funktionel.

Det næste trin, du lærer, er, hvordan du læser en dataværdi ud af et Google-regneark, kontrollerer værdien og sender en pop op-meddelelse, hvis værdien er over eller under en øvre grænse.

Før du kan gøre dette, skal du oprette et andet ark i det Google-regneark, du arbejder med. Kald dette nye ark "MinRapport."

Brug Google Sheets til at sende en e-mail baseret på celleværdi

Husk, at celle D2 er den, du vil kontrollere og sammenligne. Forestil dig, at du hver måned vil vide, om dit samlede salg er faldet til under $16.000.

Lad os oprette Google Apps Script, der gør det.

Gå tilbage til dit Script Editor-vindue ved at klikke på Tools og derefter Script Editor .

Hvis du bruger det samme regneark, har du stadig  funktionen SendEmail() derinde. Klip den kode og indsæt den i Notesblok. Du får brug for det senere.

Indsæt følgende funktion i kodevinduet.

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!');="" }="">

Sådan fungerer denne kode:

  • Indlæs værdien fra celle D2 i variablen monthSales .
  • IF-erklæringen sammenligner det månedlige salg i celle D2 med $16.000
  • Hvis værdien er over 16.000, vil koden udløse en browsermeddelelsesboks med en advarsel.

Gem denne kode og kør den. Hvis det fungerer korrekt, bør du se følgende advarselsmeddelelse i din browser.

Brug Google Sheets til at sende en e-mail baseret på celleværdi

Nu hvor du har et Google Apps Script, der kan sende en e-mail-advarsel og et andet script, der kan sammenligne en værdi fra et regneark, er du klar til at kombinere de to og sende en advarsel i stedet for at udløse en advarsel.

Trin 3: Sæt det hele sammen

Nu er det tid til at kombinere de to scripts, du har oprettet, til et enkelt script.

På dette tidspunkt skulle du have et regneark med en fane kaldet Sheet1, der indeholder advarsels-e-mail-modtageren. Den anden fane kaldet MyReport indeholder alle dine salgsoplysninger.

Tilbage i Script Editor er det tid til at øve alt, hvad du har lært indtil videre.

Erstat al koden i script-editoren med dine to funktioner, redigeret som vist her.

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);="" }="">

Læg mærke til redigeringerne her.

Indsæt SendEmail- scriptet i IF-sætningen i CheckSales() -funktionen inden for if-sætningsparenteserne.

For det andet skal du sammenkæde monthSales- variablen til slutningen af ​​e-mail-meddelelsen ved at bruge + -tegnet.

Det eneste, der er tilbage at gøre, er at udløse funktionen CheckSales() hver måned.

For at gøre dette, i script-editoren:

  1. Klik på menupunktet Rediger , og klik derefter på Aktuelle projekts udløsere .
  2. Klik på opret en ny trigger nederst på skærmen .
  3. Vælg funktionen CheckSales for at køre.
  4. Skift Vælg begivenhedskilde til tidsdrevet .
  5. Skift  Vælg type tidsbaseret trigger til månedstimer .

Klik på Gem for at afslutte triggeren.

Brug Google Sheets til at sende en e-mail baseret på celleværdi

Hver måned kører dit nye script og sammenligner det samlede månedlige salgsbeløb i celle D2 med 16.000 USD.

Hvis det er mindre, sender det en advarsels-e-mail, der giver dig besked om det lave månedlige salg.

Brug Google Sheets til at sende en e-mail baseret på celleværdi

Som du kan se, pakker Google Apps Scripts en masse funktionalitet i en lille pakke. Med blot et par enkle linjer kode kan du gøre nogle ret fantastiske ting.

Hvis du vil eksperimentere mere, så prøv at tilføje sammenligningsgrænsen på $16.000 i en anden celle i regnearket, og læs det derefter ind i dit script, før du foretager sammenligningen. På denne måde kan du ændre grænsen blot ved at ændre værdien i arket.

Ved at justere koden og tilføje nye kodeblokke kan du bygge videre på disse enkle ting, du lærer at bygge nogle fantastiske Google Scripts til sidst.

Automatisering af processen

Så langt så godt, men scriptet ovenfor vil kun køre manuelt, hvis vi ikke indstiller nogen triggere. Heldigvis gjorde Google den udløste automatisering nem at konfigurere. Her er trinene. 

I Apps Script-editoren skal du klikke på Triggers ikonet i venstre sidebjælke (det ligner et lille ur).

Klik på opret ny trigger-linket eller Tilføj trigger knappen i nederste højre hjørne af siden Udløsere.

Vælg hvilken funktion der skal køres rullemenuen skal du vælge sendEmails< en i=4> funktion.

Vælg begivenhedskilde rullemenuen skal du vælge Tidsdrevet.

Vælg type tidsbaseret trigger rullemenuen skal du vælge den ønskede frekvens (f.eks. Dagtimer til daglige e-mails, Ugetimer til ugentlige e-mails osv.).

Hvis det er relevant, vælg det ønskede tidsinterval eller ugedag.

Klik Gem for at oprette triggeren.

Når du har gemt, skal du klikke på Implementer -knappen i øverste højre hjørne og følge instruktionerne for at mærke og definere implementeringen. Du skal give automatiseringstilladelserne til at køre, og det samme gælder for selve scriptet.  

Med hensyn til den givne trigger, da vores eksempel handler om at sende fakturapåmindelser, antager vi, at disse er månedlige, og det er passende at sende dem hver 1. i måneden mellem kl. 13.00 og 14.00. Men selvfølgelig kan du ændre frekvensen og timingen baseret på dine behov. 

Sådan sender du en e-mail med en vedhæftet fil

For at vise dig, hvordan du sender e-mails med vedhæftede filer, genbruger vi det eksemplariske ark med fakturapåmindelser og ændrer uddraget til at inkludere vedhæftede filer. Nu starter vi med funktionen, og e-mailskabelonen kommer senere i koden. sendE-mailPåmindelser

Vi bør fremhæve, at uddraget nedenfor henter e-mailvedhæftede filer fra en Google Drev-mappe, hvor det er vigtigt at inkludere mappe-id'et og følge den givne navnekonvention. Mere om det under Lad os opdele kodeafsnittet

function sendEmailReminders() { // Hent det aktive ark var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // Hent dataområdet (ekskl. overskriftsrækken) var dataRange = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn()); // Hent værdierne fra dataområdet var data = dataRange.getValues(); // Loop gennem rækkerne af data for (var i = 0; i < data.length; i++) { var row = data[i]; // Hent værdierne fra hver kolonne var businessName = row[0]; var email = række[1]; var invoiceNumber = række[2]; var invoiceAmount = række[3]; var forfaldsdato = række[4]; var emne = række[5]; // Email body var emailBody = "Kære " + virksomhedsnavn + ",\n\n" + "Dette er en påmindelse om, at faktura #" + fakturanummer + " for $" + invoiceAmount + " forfalder den " + forfaldsdato + ".\n" + "Find venligst den vedhæftede faktura.\n\n" + "Tak for din hurtige opmærksomhed på denne sag."; // Vedhæft den tilsvarende faktura - Du skal angive det korrekte mappe-id, hvor dine fakturaer er gemt var invoiceFolderId = 'YOUR_FOLDER_ID_HERE'; var invoiceFolder = DriveApp.getFolderById(invoiceFolderId); var invoiceFiles = invoiceFolder.getFilesByName(invoiceNumber + '.pdf'); // Forudsat at fakturafiler er i PDF-format var invoiceFile; if (invoiceFiles.hasNext()) { invoiceFile = invoiceFiles.next(); } else { // Hvis fakturafilen ikke findes, kan du springe denne række over eller logge en fejl console.error("Invoice file not found for invoice number: " + invoiceNumber); Blive ved; } // Send e-mailen med den vedhæftede fil MailApp.sendEmail({ to: email, subject: subject, body: emailBody, attachments: [invoiceFile] }); } }

Lad os nedbryde koden

1. Definer funktionen:sendEmailReminders

funktion sendEmailReminders() {

Linjen erklærer en funktion ved navn , som vil indeholde koden til at sende e-mail-påmindelser med vedhæftede filer.sendEmailReminders

2. Hent det aktive ark:

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

Linjen henter det aktive ark fra det aktuelt åbne Google Sheets-dokument.

3. Hent dataområdet (ekskl. overskriftsrækken):

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

Denne linje henter dataintervallet i arket, eksklusive overskriftsrækken. Den starter fra den anden række (række 2) og den første kolonne (kolonne 1) og strækker sig til den sidste række og den sidste kolonne på arket.

Sidebemærkning: Når du opretter dit brugerdefinerede ark, skal du ændre for at matche dit ark. dataområde

4. Hent værdierne fra dataområdet:

var data = dataRange.getValues();

Denne linje henter værdierne (indholdet) fra det celleområde, der er defineret i det foregående trin.

5. Gå gennem rækkerne af data:

for (var i = 0; i < data.længde; i++) { var række = data[i];

Denne løkke gentager hver række i arrayet. Variablen repræsenterer den aktuelle række af data i hver iteration.fordatarow

6. Hent værdierne fra hver kolonne:

var virksomhedsnavn = række[0]; var email = række[1]; var invoiceNumber = række[2]; var invoiceAmount = række[3]; var forfaldsdato = række[4]; var emne = række[5];

Linjerne ovenfor uddrager værdierne fra hver kolonne i den aktuelle række af data. Hver værdi tildeles senere til en variabel for nem reference i scriptet. De givne værdier er tilpasset vores eksemplariske ark. 

7. Opret e-mail-brødteksten:

var emailBody = "Kære " + virksomhedsnavn + ",\n\n" + "Dette er en påmindelse om, at faktura #" + fakturanummer + " for $" + invoiceAmount + " forfalder den " + forfaldsdato + ".\n" + "Find venligst den vedhæftede faktura.\n\n" + "Tak for din hurtige opmærksomhed på denne sag.";

Koden konstruerer e-mail-teksten ved hjælp af de værdier, der er udtrukket fra arket. E-mailens brødtekst er en streng, der inkluderer virksomhedsnavn, fakturanummer, fakturabeløb og forfaldsdato.

8. Hent den tilsvarende fakturafil:

var invoiceFolderId = 'DIN_MAPPE_ID_HER'; var invoiceFolder = DriveApp.getFolderById(invoiceFolderId); var invoiceFiles = invoiceFolder.getFilesByName(invoiceNumber + '.pdf'); var invoiceFile; if (invoiceFiles.hasNext()) { invoiceFile = invoiceFiles.next(); } else { console.error("Fakturafil blev ikke fundet for fakturanummer: " + invoiceNumber); Blive ved; }

Disse linjer henter den fakturafil, der er knyttet til den aktuelle række. 

Først tilgås fakturamappen ved hjælp af dens mappe-id. Sørg for at erstatte med det faktiske mappe-id. DIN_FOLDER_ID_HER

Bemærk, at navnekonventionen i vores eksempel er, og at den faktiske faktura hedder "123456.pdf". Hvis dine vedhæftede filer er navngivet anderledes, skal du opdatere formateringen. (fakturanummer + '.pdf')

Dernæst søger scriptet efter en fil med samme navn som fakturanummeret (forudsat at filen er i PDF-format). 

Hvis filen findes, tildeles den til variablen; ellers logger scriptet en fejlmeddelelse og går videre til næste row.invoiceFile

9. Send e-mailen med den vedhæftede fil:

MailApp.sendEmail({ to: email, subject: subject, body: emailBody, vedhæftede filer: [invoiceFile] });

Denne linje sender brødteksten og e-mailvedhæftninger, og her er de resultater, du skal få. Desuden gælder alle automatiseringstrinene som tidligere beskrevet, og det giver mening at beholde den månedlige trigger, da dette handler om at sende fakturapåmindelser. 

Send en HTML-e-mail med GSheets

For at sende en HTML-e-mail kan du lave nogle ret enkle ændringer til det tidligere beskrevne script. Her er det: 

function sendEmailReminders() { // Hent det aktive ark var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // Hent dataområdet (ekskl. overskriftsrækken) var dataRange = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn()); // Hent værdierne fra dataområdet var data = dataRange.getValues(); // Loop gennem rækkerne af data for (var i = 0; i < data.length; i++) { var row = data[i]; // Hent værdierne fra hver kolonne var businessName = row[0]; var email = række[1]; var invoiceNumber = række[2]; var invoiceAmount = række[3]; var forfaldsdato = række[4]; var emne = række[5]; // HTML email body var emailBodyHtml = "<p>Kære " + virksomhedsnavn + ",</p>" + "<p>Dette er en påmindelse om, at faktura #" + fakturanummer + " for $" + invoiceAmount + " forfalder den " + forfaldsdato + ".</p>" + "<p>Find venligst den vedhæftede faktura.</p>" + "<p>Tak for din hurtige opmærksomhed på denne sag.</p>"; // Vedhæft den tilsvarende faktura - Du skal angive det korrekte mappe-id, hvor dine fakturaer er gemt var invoiceFolderId = 'YOUR_FOLDER_ID_HERE'; var invoiceFolder = DriveApp.getFolderById(invoiceFolderId); var invoiceFiles = invoiceFolder.getFilesByName(invoiceNumber + '.pdf'); // Forudsat at fakturafiler er i PDF-format var invoiceFile; if (invoiceFiles.hasNext()) { invoiceFile = invoiceFiles.next(); } else { // Hvis fakturafilen ikke findes, kan du springe denne række over eller logge en fejl console.error("Invoice file not found for invoice number: " + invoiceNumber); Blive ved; } // Send e-mailen med den vedhæftede fil MailApp.sendEmail({ to: email, subject: subject, htmlBody: emailBodyHtml, attachments: [invoiceFile] }); } }

I denne version er almindelig tekst erstattet med en variabel, der indeholder HTML-formateret indhold. emailBodyemailBodyHtml

Når du kalder funktionen, erstattes body-egenskaben også med egenskaben, som sender e-mailen som en HTML-e-mail.MailApp.sendEmail()htmlBody

Sidebemærkninger: 

Vi bruger i stedet for i scriptet for nemheds skyld. Begge muligheder ville fungere, men de er bestemt mere læsbare. Under alle omstændigheder er du velkommen til at omformatere scriptet og erstatte sammenkædningsoperatoren med pladsholdere ved strenginterpolation. varconstconst${udtryk}

Desuden indeholder ingen af ​​scripts funktioner, da disse ikke var nødvendige for vores eksempler. Men det er selvfølgelig også muligt at tilføje og endda automatisere med disse typer scripts. bccbcc

Endelig kan du pifte tingene op ved at tilføje tilpassede CSS-stile, se den opdaterede funktion nedenfor. var emailBodyHtml =

// HTML-e-mail-brødtekst med CSS-stile var emailBodyHtml = "<html><head><style>" + "body {font-family: Arial, sans-serif;}" + "p {font-size: 14px;}" + ".invoice-info {font-weight: bold; farve: #4a4a4a;}" + "</style></hoved><krop>" + "<p>Kære <span class='invoice-info'>" + virksomhedsnavn + "</span>,</p>" + "<p>Dette er en påmindelse om, at Invoice #<span class='invoice-info'>" + invoiceNumber + "</span> for $<span class='invoice-info'>" + invoiceAmount + "</span> forfalder på <span class='invoice-info'>" + forfaldsdato + "</span>.</p>" + "<p>Find venligst den vedhæftede faktura.</p>" + "<p>Tak for din hurtige opmærksomhed på denne sag.</p>" + "</body></html>";

Pro tips: 

  • Gør det nemt med , nogle postkasseudbydere understøtter og gengiver muligvis ikke stærkt stiliserede e-mails korrekt eller overhovedet. <stil>
  • Brug Mailtrap Email Testing for at se, hvor meget postkasseudbydere understøtter dine HTML-e-mails. 
  • For at understrege igen, Hvis du har brug for at sende med et volumen, er det altid bedst at bruge en ordentlig MTA i stedet for funktionen. sendE-mail
  • Vær opmærksom på dine Gmail-kontobegrænsninger. Disse er forskellige for Google Workspace og/eller din private konto. 

Hvordan sender man trigger-e-mails fra Google Sheets?

Når en celle når en bestemt værdi

Vi viser dig, hvordan du sender en automatisk e-mail baseret på en celleværdi. I vores eksempel vil fakturaen blive sendt, når cellen Fakturabeløb når '0', hvilket indikerer en fratrådt kunde. 

Den givne celleværdi udløser en tilpasset churn-e-mail for straks at nå ud til kunden. Og igen, automatiseringstrinnene forbliver de samme, du kan stadig bruge den månedlige trigger til disse e-mails. 

Husk, at scriptet er det samme, som vi brugte til at sende HTML-e-mails og vedhæftede filer. Men det har endnu et lag af funktionalitet til at introducere den beskrevne betingede logik. Her er koden. 

function sendEmailReminders() { // Hent det aktive ark var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // Hent dataområdet (ekskl. overskriftsrækken) var dataRange = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn()); // Hent værdierne fra dataområdet var data = dataRange.getValues(); // Loop gennem rækkerne af data for (var i = 0; i < data.length; i++) { var row = data[i]; // Hent værdierne fra hver kolonne var businessName = row[0]; var email = række[1]; var invoiceNumber = række[2]; var invoiceAmount = række[3]; var forfaldsdato = række[4]; var emne = række[5]; // Bestem e-mail-teksten baseret på fakturabeløb var emailBodyHtml; if (invoiceAmount == 0) { // Churn customer email subject = "Churn customer notification"; emailBodyHtml = "<html><head><style>" + "body {font-family: Arial, sans-serif;}" + "p {font-size: 14px;}" + ".invoice-info {font-weight: bold; farve: #4a4a4a;}" + "</style></hoved><krop>" + "<p>Kære " + virksomhedsnavn + ",</p>" + "<p>Vi har bemærket, at dit fakturabeløb er $0. Vi er kede af at se dig gå, og vi vil sætte pris på enhver feedback om, hvorfor du har besluttet at stoppe med at bruge vores tjenester.</p>" + "<p>Hvis der er noget, vi kan gøre for at forbedre vores tjenester eller vinde din virksomhed tilbage, så lad os det vide.</p>" + "<p>Tak for din tidligere forretning.</p>" + "</body></html>"; } else { // Almindelig faktura-e-mail emailBodyHtml = "<html><head><style>" + "body {font-family: Arial, sans-serif;}" + "p {font-size: 14px;}" + ".invoice-info {font-weight: bold; farve: #4a4a4a;}" + "</style></hoved><krop>" + "<p>Kære <span class='invoice-info'>" + virksomhedsnavn + "</span>,</p>" + "<p>Dette er en påmindelse om, at Invoice #<span class='invoice-info'>" + invoiceNumber + "</span> for $<span class='invoice-info'>" + invoiceAmount + "</span> forfalder på <span class='invoice-info'>" + forfaldsdato + "</span>.</p>" + "<p>Find venligst den vedhæftede faktura.</p>" + "<p>Tak for din hurtige opmærksomhed på denne sag.</p>" + "</body></html>"; } // Vedhæft den tilsvarende faktura - Du skal angive det korrekte mappe-id, hvor dine fakturaer er gemt var invoiceFolderId = 'YOUR_FOLDER_ID_HERE'; var invoiceFolder = DriveApp.getFolderById(invoiceFolderId); var invoiceFiles = invoiceFolder.getFilesByName(invoiceNumber + '.pdf'); // Forudsat at fakturafiler er i PDF-format var invoiceFile; if (invoiceFiles.hasNext()) { invoiceFile = invoiceFiles.Næste(); } else { // Hvis fakturafilen ikke findes, kan du springe denne række over eller logge en fejl console.error("Invoice file not found for invoice number: " + invoiceNumber); Blive ved; } // Send e-mailen med den vedhæftede fil MailApp.sendEmail({ to: email, subject: subject, htmlBody: emailBodyHtml, attachments: [invoiceFile] }); } }

Ned til kodebruddet 

Bemærk, at vi kun fokuserer på, hvad der er i funktionen for at undgå at gentage det, der allerede er beskrevet. emailBodyHtml

Den opdaterede del af koden bestemmer indholdet af e-mailens brødtekst baseret på fakturabeløbet. Hvis fakturabeløbet er, antages det at være en churn-kunde, og der bruges en anden e-mailskabelon. Her er en opdeling af koden: '0'

var emailBodyHtml;

Den erklærer en variabel med navnet og gemmer indholdet af e-mailens brødtekst. Og det er oprindeligt efterladt undefined.emailBodyHtml

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

Opgørelsen kontrollerer, om fakturabeløbet er 0. Hvis det er tilfældet, udføres koden inde i de krøllede klammeparenteser. Denne blok indeholder churn kunde e-mail template.if(`{}`)

emne = "Afbryd kundemeddelelse";

Linjen indstiller e-mailens emne til for churn-kunder."Churn customer notification"

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

 Linjen angiver værdien af ​​variablen til churn-kundens e-mailskabelon. Skabelonen er en HTML-streng med CSS-stile defineret i sektionen. E-mail-brødteksten indeholder pladsholdere for virksomhedsnavnet og en besked til kunden.emailBodyHtml<head>

} andet { ... }

Blokeringen udføres, når fakturabeløbet ikke er 0. Den indstiller variablen til den almindelige faktura-e-mailskabelon. E-mailskabelonen er en HTML-streng med CSS-stile defineret i sektionen. E-mail-brødteksten indeholder pladsholdere for virksomhedsnavn, fakturanummer, fakturabeløb og forfaldsdato.elseemailBodyHtml<head>

Ved at bruge denne betingede logik sender scriptet en anden e-mailtekst baseret på, om fakturabeløbet er (afgang kunde) eller ikke-nul (almindelig faktura). 0

Når celleværdien ændres

Nu tager vi det samme script, der blev brugt ovenfor, og udvider det til at dække en anden use case - en klient opgraderer, og kontoadministratoren skal sende en "Tak"-e-mail med en faktura. 

For at forklare er tanken, at kontoadministratoren hver måned har et nyt ark (ark 2 i vores eksempel) med kundernes legitimationsoplysninger. 

Koden vil nu sammenligne de to ark og sende en automatisk "Tak"-e-mail i stedet for den almindelige faktura-e-mail til kunder, der har opgraderet (deres Fakturabeløb a> er større sammenlignet med den forrige). 

Der er heller ingen grund til at røre ved churn-e-mailen, da der er en chance for, at nogen besluttede at stoppe med at bruge vores imaginære service. Her er manuskriptet.

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.længde; i++) { var række1 = data1[i]; var række2 = data2[i]; var virksomhedsnavn = række1[0]; var email = række1[1]; var invoiceNumber = række1[2]; var invoiceAmount1 = parseFloat(row1[3].toString().replace('$', '').replace(',',','$',''). 39;.')); var invoiceAmount2 = parseFloat(row2[3].toString().replace('$', '').replace(',',','$',''). 39;.')); if (isNaN(invoiceAmount1) || isNaN(invoiceAmount2)) { console.error("Ugyldige fakturabeløb for virksomhed: " + businessName + ". invoiceAmount1: " + invoiceAmount1 + ", invoiceAmount2: " + invoiceA2 ); Blive ved; } var forfaldsdato = række1[4]; var emne; var emailBodyHtml; if (invoiceAmount1 < invoiceAmount2) { console.log("Sender 'Tak for at opgradere' e-mail til " + email + ". invoiceAmount1: " + invoiceAmount1 + ", invoiceAmount2: " + invoiceAmount2); emne = "Tak for opgraderingen"; emailBodyHtml = "<html><body>" + "<p>Kære " + virksomhedsnavn + ",</p>" + "<p>Tak, fordi du opgraderede! Vi værdsætter din forretning og ser frem til at betjene dig.</p>" + "<p>Med venlig hilsen</p>" + "<p>din virksomhed</p>" + "</body></html>"; MailApp.sendEmail({ til: email, emne: emne, htmlBody: emailBodyHtml }); } else if (invoiceAmount1 == 0) { console.log("Sender 'Churn customer notification' email til " + email + ". invoiceAmount1: " + invoiceAmount1); emne = "Afbryd kundemeddelelse"; emailBodyHtml = "<html><head><style>" + "body {font-family: Arial, sans-serif;}" + "p {font-size: 14px;}" + ".invoice-info {font-weight: bold; farve: #4a4a4a;}" + "</style></hoved><krop>" + "<p>Kære " + virksomhedsnavn + ",</p>" + "<p>Vi har bemærket, at dit fakturabeløb er $0. Vi er kede af at se dig gå, og vi vil sætte pris på enhver feedback om, hvorfor du har besluttet at stoppe med at bruge vores tjenester.</p>" + "<p>Hvis der er noget, vi kan gøre for at forbedre vores tjenester eller vinde din virksomhed tilbage, så lad os det vide.</p>" + "<p>Tak for din tidligere forretning.</p>" + "</body></html>"; MailApp.sendEmail({ to: email, subject: subject, htmlBody:emailBodyHtml }); } else { console.log("Sender 'Invoice Reminder' e-mail til " + email + ". invoiceAmount1: " + invoiceAmount1 + ", invoiceAmount2: " + invoiceAmount2); emne = "Fakturapåmindelse"; emailBodyHtml = "<html><head><style>" + "body {font-family: Arial, sans-serif;}" + "p {font-size: 14px;}" + ".invoice-info {font-weight: bold; farve: #4a4a4a;}" + "</style></hoved><krop>" "<p>Kære <span class='invoice-info'>" + virksomhedsnavn + "</span>,</p>" + "<p>Dette er en påmindelse om, at Invoice #<span class='invoice-info'>" + invoiceNumber + "</span> for $<span class='invoice-info'>" + invoiceAmount1 + "</span> forfalder på <span class='invoice-info'>" + forfaldsdato + "</span>.</p>" + "<p>Find venligst den vedhæftede faktura.</p>" + "<p>Tak for din hurtige opmærksomhed på denne sag.</p>" + "</body></html>"; // Vedhæft den tilsvarende faktura - Du skal angive det korrekte mappe-id, hvor dine fakturaer er gemt var invoiceFolderId = 'YOUR_FOLDER_ID_HERE'; var invoiceFolder = DriveApp.getFolderById(invoiceFolderId); var invoiceFiles = invoiceFolder.getFilesByName(invoiceNumber + '.pdf'); // Forudsat at fakturafiler er i PDF-format var invoiceFile; if (invoiceFiles.hasNext()) { invoiceFile = invoiceFiles.next(); } else { // Hvis fakturafilen ikke findes, kan du springe denne række over eller logge en fejl console.error("Invoice file not found for invoice number: " + invoiceNumber); Blive ved; } MailApp.sendEmail({ til: email, emne: emne, htmlBody: emailBodyHtml, vedhæftede filer: [invoiceFile] }); } } }</p>" + "</body></html>"; // Vedhæft den tilsvarende faktura - Du skal angive det korrekte mappe-id, hvor dine fakturaer er gemt var invoiceFolderId = 'YOUR_FOLDER_ID_HERE'; var invoiceFolder = DriveApp.getFolderById(invoiceFolderId); var invoiceFiles = invoiceFolder.getFilesByName(invoiceNumber + '.pdf'); // Forudsat at fakturafiler er i PDF-format var invoiceFile; if (invoiceFiles.hasNext()) { invoiceFile = invoiceFiles.next(); } else { // Hvis fakturafilen ikke findes, kan du springe denne række over eller logge en fejl console.error("Invoice file not found for invoice number: " + invoiceNumber); Blive ved; } MailApp.sendEmail({ til: email, emne: emne, htmlBody: emailBodyHtml, vedhæftede filer: [invoiceFile] }); } } }</p>" + "</body></html>"; // Vedhæft den tilsvarende faktura - Du skal angive det korrekte mappe-id, hvor dine fakturaer er gemt var invoiceFolderId = 'YOUR_FOLDER_ID_HERE'; var invoiceFolder = DriveApp.getFolderById(invoiceFolderId); var invoiceFiles = invoiceFolder.getFilesByName(invoiceNumber + '.pdf'); // Forudsat at fakturafiler er i PDF-format var invoiceFile; if (invoiceFiles.hasNext()) { invoiceFile = invoiceFiles.next(); } else { // Hvis fakturafilen ikke findes, kan du springe denne række over eller logge en fejl console.error("Invoice file not found for invoice number: " + invoiceNumber); Blive ved; } MailApp.sendEmail({ til: email, emne: emne, htmlBody: emailBodyHtml, vedhæftede filer: [invoiceFile] }); } } }

Ned til kodebruddet 

1. Scriptet starter med at få referencer til både Ark1 og Ark2.

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

2. Den henter derefter dataene fra begge ark, startende fra den anden række for at udelukke overskrifter.

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. Scriptet itererer over rækkerne i begge ark (forudsat at antallet af rækker er det samme i begge ark). Den sammenligner fakturabeløbene fra Ark1 og Ark2 for hver tilsvarende række.

for (var i = 0; i < data1.længde; i++) { var række1 = data1[i]; var række2 = data2[i]; // Hent fakturabeløb fra begge ark var invoiceAmount1 = parseFloat(row1[3].toString().replace('$', '').replace(' ,','.')); var invoiceAmount2 = parseFloat(row2[3].toString().replace('$', '').replace(',',','$',''). 39;.'));

Kopi

4. Scriptet kontrollerer derefter betingelserne for at sende forskellige typer e-mails ud fra sammenligningen af ​​fakturabeløb fra Ark1 og Ark2.

if (invoiceAmount1 < invoiceAmount2) { // Send "Tak for opgraderingen" email } else if (invoiceAmount1 == 0) { // Send "Churn customer notification" email } else {// Send "Fakturapåmindelse" e-mail }

Kopi

Nøglesammenligningen er, som kontrollerer, om fakturabeløbet i Ark1 er mindre end fakturabeløbet i Ark2 for den samme række (dvs. den samme kunde). Hvis det er sandt, antager scriptet, at kunden har opgraderet, og sender en e-mail. Ellers tjekker den for andre forhold (afgang eller regelmæssige fakturapåmindelser) og sender den relevante email.if (invoiceAmount1 < invoiceAmount2)"Tak for opgraderingen"

Når en Google Sheets-fil opdateres

Nu kan det betale sig at diskutere lidt af en anderledes use case, hvor andre end account manageren har adgang til regnearket. 

Lad os antage, at vores account manager har en dag dedikeret til at møde kunder og besvare deres spørgsmål. Klienterne har adgang til et regneark, hvor de kort kan beskrive problemet og booke en plads. 

Okay, der er meget bedre måder at håndtere kundebestillinger og -forespørgsler på. Men vi holder os til denne tilgang af hensyn til vejledningen.

Trin 1

Først skal vi lave en tabel. Som vist nedenfor er vores ret enkel, og den indeholder kun tre rækker med Manager, Time slot og Query.

Trin 2

Dernæst skal du bruge Google-scripts til at udløse e-mails, hvor som helst nogen opdaterer arket med deres forespørgsel, og dermed reserverer en plads. Her er et eksempel. 

//@OnlyCurrentDoc function processEdit(e) { MailApp.sendEmail({ to: "[email protected]" ;, emne: "Ny booking -- klienttidsrum", brødtekst: "En klient har et spørgsmål til dig." }); }

Kopi

For at hjælpe dig med at forstå, hvad der foregår, kan det betale sig at diskutere hovedfunktionerne. 

  • //@OnlyCurrentDoc – denne annotation signalerer, at du ønsker, at scriptet kun skal køre i det angivne Google Sheet. Fjernelse af annoteringen aktiverede scriptet på tværs af dine andre filer. 
  • function processEdit () – en trigger (vi konfigurerer i næste trin) kører scriptet med denne funktion. Funktionen indstiller simpelthen processen til at modtage en e-mail, hver gang nogen opdaterer arket.
  • (e) – denne annotation repræsenterer objektet med data om redigeringerne. Den har en områdeegenskab til at signalere, at et område eller en celle er blevet redigeret. 
  • MailApp – et objekt, som funktionen bruger til at videresende e-mailen. 

Inden du går videre, kan du teste arket og koden. Hvis du bruger det eksemplariske ark, skal du blot udfylde en af ​​cellerne under kolonnen Forespørgsel og køre scriptet. E-mailen skulle ankomme i din indbakke med det samme, men husk at scriptet ikke er blevet automatiseret endnu.

Trin 3

Det er tid til at indstille og godkende en trigger til at sende e-mails automatisk. I Apps Script skal du klikke på vækkeurikonet i sidemenuen. Klik derefter på "...opret en ny trigger". 

Vælg følgende kriterier i pop op-vinduet til triggerkonfiguration.

  • procesRediger
  • Hoved
  • Fra regneark
  • Ved redigering

Bemærk: Det er okay, hvis du beholder indstillingerne for fejlmeddelelser som standard, men du kan ændre at hvis nødvendigt. Det vil ikke påvirke den overordnede funktion af udløseren eller scriptet. Dette kan gælde for alle de Google-scripts, du måske vil automatisere. 

Klik Gem, godkend udløseren på din konto, og du vil se den i  Triggere liste. Sørg også for at trykke på Deploy -knappen for at aktivere triggeren. 

Nu kan du gå tilbage til arket, udfylde en anden celle i kolonnen Forespørgsel og kontrollere, om du har modtaget den automatiske meddelelse. 

Sidebemærkning: Du kan tilpasse arket til dine præferencer, men det betyder, at du også skal tilpasse scriptet.

Tags: #HVORDAN

Leave a Comment

Sådan slår du undertekster til på Zoom

Sådan slår du undertekster til på Zoom

Lær hvordan du slår undertekster til på Zoom. Zooms automatiske undertekster gør det lettere at forstå opkaldsindholdet.

[100% løst] Hvordan rettes meddelelsen Fejludskrivning på Windows 10?

[100% løst] Hvordan rettes meddelelsen Fejludskrivning på Windows 10?

Modtager fejludskrivningsmeddelelse på dit Windows 10-system, følg derefter rettelserne i artiklen og få din printer på sporet...

Sådan optages og afspilles en Microsoft Teams-optagelse

Sådan optages og afspilles en Microsoft Teams-optagelse

Du kan nemt besøge dine møder igen, hvis du optager dem. Sådan optager og afspiller du en Microsoft Teams-optagelse til dit næste møde.

Sådan nulstiller du standardapps på Android

Sådan nulstiller du standardapps på Android

Når du åbner en fil eller klikker på et link, vil din Android-enhed vælge en standardapp til at åbne den. Du kan nulstille dine standardapps på Android med denne vejledning.

RETTET: Entitlement.diagnostics.office.com certifikatfejl

RETTET: Entitlement.diagnostics.office.com certifikatfejl

RETTET: Entitlement.diagnostics.office.com certifikatfejl

Top 10 spilwebsteder, der ikke er blokeret af skolen i 2022

Top 10 spilwebsteder, der ikke er blokeret af skolen i 2022

For at finde ud af de bedste spilsider, der ikke er blokeret af skoler, skal du læse artiklen og vælge den bedste ikke-blokerede spilwebsted for skoler, gymnasier og værker

RETTET: Printer i fejltilstand [HP, Canon, Epson, Zebra & Brother]

RETTET: Printer i fejltilstand [HP, Canon, Epson, Zebra & Brother]

Hvis du står over for printeren i fejltilstandsproblemet på Windows 10-pc og ikke ved, hvordan du skal håndtere det, så følg disse løsninger for at løse det.

Sådan sikkerhedskopierer du din Chromebook (2022)

Sådan sikkerhedskopierer du din Chromebook (2022)

Hvis du undrede dig over, hvordan du sikkerhedskopierer din Chromebook, har vi dækket dig. Lær mere om, hvad der sikkerhedskopieres automatisk, og hvad der ikke er her

Sådan rettes Xbox-appen vil ikke åbne i Windows 10 [HURTIG GUIDE]

Sådan rettes Xbox-appen vil ikke åbne i Windows 10 [HURTIG GUIDE]

Vil du rette Xbox-appen vil ikke åbne i Windows 10, så følg rettelserne som Aktiver Xbox-appen fra Tjenester, nulstil Xbox-appen, Nulstil Xbox-apppakken og andre..

Hvad er LogiOptions.exe (UNICODE), og er processen sikker?

Hvad er LogiOptions.exe (UNICODE), og er processen sikker?

Hvis du har et Logitech-tastatur og -mus, vil du se denne proces køre. Det er ikke malware, men det er ikke en vigtig eksekverbar fil til Windows OS.