Använd Google Kalkylark för att skicka ett e-postmeddelande baserat på cellvärde

Att skicka ett e-postmeddelande från Google Sheets kräver användning av ett Google Apps-skript. Men oroa dig inte, om du aldrig har skapat ett enda Google Apps-skript tidigare är det väldigt enkelt att skicka ett e-postmeddelande.

I följande handledning lär du dig hur du kontrollerar värdet på en cell i Google Kalkylark . Om värdet överstiger en viss tröskelgräns kan du automatiskt skicka ett varningsmail till vilken e-postadress du vill.

Det finns många användningsområden för detta skript. Du kan få en varning om de dagliga intäkterna i din försäljningsrapport faller under en viss nivå. Eller så kan du få ett e-postmeddelande om dina anställda rapporterar att de har fakturerat kunden för många timmar i ditt projektspårningsark.

Oavsett applikation är det här skriptet övertygande. Det kommer också att spara tid för att behöva övervaka dina kalkylbladsuppdateringar manuellt.

Steg 1: Skicka ett e-postmeddelande med Google Sheets

Innan du kan skapa ett Google Apps-skript för att skicka ett e-postmeddelande från Google Sheets behöver du också en Gmail-e-postadress som Google Apps Script kommer åt för att skicka ut dina varningsmeddelanden.

Du måste också skapa ett nytt kalkylblad som innehåller en e-postadress.

Lägg bara till en namnkolumn och en e-postkolumn och fyll i dem med den person du vill ska få varningsmejlet.

Använd Google Kalkylark för att skicka ett e-postmeddelande baserat på cellvärde

Nu när du har en e-postadress att skicka ett varningsmail till är det dags att skapa ditt manus.

För att komma in i skriptredigeraren klickar du på Verktyg och sedan på Skriptredigeraren .

Du kommer att se ett skriptfönster med en standardfunktion som heter  myFunction() . Byt namn på detta till SendEmail() .

Klistra sedan in följande kod 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å här fungerar den här koden:

  • getRange och getValues ​​hämtar värdet från cellen som anges i getRange-metoden.
  • var meddelande och var ämne definierar texten som kommer att bygga din varningsmail.
  • MailApp.sendEmail - funktionen utför äntligen Google Scripts skicka e-postfunktion med ditt anslutna Google-konto.

Spara skriptet genom att klicka på diskikonen och kör det sedan genom att klicka på körikonen (högerpilen).

Tänk på att Google Script behöver tillstånd för att komma åt ditt Gmail-konto för att skicka e-postmeddelandet. Så första gången du kör skriptet kan du se en varning som nedan.

Använd Google Kalkylark för att skicka ett e-postmeddelande baserat på cellvärde

Klicka på Granska behörigheter så ser du en annan varningsskärm som du måste kringgå.

Den här varningsskärmen beror på att du skriver ett anpassat Google-skript som inte är registrerat som ett officiellt.

Använd Google Kalkylark för att skicka ett e-postmeddelande baserat på cellvärde

Klicka bara på Avancerat och klicka sedan på länken Gå till Skicka e-post (osäkert) .

Du behöver bara göra detta en gång. Ditt skript kommer att köras och e-postadressen du angav i ditt kalkylblad kommer att få ett e-postmeddelande som det nedan.

Använd Google Kalkylark för att skicka ett e-postmeddelande baserat på cellvärde

Steg 2: Läsa ett värde från en cell i Google Sheets

Nu när du har skrivit ett Google Apps-skript som kan skicka ett varningsmeddelande är det dags att göra det varningsmeddelandet mer funktionellt.

Nästa steg du lär dig är hur du läser ett datavärde från ett Google-kalkylblad, kontrollerar värdet och skickar ett popup-meddelande om det värdet är över eller under en övre gräns.

Innan du kan göra detta måste du skapa ett annat arbetsblad i Google-kalkylarket du arbetar med. Kalla det här nya bladet "MyReport."

Använd Google Kalkylark för att skicka ett e-postmeddelande baserat på cellvärde

Tänk på att cell D2 är den du vill kontrollera och jämföra. Föreställ dig att du vill veta varje månad om din totala försäljning har sjunkit under $16 000.

Låt oss skapa Google Apps-skriptet som gör det.

Gå tillbaka till ditt Script Editor-fönster genom att klicka på Verktyg och sedan Script Editor .

Om du använder samma kalkylblad har du fortfarande  funktionen SendEmail() där. Klipp ut den koden och klistra in den i Anteckningar. Du kommer att behöva det senare.

Klistra in följande funktion i kodfönstret.

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å här fungerar den här koden:

  • Ladda värdet från cell D2 till variabeln monthSales .
  • IF-utlåtandet jämför månadsförsäljningen i cell D2 med 16 000 USD
  • Om värdet är över 16 000 kommer koden att utlösa en webbläsarmeddelanderuta med en varning.

Spara den här koden och kör den. Om det fungerar korrekt bör du se följande varningsmeddelande i din webbläsare.

Använd Google Kalkylark för att skicka ett e-postmeddelande baserat på cellvärde

Nu när du har ett Google Apps-skript som kan skicka en e-postvarning och ett annat skript som kan jämföra ett värde från ett kalkylark, är du redo att kombinera de två och skicka en varning istället för att utlösa ett varningsmeddelande.

Steg 3: Lägg ihop allt

Nu är det dags att kombinera de två skripten du har skapat till ett enda skript.

Vid det här laget bör du ha ett kalkylblad med en flik som heter Sheet1 som innehåller mottagaren av varningsmeddelandet. Den andra fliken som heter MyReport innehåller all din försäljningsinformation.

Tillbaka i Script Editor är det dags att öva på allt du har lärt dig hittills.

Ersätt all kod i skriptredigeraren med dina två funktioner, redigerade som visas här.

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ägg märke till ändringarna här.

Inuti IF-satsen, klistra in SendEmail- skriptet i CheckSales() -funktionen inom if-satsens parenteser.

För det andra, sammanfoga variabeln monthSales till slutet av e-postmeddelandet med + -tecknet.

Det enda som återstår att göra är att aktivera CheckSales()-funktionen varje månad.

För att göra detta, i skriptredigeraren:

  1. Klicka på menyalternativet Redigera och klicka sedan på Aktuella projekts utlösare .
  2. Klicka på skapa en ny utlösare längst ned på skärmen .
  3. Välj CheckSales -funktionen för att köra.
  4. Ändra Välj händelsekälla till tidsstyrd .
  5. Ändra  Välj typ av tidsbaserad utlösare till månadstimer .

Klicka på Spara för att slutföra utlösaren.

Använd Google Kalkylark för att skicka ett e-postmeddelande baserat på cellvärde

Varje månad körs ditt nya skript och jämför det totala månatliga försäljningsbeloppet i cell D2 med 16 000 USD.

Om det är mindre kommer det att skicka ett varningsmail som meddelar dig om den låga månadsförsäljningen.

Använd Google Kalkylark för att skicka ett e-postmeddelande baserat på cellvärde

Som du kan se innehåller Google Apps Scripts mycket funktionalitet i ett litet paket. Med bara några enkla rader kod kan du göra några ganska fantastiska saker.

Om du vill experimentera lite mer, försök att lägga till jämförelsegränsen på $16 000 i en annan cell i kalkylarket och läs sedan in det i ditt skript innan du gör jämförelsen. På så sätt kan du ändra gränsen bara genom att ändra värdet i arket.

Genom att justera koden och lägga till nya kodblock kan du bygga vidare på dessa enkla saker du lär dig för att så småningom bygga några fantastiska Google-skript.

Automatisera processen

Så långt har det gått bra, men skriptet ovan kommer bara att köras manuellt om vi inte ställer in några triggers. Lyckligtvis gjorde Google den utlösta automatiseringen enkel att konfigurera. Här är stegen. 

I Apps Script-redigeraren klickar du på Triggers ikonen i det vänstra sidofältet (det ser ut som en liten klocka).

Klicka på skapa ny triggerr-länken eller Lägg till utlösare knappen i det nedre högra hörnet på sidan Utlösare.

Välj vilken funktion som ska köras rullgardinsmenyn väljer du sendEmails< en i=4> funktion.

Välj händelsekälla rullgardinsmenyn väljer du Tidsdriven.

Välj typ av tidsbaserad utlösare rullgardinsmenyn väljer du den frekvens du vill ha (t.ex. Dagtimer för dagliga e-postmeddelanden, Veckotimer för veckovisa e-postmeddelanden, etc.).

Om tillämpligt, välj önskat tidsintervall eller veckodag.

Klicka Spara för att skapa utlösaren.

När du har sparat klickar du på Distribuera -knappen i det övre högra hörnet och följer instruktionerna för att märka och definiera implementeringen. Du måste ge automatiseringsbehörighet att köra, och detsamma gäller för själva skriptet.  

När det gäller den givna triggern, eftersom vårt exempel handlar om att skicka fakturapåminnelser, antar vi att dessa är månatliga, och det är lämpligt att skicka dem var 1:a i månaden mellan kl. 13.00 och 14.00. Men självklart kan du ändra frekvens och timing baserat på dina behov. 

Hur man skickar ett e-postmeddelande med en bilaga

För att visa dig hur du skickar e-postmeddelanden med bilagor kommer vi att återanvända det exemplariska arket med fakturapåminnelser och omstrukturera kodavsnittet så att det inkluderar bilagor. Nu börjar vi med funktionen och e-postmallen kommer senare i koden. skickaE-postpåminnelser

Vi bör markera att utdraget nedan hämtar e-postbilagor från en Google Drive-mapp, där det är viktigt att inkludera mapp-ID och följa den givna namnkonventionen. Mer om det under Låt oss dela upp kodavsnittet

function sendEmailReminders() { // Hämta det aktiva arket var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // Hämta dataintervallet (exklusive rubrikraden) var dataRange = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn()); // Hämta värdena från dataintervallet var data = dataRange.getValues(); // Slinga genom dataraderna för (var i = 0; i < data.length; i++) { var row = data[i]; // Hämta värdena från varje kolumn var businessName = row[0]; var email = rad[1]; var invoiceNumber = rad[2]; var invoiceAmount = rad[3]; var förfallodatum = rad[4]; var ämne = rad[5]; // Email body var emailBody = "Kära " + företagsnamn + ",\n\n" + "Detta är en påminnelse om att faktura #" + invoiceNumber + " för $" + invoiceAmount + " förfaller " + förfallodatum + ".\n" + "Ta reda på den bifogade fakturan.\n\n" + "Tack för din omedelbara uppmärksamhet på denna fråga."; // Bifoga motsvarande faktura - Du måste ange korrekt mapp-ID där dina fakturor lagras var invoiceFolderId = 'YOUR_FOLDER_ID_HERE'; var invoiceFolder = DriveApp.getFolderById(invoiceFolderId); var invoiceFiles = invoiceFolder.getFilesByName(fakturaNumber + '.pdf'); // Förutsatt att fakturafiler är i PDF-format var invoiceFile; if (invoiceFiles.hasNext()) { invoiceFile = invoiceFiles.next(); } else { // Om fakturafilen inte hittas kan du hoppa över den här raden eller logga ett fel console.error("Fakturafil hittades inte för fakturanummer: " + invoiceNumber); Fortsätta; } // Skicka e-postmeddelandet med bilagan MailApp.sendEmail({ to: email, subject: subject, body: emailBody, attachments: [invoiceFile] }); } }

Låt oss bryta ner koden

1. Definiera funktionen:sendEmailReminders

function sendEmailReminders() {

Raden deklarerar en funktion som heter , som kommer att innehålla koden för att skicka e-postpåminnelser med attachments.sendEmailReminders

2. Hämta det aktiva arket:

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

Raden hämtar det aktiva arket från det för närvarande öppna Google Sheets-dokumentet.

3. Hämta dataintervallet (exklusive rubrikraden):

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

Den här raden hämtar dataintervallet i arket, exklusive rubrikraden. Den börjar från den andra raden (rad 2) och den första kolumnen (kolumn 1) och sträcker sig till den sista raden och den sista kolumnen på arket.

Sidoanmärkning: När du skapar ditt anpassade arbetsblad måste du ändra det så att det matchar ditt arbetsblad. dataintervall

4. Hämta värdena från dataintervallet:

var data = dataRange.getValues();

Den här raden hämtar värdena (innehållet) från det cellintervall som definierades i föregående steg.

5. Gå igenom raderna med data:

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

Denna loop itererar genom varje rad i arrayen. Variabeln representerar den aktuella raden med data i varje iteration.fordatarow

6. Hämta värdena från varje kolumn:

var businessName = rad[0]; var email = rad[1]; var invoiceNumber = rad[2]; var invoiceAmount = rad[3]; var förfallodatum = rad[4]; var ämne = rad[5];

Raderna ovan extraherar värdena från varje kolumn i den aktuella raden med data. Varje värde tilldelas senare till en variabel för enkel referens i skriptet. De angivna värdena är anpassade till vårt exemplariska blad. 

7. Skapa e-posttexten:

var emailBody = "Kära " + företagsnamn + ",\n\n" + "Detta är en påminnelse om att faktura #" + invoiceNumber + " för $" + invoiceAmount + " förfaller " + förfallodatum + ".\n" + "Ta reda på den bifogade fakturan.\n\n" + "Tack för din omedelbara uppmärksamhet på denna fråga.";

Koden konstruerar e-posttexten med hjälp av värdena som extraherats från arket. E-posttexten är en sträng som inkluderar företagsnamn, fakturanummer, fakturabelopp och förfallodatum.

8. Hämta motsvarande fakturafil:

var invoiceFolderId = 'DIN_MAPP_ID_HÄR'; var invoiceFolder = DriveApp.getFolderById(invoiceFolderId); var invoiceFiles = invoiceFolder.getFilesByName(fakturaNumber + '.pdf'); var invoiceFile; if (invoiceFiles.hasNext()) { invoiceFile = invoiceFiles.next(); } else { console.error("Fakturafil hittades inte för fakturanummer: " + invoiceNumber); Fortsätta; }

Dessa rader hämtar fakturafilen som är kopplad till den aktuella raden. 

Först nås fakturafilmappen med dess mapp-ID. Se till att ersätta med det faktiska mapp-id:t. DIN_MAPP_ID_HÄR

Observera att namnkonventionen i vårt exempel är, och att den faktiska fakturan heter "123456.pdf". Om dina bifogade filer har ett annat namn måste du uppdatera formateringen. (invoiceNumber + '.pdf')

Därefter söker skriptet efter en fil med samma namn som fakturanumret (förutsatt att filen är i PDF-format). 

Om filen hittas tilldelas den variabeln; annars loggar skriptet ett felmeddelande och går vidare till nästa row.invoiceFile

9. Skicka e-postmeddelandet med bilagan:

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

Den här raden skickar brödtexten och e-postbilagor, och här är resultaten du bör få. Dessutom gäller alla automatiseringssteg som tidigare beskrivits, och det är vettigt att behålla den månatliga triggern eftersom det handlar om att skicka fakturapåminnelser. 

Skicka ett HTML-e-postmeddelande med GSheets

För att skicka ett HTML-e-postmeddelande kan du göra några, ganska enkla, ändringar av skriptet som beskrivits tidigare. Här är det: 

function sendEmailReminders() { // Hämta det aktiva arket var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // Hämta dataintervallet (exklusive rubrikraden) var dataRange = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn()); // Hämta värdena från dataintervallet var data = dataRange.getValues(); // Slinga genom dataraderna för (var i = 0; i < data.length; i++) { var row = data[i]; // Hämta värdena från varje kolumn var businessName = row[0]; var email = rad[1]; var invoiceNumber = rad[2]; var invoiceAmount = rad[3]; var förfallodatum = rad[4]; var ämne = rad[5]; // HTML email body var emailBodyHtml = "<p>Kära " + företagsnamn + ",</p>" + "<p>Detta är en påminnelse om att faktura #" + invoiceNumber + " för $" + invoiceAmount + " förfaller " + förfallodatum + ".</p>" + "<p>Ta reda på den bifogade fakturan.</p>" + "<p>Tack för din omedelbara uppmärksamhet på denna fråga.</p>"; // Bifoga motsvarande faktura - Du måste ange korrekt mapp-ID där dina fakturor lagras var invoiceFolderId = 'YOUR_FOLDER_ID_HERE'; var invoiceFolder = DriveApp.getFolderById(invoiceFolderId); var invoiceFiles = invoiceFolder.getFilesByName(fakturaNumber + '.pdf'); // Förutsatt att fakturafiler är i PDF-format var invoiceFile; if (invoiceFiles.hasNext()) { invoiceFile = invoiceFiles.next(); } else { // Om fakturafilen inte hittas kan du hoppa över den här raden eller logga ett fel console.error("Fakturafil hittades inte för fakturanummer: " + invoiceNumber); Fortsätta; } // Skicka e-postmeddelandet med bilagan MailApp.sendEmail({ to: email, subject: subject, htmlBody: emailBodyHtml, attachments: [invoiceFile] }); } }

I den här versionen ersätts vanlig text med en variabel som innehåller HTML-formaterat innehåll. emailBodyemailBodyHtml

När funktionen anropas ersätts även body-egenskapen med egenskapen, som skickar e-postmeddelandet som ett HTML-e-postmeddelande.MailApp.sendEmail()htmlBody

Sidanteckningar: 

Vi använder istället för i skriptet för enkelhets skull. Båda alternativen skulle fungera, men de är definitivt mer läsbara. Hur som helst, formatera gärna om skriptet och ersätt konkateneringsoperatorn med platshållare vid stränginterpolation. varconstconst${expression}

Dessutom innehåller inget av skripten funktioner eftersom dessa inte var nödvändiga för våra exempel. Men det är naturligtvis också möjligt att lägga till, och till och med automatisera, med dessa typer av skript. bccbcc

Slutligen kan du piffa till saker och ting genom att lägga till anpassade CSS-stilar, se den uppdaterade funktionen nedan. var emailBodyHtml =

// HTML-e-posttext med CSS-stilar var emailBodyHtml = "<html><head><style>" + "body {font-family: Arial, sans-serif;}" + "p {font-size: 14px;}" + ".invoice-info {font-weight: bold; färg: #4a4a4a;}" + "</style></huvud><kropp>" + "<p>Kära <span class='faktura-info'>" + företagsnamn + "</span>,</p>" + "<p>Detta är en påminnelse om att faktura #<span class='invoice-info'>" + invoiceNumber + "</span> för $<span class='invoice-info'>" + invoiceAmount + "</span> förfaller på <span class='invoice-info'>" + förfallodatum + "</span>.</p>" + "<p>Ta reda på den bifogade fakturan.</p>" + "<p>Tack för din omedelbara uppmärksamhet på denna fråga.</p>" + "</body></html>";

Proffs tips: 

  • Ta det lugnt med , vissa postlådeleverantörer kanske inte stöder och renderar kraftigt stiliserade e-postmeddelanden på rätt sätt, eller alls. <stil>
  • Använd Mailtrap Email Testing för att se hur mycket postlådeleverantörer stöder dina HTML-e-postmeddelanden. 
  • För att betona igen, Om du behöver skicka med volym är det alltid bäst att använda en korrekt MTA istället för funktionen. skicka e-post
  • Tänk på begränsningarna för ditt Gmail-konto. Dessa är olika för Google Workspace och/eller ditt privata konto. 

Hur skickar jag trigger-e-postmeddelanden från Google Sheets?

När en cell når ett visst värde

Vi visar dig hur du skickar ett automatiskt e-postmeddelande baserat på ett cellvärde. I vårt exempel kommer fakturan att skickas när cellen Fakturabelopp når '0', vilket indikerar en avskedad kund. 

Det givna cellvärdet utlöser ett anpassat churn-e-postmeddelande för att omedelbart nå ut till kunden. Och återigen, automatiseringsstegen förblir desamma, du kan fortfarande använda den månatliga triggern för dessa e-postmeddelanden. 

Tänk på att skriptet är samma som vi använde för att skicka HTML-e-postmeddelanden och bilagor. Men det har ytterligare ett lager av funktionalitet för att introducera den beskrivna villkorliga logiken. Här är koden. 

function sendEmailReminders() { // Hämta det aktiva arket var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // Hämta dataintervallet (exklusive rubrikraden) var dataRange = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn()); // Hämta värdena från dataintervallet var data = dataRange.getValues(); // Slinga genom dataraderna för (var i = 0; i < data.length; i++) { var row = data[i]; // Hämta värdena från varje kolumn var businessName = row[0]; var email = rad[1]; var invoiceNumber = rad[2]; var invoiceAmount = rad[3]; var förfallodatum = rad[4]; var ämne = rad[5]; // Bestäm e-posttexten baserat på fakturabeloppet 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; färg: #4a4a4a;}" + "</style></huvud><kropp>" + "<p>Kära " + företagsnamn + ",</p>" + "<p>Vi har märkt att ditt fakturabelopp är 0 USD. Vi beklagar att du går och skulle uppskatta all feedback om varför du har valt att sluta använda våra tjänster.</p>" + "<p>Om det finns något vi kan göra för att förbättra våra tjänster eller vinna tillbaka din verksamhet, vänligen meddela oss.</p>" + "<p>Tack för dina tidigare affärer.</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; färg: #4a4a4a;}" + "</style></huvud><kropp>" + "<p>Kära <span class='faktura-info'>" + företagsnamn + "</span>,</p>" + "<p>Detta är en påminnelse om att faktura #<span class='invoice-info'>" + invoiceNumber + "</span> för $<span class='invoice-info'>" + invoiceAmount + "</span> förfaller på <span class='invoice-info'>" + förfallodatum + "</span>.</p>" + "<p>Ta reda på den bifogade fakturan.</p>" + "<p>Tack för din omedelbara uppmärksamhet på denna fråga.</p>" + "</body></html>"; } // Bifoga motsvarande faktura - Du måste ange korrekt mapp-ID där dina fakturor lagras var invoiceFolderId = 'YOUR_FOLDER_ID_HERE'; var invoiceFolder = DriveApp.getFolderById(invoiceFolderId); var invoiceFiles = invoiceFolder.getFilesByName(fakturaNumber + '.pdf'); // Förutsatt att fakturafiler är i PDF-format var invoiceFile; if (invoiceFiles.hasNext()) { invoiceFile = invoiceFiles.Nästa(); } else { // Om fakturafilen inte hittas kan du hoppa över den här raden eller logga ett fel console.error("Fakturafil hittades inte för fakturanummer: " + invoiceNumber); Fortsätta; } // Skicka e-postmeddelandet med bilagan MailApp.sendEmail({ to: email, subject: subject, htmlBody: emailBodyHtml, attachments: [invoiceFile] }); } }

Ner till kodbrytningen 

Observera att vi bara fokuserar på vad som finns i funktionen för att undvika att upprepa det som redan beskrivits. emailBodyHtml

Den uppdaterade delen av koden bestämmer innehållet i e-postmeddelandet baserat på fakturabeloppet. Om fakturabeloppet är, antas det vara en churn-kund och en annan e-postmall används. Här är en uppdelning av koden: '0'

var emailBodyHtml;

Den deklarerar en variabel som heter och lagrar innehållet i e-postmeddelandet. Och det lämnas initialt undefined.emailBodyHtml

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

Utdraget kontrollerar om fakturabeloppet är 0. Om så är fallet kommer koden inuti de lockiga klammerparenteserna att köras. Detta block innehåller churn customer email template.if(`{}`)

ämne = "Kundavisering";

Raden ställer in ämnet för e-postmeddelandet för churn-kunder."Churn customer notification"

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

 Linjen ställer in värdet för variabeln till churn-kunds e-postmallen. Mallen är en HTML-sträng med CSS-stilar definierade i avsnittet. E-posttexten innehåller platshållare för företagsnamnet och ett meddelande till kunden.emailBodyHtml<head>

} annat { ... }

Blockeringen utförs när fakturabeloppet inte är 0. Det ställer in variabeln till den vanliga e-postmall för faktura. E-postmallen är en HTML-sträng med CSS-stilar definierade i avsnittet. E-postmeddelandet innehåller platshållare för företagsnamn, fakturanummer, fakturabelopp och förfallodatum.elseemailBodyHtml<head>

Genom att använda denna villkorliga logik skickar skriptet en annan e-posttext baserat på om fakturabeloppet är (churn customer) eller icke-noll (vanlig faktura). 0

När cellvärdet ändras

Nu tar vi samma skript som ovan och utökar det till att täcka ett annat användningsfall – en klient uppgraderar och kontoansvarig måste skicka ett "Tack"-e-postmeddelande med en faktura. 

För att förklara är tanken att kontoansvarig varje månad har ett nytt blad (ark 2 i vårt exempel) med kundernas referenser. 

Koden kommer nu att jämföra de två arken och skicka ett automatiskt "Tack"-e-postmeddelande, istället för det vanliga fakturameddelandet, till kunder som uppgraderat (deras Fakturabelopp a> är större jämfört med den föregående). 

Dessutom finns det ingen anledning att röra churn-e-postmeddelandet, eftersom det finns en chans att någon bestämt sig för att sluta använda vår imaginära tjänst. Här är 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(); för (var i = 0; i < data1.längd; i++) { var rad1 = data1[i]; var rad2 = data2[i]; var businessName = rad1[0]; var email = rad1[1]; var invoiceNumber = rad1[2]; var invoiceAmount1 = parseFloat(rad1[3].toString().replace('$', '').replace(',', 39;.')); var invoiceAmount2 = parseFloat(rad2[3].toString().replace('$', '').replace(',',','$',''). 39;.')); if (isNaN(invoiceAmount1) || isNaN(invoiceAmount2)) { console.error("Ogiltiga fakturabelopp för företag: " + businessName + ". invoiceAmount1: " + invoiceAmount1 + ", invoiceAmount2: " + invoiceA2 ); Fortsätta; } var förfallodatum = rad1[4]; var ämne; var emailBodyHtml; if (invoiceAmount1 < invoiceAmount2) { console.log("Skickar 'Tack för att du uppgraderar' e-post till " + email + ". invoiceAmount1: " + invoiceAmount1 + ", invoiceAmount2: " + invoiceAmount2); ämne = "Tack för att du uppgraderar"; emailBodyHtml = "<html><kropp>" + "<p>Kära " + företagsnamn + ",</p>" + "<p>Tack för att du uppgraderar! Vi uppskattar din verksamhet och ser fram emot att hjälpa dig.</p>" + "<p>Bästa hälsningar</p>" + "<p>Ditt företag</p>" + "</body></html>"; MailApp.sendEmail({ to: email, subject: subject, htmlBody: emailBodyHtml }); } else if (invoiceAmount1 == 0) { console.log("Skicka 'Churn customer notification' e-post till " + email + ". invoiceAmount1: " + invoiceAmount1); ämne = "Kundavisering"; emailBodyHtml = "<html><head><style>" + "body {font-family: Arial, sans-serif;}" + "p {font-size: 14px;}" + ".invoice-info {font-weight: bold; färg: #4a4a4a;}" + "</style></huvud><kropp>" + "<p>Kära " + företagsnamn + ",</p>" + "<p>Vi har märkt att ditt fakturabelopp är 0 USD. Vi beklagar att du går och skulle uppskatta all feedback om varför du har valt att sluta använda våra tjänster.</p>" + "<p>Om det finns något vi kan göra för att förbättra våra tjänster eller vinna tillbaka din verksamhet, vänligen meddela oss.</p>" + "<p>Tack för dina tidigare affärer.</p>" + "</body></html>"; MailApp.sendEmail({ to: email, subject: subject, htmlBody:emailBodyHtml }); } else { console.log("Skicka 'Fakturapåminnelse' e-post till " + email + ". invoiceAmount1: " + invoiceAmount1 + ", invoiceAmount2: " + invoiceAmount2); ämne = "Fakturapåminnelse"; emailBodyHtml = "<html><head><style>" + "body {font-family: Arial, sans-serif;}" + "p {font-size: 14px;}" + ".invoice-info {font-weight: bold; färg: #4a4a4a;}" + "</style></huvud><kropp>" "<p>Kära <span class='faktura-info'>" + företagsnamn + "</span>,</p>" + "<p>Detta är en påminnelse om att faktura #<span class='invoice-info'>" + invoiceNumber + "</span> för $<span class='invoice-info'>" + invoiceAmount1 + "</span> förfaller på <span class='invoice-info'>" + förfallodatum + "</span>.</p>" + "<p>Ta reda på den bifogade fakturan.</p>" + "<p>Tack för din omedelbara uppmärksamhet på denna fråga.</p>" + "</body></html>"; // Bifoga motsvarande faktura - Du måste ange korrekt mapp-ID där dina fakturor lagras var invoiceFolderId = 'YOUR_FOLDER_ID_HERE'; var invoiceFolder = DriveApp.getFolderById(invoiceFolderId); var invoiceFiles = invoiceFolder.getFilesByName(fakturaNumber + '.pdf'); // Förutsatt att fakturafiler är i PDF-format var invoiceFile; if (invoiceFiles.hasNext()) { invoiceFile = invoiceFiles.next(); } else { // Om fakturafilen inte hittas kan du hoppa över den här raden eller logga ett fel console.error("Fakturafil hittades inte för fakturanummer: " + invoiceNumber); Fortsätta; } MailApp.sendEmail({ to: email, subject: subject, htmlBody: emailBodyHtml, bilagor: [invoiceFile] }); } } }</p>" + "</body></html>"; // Bifoga motsvarande faktura - Du måste ange korrekt mapp-ID där dina fakturor lagras var invoiceFolderId = 'YOUR_FOLDER_ID_HERE'; var invoiceFolder = DriveApp.getFolderById(invoiceFolderId); var invoiceFiles = invoiceFolder.getFilesByName(fakturaNumber + '.pdf'); // Förutsatt att fakturafiler är i PDF-format var invoiceFile; if (invoiceFiles.hasNext()) { invoiceFile = invoiceFiles.next(); } else { // Om fakturafilen inte hittas kan du hoppa över den här raden eller logga ett fel console.error("Fakturafil hittades inte för fakturanummer: " + invoiceNumber); Fortsätta; } MailApp.sendEmail({ to: email, subject: subject, htmlBody: emailBodyHtml, bilagor: [invoiceFile] }); } } }</p>" + "</body></html>"; // Bifoga motsvarande faktura - Du måste ange korrekt mapp-ID där dina fakturor lagras var invoiceFolderId = 'YOUR_FOLDER_ID_HERE'; var invoiceFolder = DriveApp.getFolderById(invoiceFolderId); var invoiceFiles = invoiceFolder.getFilesByName(fakturaNumber + '.pdf'); // Förutsatt att fakturafiler är i PDF-format var invoiceFile; if (invoiceFiles.hasNext()) { invoiceFile = invoiceFiles.next(); } else { // Om fakturafilen inte hittas kan du hoppa över den här raden eller logga ett fel console.error("Fakturafil hittades inte för fakturanummer: " + invoiceNumber); Fortsätta; } MailApp.sendEmail({ to: email, subject: subject, htmlBody: emailBodyHtml, bilagor: [invoiceFile] }); } } }

Ner till kodbrytningen 

1. Skriptet börjar med att få referenser till både Sheet1 och Sheet2.

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

2. Den hämtar sedan data från båda arken, med start från den andra raden för att utesluta rubriker.

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 itererar över raderna i båda arken (förutsatt att antalet rader är detsamma i båda arken). Den jämför fakturabeloppen från Sheet1 och Sheet2 för varje motsvarande rad.

för (var i = 0; i < data1.längd; i++) { var rad1 = data1[i]; var rad2 = data2[i]; // Hämta fakturabelopp från båda arken var invoiceAmount1 = parseFloat(row1[3].toString().replace('$', '').replace(' ,', '.')); var invoiceAmount2 = parseFloat(rad2[3].toString().replace('$', '').replace(',',','$',''). 39;.'));

Kopiera

4. Skriptet kontrollerar sedan villkoren för att skicka olika typer av e-post baserat på jämförelsen av fakturabelopp från Sheet1 och Sheet2.

if (invoiceAmount1 < invoiceAmount2) { // Skicka "Tack för att du uppgraderar" email } else if (invoiceAmount1 == 0) { // Skicka "Churn customer notification" email } else {// Skicka "Fakturapåminnelse" e-post }

Kopiera

Den viktigaste jämförelsen är , som kontrollerar om fakturabeloppet i Blad1 är mindre än fakturabeloppet i Blad2 för samma rad (dvs. samma kund). Om det är sant antar skriptet att kunden har uppgraderat och skickar ett e-postmeddelande. Annars letar den efter andra villkor (churn eller regelbundna fakturapåminnelser) och skickar lämplig email.if (invoiceAmount1 < invoiceAmount2)"Tack för att du uppgraderar"

När en Google Kalkylark-fil uppdateras

Nu lönar det sig att diskutera lite av ett annat användningsfall, där andra än kontoansvarig har tillgång till kalkylbladet. 

Låt oss anta att vår kontoansvariga har en dag dedikerad till att träffa kunder och svara på deras frågor. Klienterna har tillgång till ett kalkylblad där de kort kan beskriva problemet och boka tid. 

Okej, det finns mycket bättre sätt att hantera kundbokningar och förfrågningar. Men vi kommer att hålla oss till detta tillvägagångssätt för handledningens skull.

Steg 1

Först måste vi skapa en tabell. Som visas nedan är vår ganska enkel och innehåller bara tre rader med Manager, Time slot och Query.

Steg 2

Därefter behöver du Google-skript för att trigga e-postmeddelanden varhelst någon uppdaterar arket med sin fråga och bokar därmed en plats. Här är ett exempel. 

//@OnlyCurrentDoc function processEdit(e) { MailApp.sendEmail({ to: "[email protected]" ;, ämne: "Ny bokning -- klienttidslucka", text: "En kund har en fråga till dig." }); }

Kopiera

För att hjälpa dig förstå vad som händer lönar det sig att diskutera huvudfunktionerna. 

  • //@OnlyCurrentDoc – denna anteckning signalerar att du vill att skriptet endast ska köras i det angivna Google-kalkylarket. Genom att ta bort anteckningen aktiverades skriptet för dina andra filer. 
  • function processEdit () – en utlösare (vi ställer in i nästa steg) kör skriptet med den här funktionen. Funktionen ställer helt enkelt in processen för att få ett e-postmeddelande varje gång någon uppdaterar arket.
  • (e) – den här kommentaren representerar objektet med data om redigeringarna. Den har en intervallegenskap för att signalera att ett intervall, eller en cell, har redigerats. 
  • MailApp – ett objekt som funktionen använder för att vidarebefordra e-postmeddelandet. 

Innan du går vidare kan du testa arket och koden. Om du använder det exemplariska arket fyller du bara i en av cellerna under kolumnen Fråga och kör skriptet. E-postmeddelandet bör komma till din inkorg omedelbart, men kom ihåg att skriptet inte har automatiserats ännu.

Steg 3

Det är dags att ställa in och auktorisera en utlösare för att skicka e-postmeddelanden automatiskt. I Apps Script klickar du på väckarklockans ikon i sidomenyn. Klicka sedan på "...skapa en ny utlösare". 

I popup-fönstret för triggerkonfiguration väljer du följande kriterier.

  • processEdit
  • Huvud
  • Från kalkylblad
  • På redigering

Obs! Det är okej om du behåller inställningarna för felmeddelanden som standard, men du kan ändra det om det behövs. Det kommer inte att påverka utlösarens eller skriptets övergripande funktion. Detta kan gälla alla Google-skript som du kanske vill automatisera. 

Klicka Spara, auktorisera utlösaren på ditt konto så ser du den i  Lista över utlösare . Se också till att trycka på Deploy -knappen för att aktivera utlösaren. 

Nu kan du gå tillbaka till arket, fylla i en annan cell i kolumnen Fråga och kontrollera om du fick det automatiska meddelandet. 

Sidoanmärkning: Du kan anpassa arket efter dina önskemål, men det betyder att du också måste anpassa skriptet.

Tags: #HUR

[100% löst] Hur åtgärdar jag meddelandet Fel vid utskrift i Windows 10?

[100% löst] Hur åtgärdar jag meddelandet Fel vid utskrift i Windows 10?

Får felmeddelande om utskrift på ditt Windows 10-system, följ sedan korrigeringarna i artikeln och få din skrivare på rätt spår...

Hur man fångar och spelar en Microsoft Teams-inspelning

Hur man fångar och spelar en Microsoft Teams-inspelning

Du kan enkelt besöka dina möten igen om du spelar in dem. Så här spelar du in en Microsoft Teams-inspelning för ditt nästa möte.

Hur man återställer standardappar på Android

Hur man återställer standardappar på Android

När du öppnar en fil eller klickar på en länk väljer din Android-enhet en standardapp för att öppna den. Du kan återställa dina standardappar på Android med den här guiden.

FIXAT: Entitlement.diagnostics.office.com certifikatfel

FIXAT: Entitlement.diagnostics.office.com certifikatfel

FIXAT: Entitlement.diagnostics.office.com certifikatfel

Topp 10 spelwebbplatser som inte blockerades av skolan 2022

Topp 10 spelwebbplatser som inte blockerades av skolan 2022

För att ta reda på de bästa spelsajterna som inte blockeras av skolor, läs artikeln och välj den bästa oblockerade spelwebbplatsen för skolor, högskolor och verk

FIXAT: Skrivare i feltillstånd [HP, Canon, Epson, Zebra & Brother]

FIXAT: Skrivare i feltillstånd [HP, Canon, Epson, Zebra & Brother]

Om du står inför problemet med skrivaren i feltillstånd på Windows 10 PC och inte vet hur du ska hantera det, följ dessa lösningar för att fixa det.

Så här säkerhetskopierar du din Chromebook (2022)

Så här säkerhetskopierar du din Chromebook (2022)

Om du undrar hur du säkerhetskopierar din Chromebook, så hjälper vi dig. Läs mer om vad som säkerhetskopieras automatiskt och vad som inte görs här

Så här fixar du att Xbox-appen inte öppnas i Windows 10 [SNABBGUIDE]

Så här fixar du att Xbox-appen inte öppnas i Windows 10 [SNABBGUIDE]

Vill du fixa Xbox-appen öppnas inte i Windows 10, följ sedan korrigeringarna som Aktivera Xbox-appen från tjänster, återställ Xbox-appen, Återställ Xbox-apppaketet och andra.

Vad är LogiOptions.exe (UNICODE) och är processen säker?

Vad är LogiOptions.exe (UNICODE) och är processen säker?

Om du har ett Logitech-tangentbord och -mus kommer du att se den här processen köras. Det är inte skadlig programvara, men det är inte en viktig körbar fil för Windows OS.

Fixat Java Update/Install Error 1603 i Windows 10

Fixat Java Update/Install Error 1603 i Windows 10

Läs artikeln för att lära dig hur du fixar Java Update-fel 1603 i Windows 10, prova korrigeringarna en efter en och fixa fel 1603 enkelt ...