Sähköpostin lähettäminen Google Sheetsistä edellyttää Google Apps Scriptin käyttöä. Mutta älä huoli, jos et ole koskaan aiemmin luonut yhtäkään Google Apps -skriptiä, sähköpostin lähettäminen on erittäin helppoa.
Tälle skriptille on monia käyttötarkoituksia. Saatat saada hälytyksen, jos myyntiraportin päivittäiset tulot putoavat tietyn tason alapuolelle. Tai voit saada sähköpostin, jos työntekijäsi ilmoittavat laskuttaneensa asiakasta liian monta tuntia projektiseurantataulukossasi.
Sovelluksesta riippumatta tämä käsikirjoitus on vakuuttava. Säästät myös aikaa, jonka joudut seuraamaan laskentataulukkopäivityksiäsi manuaalisesti.
Sinun on myös luotava uusi laskentataulukko, joka sisältää sähköpostiosoitteen.
Lisää vain nimisarake ja sähköpostisarake ja täytä ne henkilöllä, jolle haluat saada hälytyssähköpostin.
Nyt kun sinulla on sähköpostiosoite, johon voit lähettää hälytyssähköpostin, on aika luoda skripti.
Tämä hälytysnäyttö johtuu siitä, että kirjoitat mukautettua Google-skriptiä, jota ei ole rekisteröity viralliseksi.
Sinun tarvitsee tehdä tämä vain kerran. Ohjelmasi suoritetaan, ja laskentataulukossasi määrittämäsi sähköpostiosoite saa alla olevan kaltaisen sähköpostin.
Nyt kun olet onnistuneesti kirjoittanut Google Apps Scriptin, joka voi lähettää hälytyssähköpostin, on aika tehdä hälytyssähköpostista toimivampi.
Seuraava vaihe, jonka opit, on lukea data-arvo Google-laskentataulukosta, tarkistaa arvo ja lähettää ponnahdusviesti, jos arvo on ylärajan ylä- tai alapuolella.
Ennen kuin voit tehdä tämän, sinun on luotava toinen taulukko käyttämääsi Google-laskentataulukkoon. Kutsu tämä uusi arkki "MyReport".
Muista, että solu D2 on se, jonka haluat tarkistaa ja vertailla. Kuvittele, että haluat tietää joka kuukausi, onko kokonaismyyntisi laskenut alle 16 000 dollarin.
Luodaan Google Apps Script, joka tekee sen.
Liitä seuraava funktio koodiikkunaan.
Tallenna tämä koodi ja suorita se. Jos se toimii oikein, sinun pitäisi nähdä seuraava varoitusviesti selaimessasi.
Nyt kun sinulla on Google Apps -skripti, joka voi lähettää sähköpostihälytyksen ja toinen komentosarja, joka voi verrata laskentataulukon arvoja, olet valmis yhdistämään nämä kaksi ja lähettämään hälytyksen hälytysviestin käynnistämisen sijaan.
Nyt on aika yhdistää kaksi luomaasi skriptiä yhdeksi skriptiksi.
Tähän mennessä sinulla pitäisi olla laskentataulukko, jossa on välilehti nimeltä Sheet1 ja joka sisältää hälytyksen vastaanottajan. Toinen välilehti nimeltä MyReport sisältää kaikki myyntitietosi.
Takaisin Script Editorissa on aika ottaa kaikki tähän mennessä oppimasi käyttöön käytännössä.
Korvaa kaikki komentosarjaeditorin koodi kahdella funktiollasi, joita on muokattu tässä kuvatulla tavalla.
Huomioi muutokset tästä.
Ainoa asia, joka on jäljellä, on käynnistää CheckSales()-toiminto joka kuukausi.
Joka kuukausi uusi komentosarjasi suoritetaan ja vertaa kuukausittaista kokonaismyyntiä solussa D2 16 000 dollariin.
Jos se on pienempi, se lähettää hälytyssähköpostin, jossa ilmoitetaan alhaisesta kuukausimyynnistä.
Kuten näet, Google Apps Scripts sisältää paljon toimintoja pienessä paketissa. Muutamalla yksinkertaisella koodirivillä voit tehdä upeita asioita.
Jos haluat kokeilla lisää, lisää 16 000 dollarin vertailuraja laskentataulukon toiseen soluun ja lue se sitten käsikirjoituksestasi ennen vertailun tekemistä. Tällä tavalla voit muuttaa rajaa muuttamalla taulukon arvoa.
Säätämällä koodia ja lisäämällä uusia koodilohkoja voit rakentaa näiden yksinkertaisten asioiden pohjalta lopulta uskomattomia Google-skriptejä.
Prosessin automatisointi
Toistaiseksi mennyt hyvin, mutta yllä oleva komentosarja toimii vain manuaalisesti, jos emme aseta laukaisimia. Onneksi Google teki käynnistyneen automaation määrittämisen helpoksi. Tässä ovat vaiheet.
Napsauta Apps Script -editorissa vasemmassa sivupalkissa olevaa Triggerit -kuvaketta (se näyttää pieneltä kellolta).
Napsauta luo uusi triggerir-linkkiä tai Lisää triggeri -painiketta Triggers-sivun oikeassa alakulmassa.
Valitse avattavasta Valitse suoritettava toiminto -valikosta sendEmails<. i=4> funktio.
Valitse avattavasta Valitse tapahtuman lähde -valikosta Aikaohjattu.
Valitse avattavasta Valitse aikaperusteisen triggerin tyyppi -valikosta haluamasi taajuus (esim. Päiväajastin päivittäisille sähköpostiviesteille, viikkoajastin viikoittaisille sähköpostiviesteille jne.)
Valitse tarvittaessa haluamasi aikaväli tai viikonpäivä.
Luo laukaisin napsauttamalla Tallenna .
Napsauta tallennuksen jälkeen Ota käyttöön -painiketta oikeassa yläkulmassa ja seuraa ohjeita käyttöönoton nimeämiseksi ja määrittämiseksi. Sinun on annettava automaatiokäyttöoikeudet, ja sama koskee itse komentosarjaa.
Mitä tulee annettuun triggeriin, koska esimerkkimme koskee laskumuistutusten lähettämistä, oletamme, että ne ovat kuukausittain, ja ne kannattaa lähettää joka kuun 1. päivä klo 13-14 välillä. Mutta tietysti voit muuttaa taajuutta ja ajoitusta tarpeidesi mukaan.
Kuinka lähettää sähköpostin liitteenä
Osoittaaksemme sinulle, kuinka lähetät liitteitä sisältäviä sähköposteja, käytämme uudelleen esimerkillistä laskumuistutusten sisältävää taulukkoa ja muokkaamme katkelman uudelleen liitetiedostoiksi. Aloitamme nyt toiminnolla, ja sähköpostimalli tulee myöhemmin koodiin. lähetä sähköpostimuistutuksia
On syytä korostaa, että alla oleva koodinpätkä hakee sähköpostin liitteet Google Drive -kansiosta, johon on tärkeää sisällyttää kansion tunnus ja noudattaa annettua nimeämiskäytäntöä. Lisätietoja on kohdassa Määritetään koodiosio.
function sendEmailReminders() { // Hanki aktiivinen taulukko var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // Hae tietoalue (pois lukien otsikkorivi) var dataRange = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn()); // Hae arvot tietoalueelta var data = dataRange.getValues(); // Selaa datarivejä (var i = 0; i < data.length; i++) { var row = data[i]; // Hae arvot kustakin sarakkeesta var businessName = row[0]; var email = rivi[1]; var invoiceNumber = rivi[2]; var invoiceAmount = rivi[3]; var dueDate = rivi[4]; var aihe = rivi[5]; // Sähköpostin teksti var emailBody = "Hei " + yrityksen nimi + ",\n\n" + "Tämä on muistutus siitä, että lasku #" + InvoiceNumber + " $" + invoiceAmount + " erääntyy " + eräpäivä + ".\n" + "Etsi liitteenä oleva lasku.\n\n" + "Kiitos nopeasta huomiostasi tähän asiaan."; // Liitä vastaava lasku - Sinun on annettava oikea kansion tunnus, johon laskut on tallennettu. var invoiceFolderId = 'YOUR_FOLDER_ID_HERE'; var invoiceFolder = DriveApp.getFolderById(invoiceFolderId); var invoiceFiles = invoiceFolder.getFilesByName(invoiceNumber + '.pdf'); // Olettaen, että laskutiedostot ovat PDF-muodossa var invoiceFile; if (invoiceFiles.hasNext()) { laskutiedosto = invoiceFiles.next(); } else { // Jos laskutiedostoa ei löydy, voit ohittaa tämän rivin tai kirjata virheilmoituksen console.error("Laskutiedostoa ei löydy laskun numerolle: " + invoiceNumber); jatkaa; } // Lähetä sähköposti liitteenä MailApp.sendEmail({ vastaanottaja: sähköposti, aihe: aihe, runko: emailBody, liitteet: [invoiceFile] }); } }
Puretaan koodi
1. Määritä function:sendEmailReminders
function sendEmailReminders() {
Rivi ilmoittaa funktion nimeltä , joka sisältää koodin sähköpostimuistutusten lähettämiseen liitteineen.sendEmailReminders
2. Hanki aktiivinen taulukko:
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
Rivi hakee aktiivisen taulukon tällä hetkellä avoinna olevasta Google Sheets -asiakirjasta.
3. Hanki tietoalue (pois lukien otsikkorivi):
var dataRange = taulukko.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn());
Tämä rivi hakee taulukon tietoalueen otsikkoriviä lukuun ottamatta. Se alkaa toisesta rivistä (rivi 2) ja ensimmäisestä sarakkeesta (sarake 1) ja ulottuu arkin viimeiseen riviin ja viimeiseen sarakkeeseen.
Sivuhuomautus: Kun luot mukautetun taulukon, sinun on muokattava taulukkoa vastaavaksi. tietoalue
4. Hanki arvot tietoalueelta:
var data = dataRange.getValues();
Tämä rivi hakee arvot (sisällöt) edellisessä vaiheessa määritetystä solualueesta.
5. Selaa tietorivejä:
for (var i = 0; i < data.length; i++) { var row = data[i];
Tämä silmukka toistuu taulukon jokaisen rivin läpi. Muuttuja edustaa kunkin iteration.fordatarowin nykyistä tietoriviä
6. Hanki arvot kustakin sarakkeesta:
var businessName = rivi[0]; var email = rivi[1]; var invoiceNumber = rivi[2]; var invoiceAmount = rivi[3]; var dueDate = rivi[4]; var aihe = rivi[5];
Yllä olevat rivit poimivat arvot jokaisesta nykyisen tietorivin sarakkeesta. Jokainen arvo määritetään myöhemmin muuttujalle, jotta se on helppo viitata komentosarjassa. Annetut arvot ovat mukautettuja esimerkilliseen arkkiimme.
7. Luo sähköpostin runko:
var emailBody = "Hei " + yrityksen nimi + ",\n\n" + "Tämä on muistutus siitä, että lasku #" + InvoiceNumber + " $" + invoiceAmount + " erääntyy " + eräpäivä + ".\n" + "Etsi liitteenä oleva lasku.\n\n" + "Kiitos nopeasta huomiostasi tähän asiaan.";
Koodi rakentaa sähköpostin rungon käyttämällä taulukosta poimittuja arvoja. Sähköpostin runko on merkkijono, joka sisältää yrityksen nimen, laskun numeron, laskun summan ja eräpäivän.
8. Hanki vastaava laskutiedosto:
var invoiceFolderId = 'OMA_KANSIJOI_ID_TÄSTÄ'; var invoiceFolder = DriveApp.getFolderById(invoiceFolderId); var invoiceFiles = invoiceFolder.getFilesByName(invoiceNumber + '.pdf'); var invoiceFile; if (invoiceFiles.hasNext()) { laskutiedosto = invoiceFiles.next(); } else { console.error("Laskutiedostoa ei löydy laskun numerolle: " + invoiceNumber); jatkaa; }
Nämä rivit hakevat nykyiseen riviin liittyvän laskutiedoston.
Ensin päästään laskutiedostokansioon sen kansiotunnuksella. Muista korvata todellisella kansion tunnuksella. YOUR_FOLDER_ID_THERE
Huomaa, että esimerkissämme nimeämiskäytäntö on ja varsinaisen laskun nimi on 123456.pdf. Jos liitetiedostosi on nimetty eri tavalla, sinun on päivitettävä muotoilu. (invoiceNumber + '.pdf')
Seuraavaksi komentosarja etsii tiedostoa, jolla on sama nimi kuin laskun numero (olettaen, että tiedosto on PDF-muodossa).
Jos tiedosto löytyy, se liitetään muuttujaan. muussa tapauksessa komentosarja kirjaa virhesanoman ja siirtyy seuraavaan riviin.invoiceFile
9. Lähetä sähköposti liitteenä:
MailApp.sendEmail({ vastaanottaja: sähköposti, aihe: aihe, runko: emailBody, liitteet: [invoiceFile] });
Tämä rivi lähettää tekstin ja sähköpostin liitteet, ja tässä on tulokset, jotka sinun pitäisi saada. Lisäksi kaikki automaatiovaiheet pätevät aiemmin kuvatulla tavalla, ja on järkevää säilyttää kuukausittainen laukaisu, koska kyse on laskumuistutusten lähettämisestä.

Lähetä HTML-sähköposti GSheetsin avulla
HTML-sähköpostin lähettämiseksi voit tehdä joitain melko yksinkertaisia muutoksia aiemmin kuvattuun komentosarjaan. Tässä se on:
function sendEmailReminders() { // Hanki aktiivinen taulukko var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // Hae tietoalue (pois lukien otsikkorivi) var dataRange = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn()); // Hae arvot tietoalueelta var data = dataRange.getValues(); // Selaa datarivejä (var i = 0; i < data.length; i++) { var row = data[i]; // Hae arvot kustakin sarakkeesta var businessName = row[0]; var email = rivi[1]; var invoiceNumber = rivi[2]; var invoiceAmount = rivi[3]; var dueDate = rivi[4]; var aihe = rivi[5]; // HTML-sähköpostin body var emailBodyHtml = "<p>Hei " + yrityksen nimi + ",</p>" + "<p>Tämä on muistutus siitä, että lasku #" + InvoiceNumber + " $" + invoiceAmount + " erääntyy " + eräpäivä + ".</p>" + "<p>Etsi liitteenä oleva lasku.</p>" + "<p>Kiitos nopeasta huomiostasi tähän asiaan.</p>"; // Liitä vastaava lasku - Sinun on annettava oikea kansion tunnus, johon laskut on tallennettu. var invoiceFolderId = 'YOUR_FOLDER_ID_HERE'; var invoiceFolder = DriveApp.getFolderById(invoiceFolderId); var invoiceFiles = invoiceFolder.getFilesByName(invoiceNumber + '.pdf'); // Olettaen, että laskutiedostot ovat PDF-muodossa var invoiceFile; if (invoiceFiles.hasNext()) { laskutiedosto = invoiceFiles.next(); } else { // Jos laskutiedostoa ei löydy, voit ohittaa tämän rivin tai kirjata virheilmoituksen console.error("Laskutiedostoa ei löydy laskun numerolle: " + invoiceNumber); jatkaa; } // Lähetä sähköposti liitteenä MailApp.sendEmail({ vastaanottaja: sähköposti, aihe: aihe, htmlBody: emailBodyHtml, liitteet: [invoiceFile] }); } }
Tässä versiossa pelkkä teksti korvataan muuttujalla, joka sisältää HTML-muotoista sisältöä. emailBodyemailBodyHtml
Kun funktiota kutsutaan, body-ominaisuus korvataan myös ominaisuudella, joka lähettää sähköpostin HTML-sähköpostina.MailApp.sendEmail()htmlBody
Sivuhuomautuksia:
Käytämme skriptissä mukavuuden vuoksi. Kumpi tahansa vaihtoehto toimisi, mutta varmasti on luettavampi. Voit joka tapauksessa muotoilla skriptin uudelleen ja korvata ketjutusoperaattorin paikkamerkeillä merkkijonointerpoloinnissa. varconstconst${expression}
Mikään skripteistä ei myöskään sisällä toimintoja, koska ne eivät olleet välttämättömiä esimerkeissämme. Mutta tietysti on myös mahdollista lisätä ja jopa automatisoida tällaisilla skripteillä. bccbcc
Lopuksi voit piristää asioita lisäämällä mukautettuja CSS-tyylejä, katso päivitetty toiminto alta. var emailBodyHtml =
// HTML-sähköpostin body CSS-tyyleillä var emailBodyHtml = "<html><head><style>" + "body {font-family: Arial, sans-serif;}" + "p {font-size: 14px;}" + ".laskun tiedot {fontin paino: lihavoitu; väri: #4a4a4a;}" + "</style></head><body>" + "<p>Hyvä <span class='lasku-info'>" + yrityksen nimi + "</span>,</p>" + "<p>Tämä on muistutus siitä, että lasku #<span class='lasku-info'>" + laskunumero + "</span> $<span class='invoice-info'>" + invoiceAmount + "</span> erääntyy <span class='invoice-info'>" + eräpäivä + "</span>.</p>" + "<p>Etsi liitteenä oleva lasku.</p>" + "<p>Kiitos nopeasta huomiostasi tähän asiaan.</p>" + "</body></html>";
Provinkit:
- Toimi helposti, sillä jotkin postilaatikkopalveluntarjoajat eivät ehkä tue ja renderöi voimakkaasti tyyliteltyjä sähköposteja oikein tai ollenkaan. <tyyli>
- Käytä Mailtrap-sähköpostitestausta nähdäksesi, kuinka paljon postilaatikkopalveluntarjoajat tukevat HTML-sähköpostiasi.
- Jos haluat lähettää suurella äänenvoimakkuudella, on aina parasta käyttää oikeaa MTA:ta funktion sijaan. sendEmail
- Ota huomioon Gmail-tilisi rajoitukset. Nämä ovat erilaisia Google Workspacessa ja/tai yksityisessä tilissäsi.
Kuinka lähettää käynnistysviestejä Google Sheetsista?
Kun solu saavuttaa tietyn arvon
Näytämme sinulle, kuinka voit lähettää automaattisen sähköpostin solun arvon perusteella. Esimerkissämme lasku lähetetään, kun Laskun summa -solu saavuttaa "0":n, mikä tarkoittaa vaihtuvaa asiakasta.
Annettu solun arvo käynnistää mukautetun vaihtuvan sähköpostin, joka tavoittaa välittömästi asiakkaan. Ja jälleen, automaatiovaiheet pysyvät samoina, voit silti käyttää kuukausittaista laukaisua näille sähköpostiviesteille.
Muista, että skripti on sama, jota käytimme HTML-sähköpostien ja liitteiden lähettämiseen. Mutta siinä on toinen toiminnallisuuskerros kuvatun ehdollisen logiikan käyttöön ottamiseksi. Tässä on koodi.
function sendEmailReminders() { // Hanki aktiivinen taulukko var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // Hae tietoalue (pois lukien otsikkorivi) var dataRange = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn()); // Hae arvot tietoalueelta var data = dataRange.getValues(); // Selaa datarivejä (var i = 0; i < data.length; i++) { var row = data[i]; // Hae arvot kustakin sarakkeesta var businessName = row[0]; var email = rivi[1]; var invoiceNumber = rivi[2]; var invoiceAmount = rivi[3]; var dueDate = rivi[4]; var aihe = rivi[5]; // Määritä sähköpostin runko laskun summan perusteella var emailBodyHtml; if (invoiceAmount == 0) { // Churn asiakkaan sähköpostin aihe = "Churn customer report"; emailBodyHtml = "<html><head><tyyli>" + "body {font-family: Arial, sans-serif;}" + "p {font-size: 14px;}" + ".laskun tiedot {fontin paino: lihavoitu; väri: #4a4a4a;}" + "</style></head><body>" + "<p>Hei " + yrityksen nimi + ",</p>" + "<p>Olemme huomanneet, että laskusi summa on 0 dollaria. Olemme pahoillamme, että poistut, ja arvostamme palautetta siitä, miksi olet päättänyt lopettaa palveluidemme käytön.</p>" + "<p>Jos voimme tehdä jotain palveluidemme parantamiseksi tai yrityksesi takaisin saamiseksi, ilmoita siitä meille.</p>" + "<p>Kiitos menneestä liiketoiminnasta.</p>" + "</body></html>"; } else { // Tavallinen laskun sähköposti sähköpostiBodyHtml = "<html><head><tyyli>" + "body {font-family: Arial, sans-serif;}" + "p {font-size: 14px;}" + ".laskun tiedot {fontin paino: lihavoitu; väri: #4a4a4a;}" + "</style></head><body>" + "<p>Hyvä <span class='lasku-info'>" + yrityksen nimi + "</span>,</p>" + "<p>Tämä on muistutus siitä, että lasku #<span class='lasku-info'>" + laskun numero + "</span> $<span class='invoice-info'>" + invoiceAmount + "</span> erääntyy <span class='invoice-info'>" + eräpäivä + "</span>.</p>" + "<p>Etsi liitteenä oleva lasku.</p>" + "<p>Kiitos nopeasta huomiostasi tähän asiaan.</p>" + "</body></html>"; } // Liitä vastaava lasku - Sinun on annettava oikea kansion tunnus, johon laskusi on tallennettu var invoiceFolderId = 'YOUR_FOLDER_ID_HERE'; var invoiceFolder = DriveApp.getFolderById(invoiceFolderId); var invoiceFiles = invoiceFolder.getFilesByName(invoiceNumber + '.pdf'); // Olettaen, että laskutiedostot ovat PDF-muodossa var invoiceFile; if (invoiceFiles.hasNext()) { invoiceFile = laskutiedostot.Seuraava(); } else { // Jos laskutiedostoa ei löydy, voit ohittaa tämän rivin tai kirjata virheilmoituksen console.error("Laskutiedostoa ei löydy laskun numerolle: " + invoiceNumber); jatkaa; } // Lähetä sähköposti liitteenä MailApp.sendEmail({ vastaanottaja: sähköposti, aihe: aihe, htmlBody: emailBodyHtml, liitteet: [invoiceFile] }); } }
Alas koodikatkoon
Huomaa, että keskitymme vain toiminnon sisältöön, jotta vältytään toistamasta sitä, mitä jo kuvattiin. emailBodyHtml
Päivitetty koodin osa määrittää sähköpostin tekstiosan sisällön laskun summan perusteella. Jos laskun summa on , sen oletetaan olevan vaihtuva asiakas ja käytetään eri sähköpostimallia. Tässä koodin erittely: "0"
var emailBodyHtml;
Se ilmoittaa muuttujan nimeltä ja tallentaa sähköpostin rungon sisällön. Ja se jätetään aluksi undefined.emailBodyHtml
if (invoiceAmount == 0) { ... }
Lausunto tarkistaa, onko laskun summa 0. Jos on, aaltosulkeissa oleva koodi suoritetaan. Tämä lohko sisältää churn client email template.if(`{}`)
aihe = "Curn customer report";
Rivi asettaa sähköpostin aiheen vaihtuville asiakkaille."Curn-asiakasilmoitus"
emailBodyHtml = "<html><head><tyyli>" +...
Rivi asettaa muuttujan arvon churn-asiakkaan sähköpostimalliin. Malli on HTML-merkkijono, jonka CSS-tyylit on määritetty osiossa. Sähköpostin runko sisältää paikkamerkit yrityksen nimelle ja viestin customer.emailBodyHtml<head>
} muuta { ... }
Esto suoritetaan, kun laskun summa ei ole 0. Se asettaa muuttujan tavalliseen laskusähköpostimalliin. Sähköpostimalli on HTML-merkkijono, jonka CSS-tyylit on määritetty osiossa. Sähköpostin runko sisältää paikkamerkit yrityksen nimelle, laskun numerolle, laskun summalle ja eräpäivälle.elseemailBodyHtml<head>
Tätä ehdollista logiikkaa käyttämällä skripti lähettää eri sähköpostin tekstiosan sen mukaan, onko laskun summa (asiakasvaihtuvuus) vai nollasta poikkeava (tavallinen lasku). 0
Kun solun arvo muuttuu
Nyt otamme saman yllä käytetyn skriptin ja laajennamme sen kattamaan toisen käyttötapauksen – asiakkaan päivitykset, ja tilivastaavan on lähetettävä "Kiitos"-sähköposti laskulla.
Tarkoituksena on selittää, että tilivastaavalla on joka kuukausi uusi Sheet (esimerkissämme taulukko 2), jossa on asiakkaiden tunnistetiedot.

Koodi vertaa nyt kahta taulukkoa ja lähettää automaattisen "kiitos"-sähköpostin tavallisen laskusähköpostin sijaan asiakkaille, jotka ovat päivittäneet (heidän Laskun summan on suurempi kuin edellinen).
Myöskään churn-sähköpostiin ei tarvitse koskea, sillä on mahdollista, että joku on päättänyt lopettaa kuvitteellisen palvelumme käytön. Tässä on käsikirjoitus.
function sendEmailReminders() { var sheet1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1"); var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2"); var tietoalue1 = taulukko1.getAlue(2, 1, sheet1.getLastRow() - 1, sheet1.getLastColumn()); var tietoalue2 = taulukko2.getAlue(2, 1, sheet2.getLastRow() - 1, sheet2.getLastColumn()); var data1 = tietoalue1.getArvot(); var data2 = dataRange2.getValues(); for (var i = 0; i < data1.length; i++) { var rivi1 = data1[i]; var rivi2 = data2[i]; var businessName = rivi1[0]; var email = rivi1[1]; var invoiceNumber = rivi1[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("Virheelliset laskun summat yritykselle: " + businessName + ". invoiceAmount1: " + invoiceAmount1 + ", invoiceAmount2: " ); jatkaa; } var dueDate = rivi1[4]; var aihe; var emailBodyHtml; if (invoiceAmount1 < invoiceAmount2) { console.log("Lähetetään 'Kiitos päivityksestä' sähköposti osoitteeseen " + sähköposti + ". invoiceAmount1: " + invoiceAmount1 + ", invoiceAmount2: " + invoiceAmount2); aihe = "Kiitos päivityksestä"; emailBodyHtml = "<html><body>" + "<p>Hei " + yrityksen nimi + ",</p>" + "<p>Kiitos päivityksestä! Arvostamme yritystäsi ja palvelemme sinua mielellämme.</p>" + "<p>Ystävällisin terveisin,</p>" + "<p>Yrityksesi</p>" + "</body></html>"; MailApp.sendEmail({ vastaanottaja: sähköposti, aihe: aihe, htmlBody: emailBodyHtml }); } else if (invoiceAmount1 == 0) { console.log("Lähetetään 'Curn-asiakasilmoitus' sähköposti osoitteeseen " + sähköposti + ". invoiceAmount1: " + invoiceAmount1); aihe = "Curn customer report"; emailBodyHtml = "<html><head><tyyli>" + "body {font-family: Arial, sans-serif;}" + "p {font-size: 14px;}" + ".laskun tiedot {fontin paino: lihavoitu; väri: #4a4a4a;}" + "</style></head><body>" + "<p>Hei " + yrityksen nimi + ",</p>" + "<p>Olemme huomanneet, että laskusi summa on 0 dollaria. Olemme pahoillamme, että poistut, ja arvostamme palautetta siitä, miksi olet päättänyt lopettaa palveluidemme käytön.</p>" + "<p>Jos voimme tehdä jotain palveluidemme parantamiseksi tai yrityksesi takaisin saamiseksi, ilmoita siitä meille.</p>" + "<p>Kiitos menneestä liiketoiminnasta.</p>" + "</body></html>"; MailApp.sendEmail({ vastaanottaja: sähköposti, aihe: aihe, htmlBody:emailBodyHtml }); } else { console.log("Lähetetään 'Laskumuistutus' sähköposti osoitteeseen " + sähköposti + ". invoiceAmount1: " + invoiceAmount1 + ", invoiceAmount2: " + invoiceAmount2); aihe = "Laskumuistutus"; emailBodyHtml = "<html><head><tyyli>" + "body {font-family: Arial, sans-serif;}" + "p {font-size: 14px;}" + ".laskun tiedot {fontin paino: lihavoitu; väri: #4a4a4a;}" + "</style></head><body>" "<p>Hei <span class='invoice-info'>" + yrityksen nimi + "</span>,</p>" + "<p>Tämä on muistutus siitä, että lasku #<span class='lasku-info'>" + laskun numero + "</span> $<span class='invoice-info'>" + invoiceAmount1 + "</span> erääntyy <span class='invoice-info'>" + eräpäivä + "</span>.</p>" + "<p>Etsi liitteenä oleva lasku.</p>" + "<p>Kiitos nopeasta huomiostasi tähän asiaan.</p>" + "</body></html>"; // Liitä vastaava lasku - Sinun on annettava oikea kansion tunnus, johon laskut on tallennettu. var invoiceFolderId = 'YOUR_FOLDER_ID_HERE'; var invoiceFolder = DriveApp.getFolderById(invoiceFolderId); var invoiceFiles = invoiceFolder.getFilesByName(invoiceNumber + '.pdf'); // Olettaen, että laskutiedostot ovat PDF-muodossa var invoiceFile; if (invoiceFiles.hasNext()) { laskutiedosto = invoiceFiles.next(); } else { // Jos laskutiedostoa ei löydy, voit ohittaa tämän rivin tai kirjata virheilmoituksen console.error("Laskutiedostoa ei löydy laskun numerolle: " + invoiceNumber); jatkaa; } MailApp.sendEmail({ vastaanottaja: sähköposti, aihe: aihe, htmlBody: emailBodyHtml, liitteet: [invoiceFile] }); } } }</p>" + "</body></html>"; // Liitä vastaava lasku - Sinun on annettava oikea kansion tunnus, johon laskut on tallennettu. var invoiceFolderId = 'YOUR_FOLDER_ID_HERE'; var invoiceFolder = DriveApp.getFolderById(invoiceFolderId); var invoiceFiles = invoiceFolder.getFilesByName(invoiceNumber + '.pdf'); // Olettaen, että laskutiedostot ovat PDF-muodossa var invoiceFile; if (invoiceFiles.hasNext()) { laskutiedosto = invoiceFiles.next(); } else { // Jos laskutiedostoa ei löydy, voit ohittaa tämän rivin tai kirjata virheilmoituksen console.error("Laskutiedostoa ei löydy laskun numerolle: " + invoiceNumber); jatkaa; } MailApp.sendEmail({ vastaanottaja: sähköposti, aihe: aihe, htmlBody: emailBodyHtml, liitteet: [invoiceFile] }); } } }</p>" + "</body></html>"; // Liitä vastaava lasku - Sinun on annettava oikea kansion tunnus, johon laskut on tallennettu. var invoiceFolderId = 'YOUR_FOLDER_ID_HERE'; var invoiceFolder = DriveApp.getFolderById(invoiceFolderId); var invoiceFiles = invoiceFolder.getFilesByName(invoiceNumber + '.pdf'); // Olettaen, että laskutiedostot ovat PDF-muodossa var invoiceFile; if (invoiceFiles.hasNext()) { laskutiedosto = invoiceFiles.next(); } else { // Jos laskutiedostoa ei löydy, voit ohittaa tämän rivin tai kirjata virheilmoituksen console.error("Laskutiedostoa ei löydy laskun numerolle: " + invoiceNumber); jatkaa; } MailApp.sendEmail({ vastaanottaja: sähköposti, aihe: aihe, htmlBody: emailBodyHtml, liitteet: [invoiceFile] }); } } }
Alas koodikatkoon
1. Skripti alkaa hakemalla viittauksia sekä Sheet1:een että Sheet2:een.
var sheet1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1"); var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2");
2. Sitten se hakee tiedot molemmista taulukoista alkaen toisesta rivistä ja jättää pois otsikot.
var tietoalue1 = taulukko1.getAlue(2, 1, sheet1.getLastRow() - 1, sheet1.getLastColumn()); var tietoalue2 = taulukko2.getAlue(2, 1, sheet2.getLastRow() - 1, sheet2.getLastColumn()); var data1 = tietoalue1.getArvot(); var data2 = dataRange2.getValues();
3. Skripti toistuu rivien yli molemmissa taulukoissa (olettaen, että rivien määrä on sama molemmissa taulukoissa). Se vertaa kunkin vastaavan rivin laskun summia Taulukko1:stä ja Taulukko2:sta.
for (var i = 0; i < data1.length; i++) { var rivi1 = data1[i]; var rivi2 = data2[i]; // Hae laskun summat molemmista taulukoista var invoiceAmount1 = parseFloat(row1[3].toString().replace('$', '').replace(' ,', '.')); var invoiceAmount2 = parseFloat(row2[3].toString().replace('$', '').replace(',', ' 39;.'));
Kopio
4. Skripti tarkistaa sitten erityyppisten sähköpostien lähettämisen ehdot Taulukko1- ja Taulukko2-laskujen summien vertailun perusteella.
if (invoiceAmount1 < invoiceAmount2) { // Lähetä "Kiitos päivityksestä" sähköposti } else if (invoiceAmount1 == 0) { // Lähetä "Curn customer report" sähköposti } else { // Lähetä "Laskumuistutus" sähköposti }
Kopio
Keskeinen vertailu on , joka tarkistaa, onko laskun summa taulukossa 1 pienempi kuin saman rivin (eli saman asiakkaan) laskun summa Taulukko2:ssa. Jos tosi, komentosarja olettaa, että asiakas on päivittänyt ja lähettää sähköpostin. Muussa tapauksessa se tarkistaa muut ehdot (vaihtuvuus tai tavalliset laskumuistutukset) ja lähettää asianmukaisen email.if (invoiceAmount1 < invoiceAmount2)"Kiitos päivityksestä"
Kun Google Sheets -tiedosto päivitetään
Nyt kannattaa keskustella hieman erilaisesta käyttötapauksesta, jossa muut ihmiset kuin tilivastaava pääsevät käsiksi laskentataulukkoon.
Oletetaan, että tilivastaavallamme on päivä, joka on omistettu asiakkaiden tapaamiseen ja heidän kysymyksiinsä vastaamiseen. Asiakkailla on käytettävissään laskentataulukko, jossa he voivat kuvailla ongelmaa lyhyesti ja varata paikan.
Okei, on paljon parempia tapoja käsitellä asiakkaiden varauksia ja tiedusteluja. Mutta pysymme tässä lähestymistavassa opetusohjelman vuoksi.
Vaihe 1
Ensin meidän on luotava taulukko. Kuten alla näkyy, meidän on melko yksinkertainen, ja se sisältää vain kolme riviä Managerilla, aikavälillä ja kyselyllä.

Vaihe 2
Seuraavaksi tarvitset Google-skriptejä, jotka käynnistävät sähköpostit aina, kun joku päivittää taulukkoa kyselyllään ja varaa siten paikan. Tässä on esimerkki.
//@OnlyCurrentDoc-funktion prosessiEdit(e) { MailApp.sendEmail({ to: "[email protected]" ;, aihe: "Uusi varaus -- asiakkaan aika", body: "Asiakkaalla on sinulle kysymys." }); }
Kopio
Jotta ymmärtäisit, mitä tapahtuu, kannattaa keskustella tärkeimmistä toiminnoista.
- //@OnlyCurrentDoc – tämä merkintä osoittaa, että haluat skriptin toimivan vain määritetyssä Google Sheetissa. Huomautuksen poistaminen otti komentosarjan käyttöön muissa tiedostoissasi.
- funktion prosessiMuokkaa () – triggeri (määritämme seuraavassa vaiheessa) suorittaa komentosarjan tällä funktiolla. Yksinkertaisesti toiminto määrittää prosessin, jotta saat sähköpostin aina, kun joku päivittää taulukkoa.
- (e) – tämä merkintä edustaa objektia muokkaustietojen kanssa. Siinä on alueominaisuus, joka ilmoittaa, että aluetta tai solua on muokattu.
- MailApp – objekti, jota toiminto käyttää sähköpostin välittämiseen.
Ennen kuin jatkat, voit testata arkkia ja koodia. Jos käytät esimerkillistä taulukkoa, täytä vain yksi Kysely-sarakkeen soluista ja suorita komentosarja. Sähköpostin pitäisi saapua postilaatikkoosi välittömästi, mutta muista, että komentosarjaa ei ole vielä automatisoitu.
Vaihe 3
On aika asettaa ja valtuuttaa laukaisin lähettämään sähköpostit automaattisesti. Napsauta Apps Scriptin sivuvalikon herätyskellokuvaketta. Napsauta sitten ”…luo uusi triggeri”.

Valitse liipaisimen määritysponnahdusikkunasta seuraavat ehdot.
- käsittely Muokkaa
- Pää
- Laskentataulukosta
- Muokkauksessa

Huomaa: Ei voi, jos pidät virheilmoitusasetukset oletuksena, mutta voit muuttaa että tarvittaessa. Se ei vaikuta liipaisimen tai komentosarjan yleiseen toimintaan. Tämä voi koskea kaikkia Google-skriptejä, jotka haluat ehkä automatisoida.
Napsauta Tallenna, valtuuta triggeri tililläsi, niin näet sen Triggerit luettelo. Muista myös painaa Ota käyttöön -painiketta aktivoidaksesi liipaisimen.

Nyt voit palata taulukkoon, täyttää toisen solun Kysely-sarakkeessa ja tarkistaa, oletko saanut automaattisen ilmoituksen.

Sivuhuomautus: Voit muokata taulukkoa mieltymystesi mukaan, mutta tämä tarkoittaa, että myös komentosarjaa on mukautettava.