Bruk Google Sheets til å sende en e-post basert på celleverdi

Sending av en e-post fra Google Sheets krever bruk av et Google Apps-skript. Men ikke bekymre deg, hvis du aldri har laget et eneste Google Apps-skript før, er det veldig enkelt å sende en e-post.

I den følgende opplæringen lærer du hvordan du sjekker verdien av en celle i Google Sheets . Hvis verdien er over en viss terskelgrense, kan du automatisk sende en e-postvarsel til hvilken som helst e-postadresse du vil.

Det er mange bruksområder for dette skriptet. Du kan motta et varsel hvis den daglige inntekten i salgsrapporten faller under et visst nivå. Eller du kan få en e-post hvis de ansatte rapporterer at de har fakturert kunden for mange timer i regnearket for prosjektsporing.

Uansett applikasjon er dette skriptet overbevisende. Det vil også spare deg for tid til å måtte overvåke regnearkoppdateringene manuelt.

Trinn 1: Sende en e-post med Google Sheets

Før du kan opprette et Google Apps-skript for å sende en e-post fra Google Regneark , trenger du også en Gmail-e-postadresse, som Google Apps Script får tilgang til for å sende ut e-postvarslene dine.

Du må også opprette et nytt regneark som inneholder en e-postadresse.

Bare legg til en navnekolonne og en e-postkolonne, og fyll dem ut med personen du ønsker skal motta e-postvarselet.

Bruk Google Sheets til å sende en e-post basert på celleverdi

Nå som du har en e-postadresse å sende en e-postvarsel til, er det på tide å lage skriptet ditt.

For å komme inn i skriptredigering, klikk på Verktøy og klikk deretter Skriptredigering .

Du vil se et skriptvindu med en standardfunksjon kalt  myFunction() . Gi nytt navn til SendEmail() .

Deretter limer du inn følgende kode i SendEmail()-funksjonen:

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

Slik fungerer denne koden:

  • getRange og getValues ​​henter verdien fra cellen spesifisert i getRange-metoden.
  • var-melding og var-emne definerer teksten som skal bygge e-postvarslingen din.
  • MailApp.sendEmail - funksjonen utfører endelig Google Scripts send e-postfunksjonen ved å bruke din tilkoblede Google-konto.

Lagre skriptet ved å klikke på diskikonet , og kjør det deretter ved å klikke på kjør- ikonet (høyre pil).

Husk at Google Script trenger tillatelse for å få tilgang til Gmail-kontoen din for å sende e-posten. Så første gang du kjører skriptet, kan du se et varsel som nedenfor.

Bruk Google Sheets til å sende en e-post basert på celleverdi

Klikk på Gjennomgå tillatelser , og du vil se en annen varselskjerm som du må omgå.

Denne varslingsskjermen er fordi du skriver et tilpasset Google-skript som ikke er registrert som et offisielt.

Bruk Google Sheets til å sende en e-post basert på celleverdi

Bare klikk på Avansert , og klikk deretter på koblingen Gå til Send e-post (usikker) .

Du trenger bare å gjøre dette én gang. Skriptet ditt vil kjøre, og e-postadressen du spesifiserte i regnearket vil motta en e-post som den nedenfor.

Bruk Google Sheets til å sende en e-post basert på celleverdi

Trinn 2: Lese en verdi fra en celle i Google Sheets

Nå som du har skrevet et Google Apps-skript som kan sende en e-postvarsel, er det på tide å gjøre den e-postvarslingen mer funksjonell.

Det neste trinnet du lærer er hvordan du leser en dataverdi ut av et Google-regneark, sjekker verdien og sender en popup-melding hvis verdien er over eller under en øvre grense.

Før du kan gjøre dette, må du opprette et nytt ark i Google-regnearket du jobber med. Kall dette nye arket "MyReport."

Bruk Google Sheets til å sende en e-post basert på celleverdi

Husk at celle D2 er den du vil sjekke og sammenligne. Tenk deg at du vil vite hver måned om det totale salget ditt har falt under $16 000.

La oss lage Google Apps-skriptet som gjør det.

Gå tilbake til Script Editor-vinduet ved å klikke på Verktøy og deretter Script Editor .

Hvis du bruker det samme regnearket, vil du fortsatt ha  SendEmail()- funksjonen der. Klipp ut koden og lim den inn i Notisblokk. Du trenger det senere.

Lim inn følgende funksjon 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!');="" }="">

Slik fungerer denne koden:

  • Last inn verdien fra celle D2 inn i monthSales- variabelen.
  • IF-erklæringen sammenligner det månedlige salget i celle D2 med $16 000
  • Hvis verdien er over 16 000, vil koden utløse en nettlesermeldingsboks med et varsel.

Lagre denne koden og kjør den. Hvis det fungerer riktig, bør du se følgende varselmelding i nettleseren din.

Bruk Google Sheets til å sende en e-post basert på celleverdi

Nå som du har et Google Apps-skript som kan sende et e-postvarsel og et annet skript som kan sammenligne en verdi fra et regneark, er du klar til å kombinere de to og sende et varsel i stedet for å utløse en varselmelding.

Trinn 3: Sett alt sammen

Nå er det på tide å kombinere de to skriptene du har laget til ett enkelt skript.

På dette tidspunktet bør du ha et regneark med en fane kalt Sheet1 som inneholder e-postvarslingsmottakeren. Den andre fanen kalt MyReport inneholder all salgsinformasjonen din.

Tilbake i Script Editor er det på tide å praktisere alt du har lært så langt.

Erstatt all koden i skriptredigeringsprogrammet med de to funksjonene dine, redigert 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);="" }="">

Legg merke til redigeringene her.

Inne i IF-setningen limer du inn SendEmail- skriptet i CheckSales() -funksjonen innenfor if-setningsparentesene.

For det andre, sett sammen monthSales -variabelen til slutten av e-postmeldingen ved å bruke + -tegnet.

Det eneste som gjenstår er å utløse funksjonen CheckSales() hver måned.

For å gjøre dette, i skriptredigering:

  1. Klikk på Rediger menyelementet, og klikk deretter på Gjeldende prosjekts utløsere .
  2. Klikk på opprett en ny utløser nederst på skjermen .
  3. Velg CheckSales -funksjonen som skal kjøres.
  4. Endre Velg hendelseskilde til tidsdrevet .
  5. Endre  Velg type tidsbasert utløser til månedstidtaker .

Klikk på Lagre for å fullføre utløseren.

Bruk Google Sheets til å sende en e-post basert på celleverdi

Hver måned vil det nye skriptet ditt kjøres og sammenligne det totale månedlige salgsbeløpet i celle D2 med $16 000.

Hvis det er mindre, vil det sende en e-postvarsel som varsler deg om det lave månedlige salget.

Bruk Google Sheets til å sende en e-post basert på celleverdi

Som du kan se, pakker Google Apps Scripts mye funksjonalitet i en liten pakke. Med bare noen få enkle kodelinjer kan du gjøre noen ganske fantastiske ting.

Hvis du vil eksperimentere litt mer, kan du prøve å legge til sammenligningsgrensen på $16 000 i en annen celle i regnearket, og deretter lese det inn i skriptet før du sammenligner. På denne måten kan du endre grensen bare ved å endre verdien i arket.

Ved å finjustere koden og legge til nye kodeblokker, kan du bygge videre på disse enkle tingene du lærer for å bygge noen fantastiske Google-skript til slutt.

Automatisering av prosessen

Så langt så bra, men skriptet ovenfor vil bare kjøre manuelt hvis vi ikke angir noen utløsere. Heldigvis gjorde Google den utløste automatiseringen enkel å konfigurere. Her er fremgangsmåten. 

I Apps Script-redigeringsprogrammet klikker du på Utløsere ikonet på venstre sidefelt (det ser ut som en liten klokke).

Klikk på opprett ny trigger-koblingen eller Legg til utløser knappen nederst til høyre på utløsere-siden.

Velg hvilken funksjon som skal kjøres rullegardinmenyen, velg sendEmails< en i=4> funksjon.

Velg hendelseskilde rullegardinmenyen velger du Tidsdrevet.

Velg type tidsbasert utløser rullegardinmenyen velger du frekvensen du ønsker (f.eks. Dagtimer for daglige e-poster, Uketimer for ukentlige e-poster osv.).

Hvis aktuelt, velg ønsket tidsrom eller ukedag.

Klikk Lagre for å opprette utløseren.

Etter du har lagret, klikker du på Distribuer -knappen øverst til høyre, og følger instruksjonene for å merke og definere implementeringen. Du må gi automasjonstillatelser for å kjøre, og det samme gjelder selve skriptet.  

Når det gjelder den gitte triggeren, siden vårt eksempel handler om å sende fakturapåminnelser, antar vi at disse er månedlige, og det er hensiktsmessig å sende dem hver 1. i måneden mellom kl. 13.00 og 14.00. Men selvfølgelig kan du endre frekvensen og timingen basert på dine behov. 

Hvordan sende en e-post med et vedlegg

For å vise deg hvordan du sender e-poster med vedlegg, gjenbruker vi det eksemplariske arket med fakturapåminnelser og refaktoriserer kodebiten til å inkludere vedlegg. Nå begynner vi med funksjonen, og e-postmalen kommer senere i koden. sendEpostPåminnelser

Vi bør fremheve at kodebiten nedenfor henter e-postvedlegg fra en Google Disk-mappe, der det er viktig å inkludere mappe-ID-en og følge den gitte navnekonvensjonen. Mer om det under La oss bryte ned kodedelen

function sendEmailReminders() { // Hent det aktive arket var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // Hent dataområdet (unntatt overskriftsraden) var dataRange = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn()); // Hent verdiene fra dataområdet var data = dataRange.getValues(); // Gå gjennom radene med data for (var i = 0; i < data.length; i++) { var rad = data[i]; // Hent verdiene fra hver kolonne var businessName = row[0]; var email = rad[1]; var invoiceNumber = rad[2]; var invoiceAmount = rad[3]; var dueDate = rad[4]; var emne = rad[5]; // Email body var emailBody = "Kjære " + bedriftsnavn + ",\n\n" + "Dette er en påminnelse om at faktura #" + invoiceNumber + " for $" + invoiceAmount + " forfaller " + forfallsdato + ".\n" + "Vennligst finn vedlagte faktura.\n\n" + "Takk for din raske oppmerksomhet til denne saken."; // Legg ved den tilsvarende fakturaen - Du må oppgi riktig mappe-ID der fakturaene dine er lagret var invoiceFolderId = 'YOUR_FOLDER_ID_HERE'; var invoiceFolder = DriveApp.getFolderById(invoiceFolderId); var invoiceFiles = invoiceFolder.getFilesByName(invoiceNumber + '.pdf'); // Forutsatt at fakturafilene er i PDF-format var invoiceFile; if (invoiceFiles.hasNext()) { invoiceFile = invoiceFiles.next(); } else { // Hvis fakturafilen ikke blir funnet, kan du hoppe over denne raden eller logge en feilmelding console.error("Fakturafil ikke funnet for fakturanummer: " + invoiceNumber); Fortsette; } // Send e-posten med vedlegget MailApp.sendEmail({ to: email, subject: subject, body: emailBody, attachments: [invoiceFile] }); } }

La oss bryte ned koden

1. Definer funksjonen:sendEmailReminders

function sendEmailReminders() {

Linjen erklærer en funksjon kalt , som vil inneholde koden for å sende e-postpåminnelser med attachments.sendEmailReminders

2. Få det aktive arket:

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

Linjen henter det aktive arket fra det åpne Google Sheets-dokumentet.

3. Få dataområdet (unntatt overskriftsraden):

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

Denne linjen henter dataområdet i arket, unntatt overskriftsraden. Den starter fra den andre raden (rad 2) og den første kolonnen (kolonne 1) og strekker seg til den siste raden og den siste kolonnen på arket.

Sidemerknad: Når du oppretter det egendefinerte arket ditt, må du endre for å matche arket ditt. dataområde

4. Hent verdiene fra dataområdet:

var data = dataRange.getValues();

Denne linjen henter verdiene (innholdet) fra celleområdet definert i forrige trinn.

5. Gå gjennom dataradene:

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

Denne løkken går gjennom hver rad i matrisen. Variabelen representerer gjeldende datarad i hver iteration.fordatarow

6. Hent verdiene fra hver kolonne:

var businessName = rad[0]; var email = rad[1]; var invoiceNumber = rad[2]; var invoiceAmount = rad[3]; var dueDate = rad[4]; var emne = rad[5];

Linjene ovenfor trekker ut verdiene fra hver kolonne i gjeldende datarad. Hver verdi blir senere tildelt en variabel for enkel referanse i skriptet. De angitte verdiene er tilpasset vårt eksemplariske ark. 

7. Opprett e-postteksten:

var emailBody = "Kjære " + bedriftsnavn + ",\n\n" + "Dette er en påminnelse om at faktura #" + invoiceNumber + " for $" + invoiceAmount + " forfaller " + forfallsdato + ".\n" + "Vennligst finn vedlagte faktura.\n\n" + "Takk for din raske oppmerksomhet til denne saken.";

Koden konstruerer e-postteksten ved å bruke verdiene som er hentet fra arket. E-postteksten er en streng som inkluderer firmanavn, fakturanummer, fakturabeløp og forfallsdato.

8. Få den tilsvarende fakturafilen:

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("Faktafil ikke funnet for fakturanummer: " + invoiceNumber); Fortsette; }

Disse linjene henter fakturafilen knyttet til gjeldende rad. 

Først åpnes fakturafilmappen ved hjelp av mappe-IDen. Sørg for å erstatte med den faktiske mappe-ID-en. DIN_MAPPE_ID_HER

Merk at navnekonvensjonen i eksemplet vårt er , og den faktiske fakturaen heter «123456.pdf». Hvis vedleggsfilene dine har et annet navn, må du oppdatere formateringen. (fakturanummer + '.pdf')

Deretter søker skriptet etter en fil med samme navn som fakturanummeret (forutsatt at filen er i PDF-format). 

Hvis filen blir funnet, tilordnes den til variabelen; ellers logger skriptet en feilmelding og går videre til neste row.invoiceFile

9. Send e-posten med vedlegget:

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

Denne linjen sender brødteksten og e-postvedleggene, og her er resultatene du bør få. Dessuten gjelder alle automatiseringstrinn som tidligere beskrevet, og det er fornuftig å beholde den månedlige triggeren siden dette handler om å sende fakturapåminnelser. 

Send en HTML-e-post med GSheets

For å sende en HTML-e-post kan du gjøre noen, ganske enkle, endringer i skriptet som er beskrevet tidligere. Her er det: 

function sendEmailReminders() { // Hent det aktive arket var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // Hent dataområdet (unntatt overskriftsraden) var dataRange = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn()); // Hent verdiene fra dataområdet var data = dataRange.getValues(); // Gå gjennom radene med data for (var i = 0; i < data.length; i++) { var rad = data[i]; // Hent verdiene fra hver kolonne var businessName = row[0]; var email = rad[1]; var invoiceNumber = rad[2]; var invoiceAmount = rad[3]; var dueDate = rad[4]; var emne = rad[5]; // HTML email body var emailBodyHtml = "<p>Kjære " + bedriftsnavn + ",</p>" + "<p>Dette er en påminnelse om at faktura #" + invoiceNumber + " for $" + invoiceAmount + " forfaller " + forfallsdato + ".</p>" + "<p>Finn vedlagte faktura.</p>" + "<p>Takk for din raske oppmerksomhet til denne saken.</p>"; // Legg ved den tilsvarende fakturaen - Du må oppgi riktig mappe-ID der fakturaene dine er lagret var invoiceFolderId = 'YOUR_FOLDER_ID_HERE'; var invoiceFolder = DriveApp.getFolderById(invoiceFolderId); var invoiceFiles = invoiceFolder.getFilesByName(invoiceNumber + '.pdf'); // Forutsatt at fakturafilene er i PDF-format var invoiceFile; if (invoiceFiles.hasNext()) { invoiceFile = invoiceFiles.next(); } else { // Hvis fakturafilen ikke blir funnet, kan du hoppe over denne raden eller logge en feilmelding console.error("Fakturafil ikke funnet for fakturanummer: " + invoiceNumber); Fortsette; } // Send e-posten med vedlegget MailApp.sendEmail({ to: email, subject: subject, htmlBody: emailBodyHtml, attachments: [invoiceFile] }); } }

I denne versjonen er ren tekst erstattet med en variabel som inneholder HTML-formatert innhold. emailBodyemailBodyHtml

Når du kaller funksjonen, erstattes også body-egenskapen med egenskapen, som sender e-posten som en HTML-e-post.MailApp.sendEmail()htmlBody

Sidemerknader: 

Vi bruker i stedet for i skriptet for enkelhets skyld. Begge alternativene vil fungere, men de er definitivt mer lesbare. Uansett, formater gjerne skriptet på nytt og erstatte sammenkoblingsoperatoren med plassholdere ved strenginterpolering. varconstconst${expression}

Ingen av skriptene inkluderer funksjoner siden disse ikke var nødvendige for eksemplene våre. Men det er selvfølgelig også mulig å legge til, og til og med automatisere, med denne typen skript. bccbcc

Til slutt kan du krydre ting ved å legge til egendefinerte CSS-stiler, se den oppdaterte funksjonen nedenfor. var emailBodyHtml =

// HTML-e-posttekst med CSS-stiler var emailBodyHtml = "<html><head><style>" + "body {font-family: Arial, sans-serif;}" + "p {font-size: 14px;}" + ".invoice-info {font-weight: bold; farge: #4a4a4a;}" + "</stil></hode><kropp>" + "<p>Kjære <span class='invoice-info'>" + bedriftsnavn + "</span>,</p>" + "<p>Dette er en påminnelse om at faktura #<span class='invoice-info'>" + invoiceNumber + "</span> for $<span class='invoice-info'>" + invoiceAmount + "</span> forfaller på <span class='invoice-info'>" + forfallsdato + "</span>.</p>" + "<p>Finn vedlagte faktura.</p>" + "<p>Takk for din raske oppmerksomhet til denne saken.</p>" + "</body></html>";

Pro tips: 

  • Gå enkelt med , noen postboksleverandører støtter kanskje ikke og gjengir kraftig stiliserte e-poster på riktig måte, eller i det hele tatt. <stil>
  • Bruk Mailtrap Email Testing for å se hvor mye postboksleverandører støtter HTML-e-postene dine. 
  • For å understreke igjen, Hvis du trenger å sende med et volum, er det alltid best å bruke en riktig MTA i stedet for funksjonen. sendE-post
  • Vær oppmerksom på begrensningene for Gmail-kontoen din. Disse er forskjellige for Google Workspace og/eller den private kontoen din. 

Hvordan sender jeg trigger-e-poster fra Google Sheets?

Når en celle når en viss verdi

Vi viser deg hvordan du sender en automatisk e-post basert på en celleverdi. I vårt eksempel vil fakturaen bli sendt når cellen Fakturabeløp når '0', noe som indikerer at en kunde har gått bort. 

Den angitte celleverdien utløser en tilpasset churn-e-post for umiddelbart å nå ut til kunden. Og igjen, automatiseringstrinnene forblir de samme, du kan fortsatt bruke den månedlige utløseren for disse e-postene. 

Husk at skriptet er det samme som vi brukte for å sende HTML-e-poster og vedlegg. Men den har et annet lag med funksjonalitet for å introdusere den beskrevne betingede logikken. Her er koden. 

function sendEmailReminders() { // Hent det aktive arket var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // Hent dataområdet (unntatt overskriftsraden) var dataRange = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn()); // Hent verdiene fra dataområdet var data = dataRange.getValues(); // Gå gjennom radene med data for (var i = 0; i < data.length; i++) { var rad = data[i]; // Hent verdiene fra hver kolonne var businessName = row[0]; var email = rad[1]; var invoiceNumber = rad[2]; var invoiceAmount = rad[3]; var dueDate = rad[4]; var emne = rad[5]; // Bestem e-postteksten basert på fakturabeløpet 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; farge: #4a4a4a;}" + "</stil></hode><kropp>" + "<p>Kjære " + bedriftsnavn + ",</p>" + "<p>Vi har lagt merke til at fakturabeløpet ditt er $0. Vi beklager at du går og setter pris på tilbakemeldinger om hvorfor du har bestemt deg for å slutte å bruke tjenestene våre.</p>" + "<p>Hvis det er noe vi kan gjøre for å forbedre tjenestene våre eller vinne tilbake virksomheten din, vennligst gi oss beskjed.</p>" + "<p>Takk for din tidligere virksomhet.</p>" + "</body></html>"; } else { // Vanlig e-postfaktura emailBodyHtml = "<html><head><style>" + "body {font-family: Arial, sans-serif;}" + "p {font-size: 14px;}" + ".invoice-info {font-weight: bold; farge: #4a4a4a;}" + "</stil></hode><kropp>" + "<p>Kjære <span class='invoice-info'>" + bedriftsnavn + "</span>,</p>" + "<p>Dette er en påminnelse om at faktura #<span class='invoice-info'>" + invoiceNumber + "</span> for $<span class='invoice-info'>" + invoiceAmount + "</span> forfaller på <span class='invoice-info'>" + forfallsdato + "</span>.</p>" + "<p>Finn vedlagte faktura.</p>" + "<p>Takk for din raske oppmerksomhet til denne saken.</p>" + "</body></html>"; } // Legg ved den tilsvarende fakturaen - Du må oppgi riktig mappe-ID der fakturaene dine er lagret var invoiceFolderId = 'DIN_FOLDER_ID_HER'; var invoiceFolder = DriveApp.getFolderById(invoiceFolderId); var invoiceFiles = invoiceFolder.getFilesByName(invoiceNumber + '.pdf'); // Forutsatt at fakturafilene er i PDF-format var invoiceFile; if (invoiceFiles.hasNext()) { invoiceFile = invoiceFiles.neste(); } else { // Hvis fakturafilen ikke blir funnet, kan du hoppe over denne raden eller logge en feilmelding console.error("Fakturafil ikke funnet for fakturanummer: " + invoiceNumber); Fortsette; } // Send e-posten med vedlegget MailApp.sendEmail({ to: email, subject: subject, htmlBody: emailBodyHtml, attachments: [invoiceFile] }); } }

Ned til kodebruddet 

Merk at vi kun fokuserer på det som er i funksjonen for å unngå å gjenta det som allerede er beskrevet. emailBodyHtml

Den oppdaterte delen av koden bestemmer innholdet i e-postteksten basert på fakturabeløpet. Hvis fakturabeløpet er, antas det å være en churn-kunde, og en annen e-postmal brukes. Her er en oversikt over koden: '0'

var emailBodyHtml;

Den erklærer en variabel med navn og lagrer innholdet i e-postteksten. Og det er i utgangspunktet undefined.emailBodyHtml

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

Erklæringen sjekker om fakturabeløpet er 0. Hvis det er det, blir koden innenfor de krøllede klammeparentesene utført. Denne blokken inneholder churn customer email template.if(`{}`)

emne = "Kunde varsling fra kunder";

Linjen setter e-postemnet til for churn-kunder."Churn-kundevarsel"

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

 Linjen angir verdien av variabelen til e-postmalen for kundeavgang. Malen er en HTML-streng med CSS-stiler definert i delen. E-postteksten inneholder plassholdere for bedriftsnavnet og en melding til kunden.emailBodyHtml<head>

} annet { ... }

Blokkeringen utføres når fakturabeløpet ikke er 0. Den setter variabelen til den vanlige e-postmalen for fakturaer. E-postmalen er en HTML-streng med CSS-stiler definert i delen. E-postteksten inneholder plassholdere for virksomhetens navn, fakturanummer, fakturabeløp og forfallsdato.elseemailBodyHtml<head>

Ved å bruke denne betingede logikken sender skriptet en annen e-posttekst basert på om fakturabeløpet er (churn-kunde) eller ikke-null (vanlig faktura). 0

Når celleverdien endres

Nå tar vi det samme skriptet som er brukt ovenfor og utvider det til å dekke en annen brukssituasjon – en klient oppgraderer, og kontoadministratoren må sende en "Takk"-e-post med en faktura. 

For å forklare er ideen at hver måned har kontoadministratoren et nytt ark (ark 2 i vårt eksempel) med kundenes legitimasjon. 

Koden vil nå sammenligne de to arkene og sende en automatisk "Takk"-e-post, i stedet for den vanlige faktura-e-posten, til kunder som har oppgradert (deres Fakturabeløp a> er større sammenlignet med den forrige). 

Det er heller ikke nødvendig å røre e-posten med churn, da det er en sjanse for at noen bestemte seg for å slutte å bruke vår imaginære tjeneste. Her er manuset.

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.lengde; i++) { var rad1 = data1[i]; var rad2 = data2[i]; var virksomhetsnavn = rad1[0]; var email = rad1[1]; var invoiceNumber = rad1[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øp for virksomhet: " + businessName + ". invoiceAmount1: " + invoiceAmount1 + ", invoiceAmount2: " + invoiceA2 ); Fortsette; } var forfallsdato = rad1[4]; var emne; var emailBodyHtml; if (invoiceAmount1 < invoiceAmount2) { console.log("Sender 'Takk for oppgraderingen' e-post til " + email + ". invoiceAmount1: " + invoiceAmount1 + ", invoiceAmount2: " + invoiceAmount2); emne = "Takk for oppgraderingen"; emailBodyHtml = "<html><body>" + "<p>Kjære " + bedriftsnavn + ",</p>" + "<p>Takk for at du oppgraderte! Vi setter pris på din virksomhet og ser frem til å betjene deg.</p>" + "<p>Vennlig hilsen</p>" + "<p>din bedrift</p>" + "</body></html>"; MailApp.sendEmail({ to: email, subject: subject, htmlBody: emailBodyHtml }); } else if (invoiceAmount1 == 0) { console.log("Sender 'Churn kundevarsel' e-post til " + email + ". invoiceAmount1: " + invoiceAmount1); emne = "Kunde varsling fra kunder"; emailBodyHtml = "<html><head><style>" + "body {font-family: Arial, sans-serif;}" + "p {font-size: 14px;}" + ".invoice-info {font-weight: bold; farge: #4a4a4a;}" + "</stil></hode><kropp>" + "<p>Kjære " + bedriftsnavn + ",</p>" + "<p>Vi har lagt merke til at fakturabeløpet ditt er $0. Vi beklager at du går og setter pris på tilbakemeldinger om hvorfor du har bestemt deg for å slutte å bruke tjenestene våre.</p>" + "<p>Hvis det er noe vi kan gjøre for å forbedre tjenestene våre eller vinne tilbake virksomheten din, vennligst gi oss beskjed.</p>" + "<p>Takk for din tidligere virksomhet.</p>" + "</body></html>"; MailApp.sendEmail({ to: email, subject: subject, htmlBody:emailBodyHtml }); } else { console.log("Sender 'Invoice Reminder' e-post til " + email + ". invoiceAmount1: " + invoiceAmount1 + ", invoiceAmount2: " + invoiceAmount2); emne = "Fakturapåminnelse"; emailBodyHtml = "<html><head><style>" + "body {font-family: Arial, sans-serif;}" + "p {font-size: 14px;}" + ".invoice-info {font-weight: bold; farge: #4a4a4a;}" + "</stil></hode><kropp>" "<p>Kjære <span class='invoice-info'>" + bedriftsnavn + "</span>,</p>" + "<p>Dette er en påminnelse om at faktura #<span class='invoice-info'>" + invoiceNumber + "</span> for $<span class='invoice-info'>" + invoiceAmount1 + "</span> forfaller på <span class='invoice-info'>" + forfallsdato + "</span>.</p>" + "<p>Finn vedlagte faktura.</p>" + "<p>Takk for din raske oppmerksomhet til denne saken.</p>" + "</body></html>"; // Legg ved den tilsvarende fakturaen - Du må oppgi riktig mappe-ID der fakturaene dine er lagret var invoiceFolderId = 'YOUR_FOLDER_ID_HERE'; var invoiceFolder = DriveApp.getFolderById(invoiceFolderId); var invoiceFiles = invoiceFolder.getFilesByName(invoiceNumber + '.pdf'); // Forutsatt at fakturafilene er i PDF-format var invoiceFile; if (invoiceFiles.hasNext()) { invoiceFile = invoiceFiles.next(); } else { // Hvis fakturafilen ikke blir funnet, kan du hoppe over denne raden eller logge en feilmelding console.error("Fakturafil ikke funnet for fakturanummer: " + invoiceNumber); Fortsette; } MailApp.sendEmail({ to: email, subject: subject, htmlBody: emailBodyHtml, vedlegg: [invoiceFile] }); } } }</p>" + "</body></html>"; // Legg ved den tilsvarende fakturaen - Du må oppgi riktig mappe-ID der fakturaene dine er lagret var invoiceFolderId = 'YOUR_FOLDER_ID_HERE'; var invoiceFolder = DriveApp.getFolderById(invoiceFolderId); var invoiceFiles = invoiceFolder.getFilesByName(invoiceNumber + '.pdf'); // Forutsatt at fakturafilene er i PDF-format var invoiceFile; if (invoiceFiles.hasNext()) { invoiceFile = invoiceFiles.next(); } else { // Hvis fakturafilen ikke blir funnet, kan du hoppe over denne raden eller logge en feilmelding console.error("Fakturafil ikke funnet for fakturanummer: " + invoiceNumber); Fortsette; } MailApp.sendEmail({ to: email, subject: subject, htmlBody: emailBodyHtml, vedlegg: [invoiceFile] }); } } }</p>" + "</body></html>"; // Legg ved den tilsvarende fakturaen - Du må oppgi riktig mappe-ID der fakturaene dine er lagret var invoiceFolderId = 'YOUR_FOLDER_ID_HERE'; var invoiceFolder = DriveApp.getFolderById(invoiceFolderId); var invoiceFiles = invoiceFolder.getFilesByName(invoiceNumber + '.pdf'); // Forutsatt at fakturafilene er i PDF-format var invoiceFile; if (invoiceFiles.hasNext()) { invoiceFile = invoiceFiles.next(); } else { // Hvis fakturafilen ikke blir funnet, kan du hoppe over denne raden eller logge en feilmelding console.error("Fakturafil ikke funnet for fakturanummer: " + invoiceNumber); Fortsette; } MailApp.sendEmail({ to: email, subject: subject, htmlBody: emailBodyHtml, vedlegg: [invoiceFile] }); } } }

Ned til kodebruddet 

1. Skriptet starter med å få referanser til både Ark1 og Ark2.

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

2. Den henter deretter dataene fra begge arkene, og starter fra den andre raden for å ekskludere 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. Skriptet itererer over radene i begge arkene (forutsatt at antallet rader er det samme i begge arkene). Den sammenligner fakturabeløpene fra Ark1 og Ark2 for hver tilsvarende rad.

for (var i = 0; i < data1.lengde; i++) { var rad1 = data1[i]; var rad2 = data2[i]; // Hent fakturabeløp fra begge arkene var invoiceAmount1 = parseFloat(row1[3].toString().replace('$', '').replace(' ,','.')); var invoiceAmount2 = parseFloat(row2[3].toString().replace('$', '').replace(',', 39;.'));

Kopiere

4. Skriptet sjekker deretter betingelsene for å sende ulike typer e-poster basert på sammenligning av fakturabeløp fra Ark1 og Ark2.

if (invoiceAmount1 < invoiceAmount2) { // Send "Takk for oppgraderingen" email } else if (invoiceAmount1 == 0) { // Send "Churn customer notification" email } else {// Send "Fakturapåminnelse" e-post }

Kopiere

Nøkkelsammenligningen er , som sjekker om fakturabeløpet i Ark1 er mindre enn fakturabeløpet i Ark2 for samme rad (dvs. samme kunde). Hvis det er sant, antar skriptet at kunden har oppgradert og sender en e-post. Ellers sjekker den for andre forhold (frafall eller vanlige fakturapåminnelser) og sender riktig e-post.if (invoiceAmount1 < invoiceAmount2)"Takk for oppgradering"

Når en Google Regneark-fil oppdateres

Nå lønner det seg å diskutere litt annerledes brukssak, der andre enn kontoansvarlig har tilgang til regnearket. 

La oss anta at vår kontoadministrator har en dag dedikert til å møte kunder og svare på spørsmålene deres. Klientene har tilgang til et regneark der de kort kan beskrive problemet og bestille plass. 

Ok, det er mye bedre måter å håndtere kundebestillinger og forespørsler på. Men vi vil holde oss til denne tilnærmingen for veiledningens skyld.

Trinn 1

Først må vi lage en tabell. Som vist nedenfor er vår ganske enkel, og inneholder bare tre rader med Manager, Time slot og Query.

Steg 2

Deretter trenger du Google-skript for å utløse e-poster uansett hvor noen oppdaterer arket med søket sitt, og dermed bestiller en plass. Her er et eksempel. 

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

Kopiere

For å hjelpe deg å forstå hva som foregår, lønner det seg å diskutere hovedfunksjonene. 

  • //@OnlyCurrentDoc – denne merknaden signaliserer at du vil at skriptet bare skal kjøre i det angitte Google-regnearket. Fjerning av merknaden aktivert skriptet på tvers av de andre filene dine. 
  • function processEdit () – en trigger (vi setter opp i neste trinn) kjører skriptet med denne funksjonen. Ganske enkelt setter funksjonen prosessen til å motta en e-post hver gang noen oppdaterer arket.
  • (e) – denne merknaden representerer objektet med data om redigeringene. Den har en rekkevidde-egenskap for å signalisere at et område, eller en celle, ble redigert. 
  • MailApp – et objekt som funksjonen bruker til å videresende e-posten. 

Før du går videre kan du teste arket og koden. Hvis du bruker det eksemplariske arket, fyller du bare inn en av cellene under Spørringskolonnen og kjører skriptet. E-posten skal komme i innboksen din umiddelbart, men husk at skriptet ikke er automatisert ennå.

Trinn 3

Det er på tide å angi og godkjenne en utløser for å sende e-poster automatisk. I Apps Script klikker du på vekkerklokkeikonet i sidemenyen. Klikk deretter "...opprett en ny utløser". 

I popup-vinduet for utløserkonfigurasjon velger du følgende kriterier.

  • prosessRediger
  • Hode
  • Fra regneark
  • På redigering

Merk: Det er greit hvis du beholder innstillingene for feilvarsling som standard, men du kan endre det om nødvendig. Det vil ikke påvirke den generelle funksjonen til utløseren eller manuset. Dette kan gjelde alle Google-skriptene du kanskje vil automatisere. 

Klikk Lagre, autoriser utløseren på kontoen din, og du vil se den i  Utløsere liste. Sørg også for å trykke på Deploy -knappen for å aktivere utløseren. 

Nå kan du gå tilbake til arket, fylle ut en annen celle i Spørringskolonnen og sjekke om du mottok det automatiserte varselet. 

Sidenotat: Du kan tilpasse arket til dine preferanser, men dette betyr at du også må tilpasse skriptet.

Tags: #HVORDAN

[100% løst] Hvordan fikser du Feilutskrift-melding på Windows 10?

[100% løst] Hvordan fikser du Feilutskrift-melding på Windows 10?

Mottar feilmelding om utskrift på Windows 10-systemet ditt, følg deretter rettelsene gitt i artikkelen og få skriveren din på rett spor...

Hvordan ta opp og spille av et Microsoft Teams-opptak

Hvordan ta opp og spille av et Microsoft Teams-opptak

Du kan enkelt besøke møtene dine igjen hvis du tar dem opp. Slik tar du opp og spiller av et Microsoft Teams-opptak for ditt neste møte.

Slik tilbakestiller du standardapper på Android

Slik tilbakestiller du standardapper på Android

Når du åpner en fil eller klikker på en kobling, vil Android-enheten velge en standardapp for å åpne den. Du kan tilbakestille standardappene dine på Android med denne veiledningen.

RETTET: Entitlement.diagnostics.office.com sertifikatfeil

RETTET: Entitlement.diagnostics.office.com sertifikatfeil

RETTET: Entitlement.diagnostics.office.com sertifikatfeil

Topp 10 spillnettsteder som ikke er blokkert av skolen i 2022

Topp 10 spillnettsteder som ikke er blokkert av skolen i 2022

For å finne ut de beste spillsidene som ikke er blokkert av skoler, les artikkelen og velg den beste ublokkerte spillnettsiden for skoler, høyskoler og arbeider

FIKSET: Skriver i feiltilstand [HP, Canon, Epson, Zebra og Brother]

FIKSET: Skriver i feiltilstand [HP, Canon, Epson, Zebra og Brother]

Hvis du står overfor skriveren i feiltilstand på Windows 10 PC og ikke vet hvordan du skal håndtere det, følg disse løsningene for å fikse det.

Slik sikkerhetskopierer du Chromebook (2022)

Slik sikkerhetskopierer du Chromebook (2022)

Hvis du lurer på hvordan du sikkerhetskopierer Chromebooken din, har vi dekket deg. Finn ut mer om hva som sikkerhetskopieres automatisk og hva som ikke er her

Slik fikser du Xbox-appen som ikke åpnes i Windows 10 [HURTIGVEILEDNING]

Slik fikser du Xbox-appen som ikke åpnes i Windows 10 [HURTIGVEILEDNING]

Vil du fikse Xbox-appen vil ikke åpne i Windows 10, følg deretter rettelsene som Aktiver Xbox-appen fra tjenester, tilbakestill Xbox-appen, Tilbakestill Xbox-apppakken og andre..

Hva er LogiOptions.exe (UNICODE) og er prosessen sikker?

Hva er LogiOptions.exe (UNICODE) og er prosessen sikker?

Hvis du har et Logitech-tastatur og -mus, vil du se at denne prosessen kjører. Det er ikke skadelig programvare, men det er ikke en viktig kjørbar fil for Windows OS.

Rettet Java Update/Install Error 1603 i Windows 10

Rettet Java Update/Install Error 1603 i Windows 10

Les artikkelen for å lære hvordan du fikser Java Update-feil 1603 i Windows 10, prøv rettelsene gitt en etter en og fiks feil 1603 enkelt ...