ใช้ Google ชีตเพื่อส่งอีเมลตามมูลค่าของเซลล์

ใช้ Google ชีตเพื่อส่งอีเมลตามมูลค่าของเซลล์

การส่งอีเมลจาก Google ชีตต้องใช้ Google Apps Script แต่อย่ากังวล หากคุณไม่เคยสร้างสคริปต์ Google Apps มาก่อน การส่งอีเมลทำได้ง่ายมาก

ในบทแนะนำต่อไปนี้ คุณจะได้เรียนรู้วิธีตรวจสอบค่าของเซลล์ในGoogle ชีต หากค่าเกินขีดจำกัดที่กำหนด คุณสามารถส่งอีเมลแจ้งเตือนไปยังที่อยู่อีเมลใดก็ได้ที่คุณต้องการโดยอัตโนมัติ

มีประโยชน์หลายอย่างสำหรับสคริปต์นี้ คุณอาจได้รับการแจ้งเตือนหากรายได้รายวันในรายงานการขายของคุณลดลงต่ำกว่าระดับที่กำหนด หรือคุณอาจได้รับอีเมลหากพนักงานของคุณรายงานว่าได้เรียกเก็บเงินจากลูกค้าในสเปรดชีตการติดตามโครงการของคุณนานเกินไป

ไม่ว่าแอปพลิเคชันใด สคริปต์นี้น่าสนใจ นอกจากนี้ยังช่วยให้คุณประหยัดเวลาในการตรวจสอบการอัปเดตสเปรดชีตด้วยตนเอง

ขั้นตอนที่ 1: การส่งอีเมลด้วย Google ชีต

ก่อนที่คุณจะสามารถสร้าง Google Apps Script เพื่อส่งอีเมลจาก Google ชีตคุณจะต้องมีที่อยู่อีเมล Gmail ซึ่ง Google Apps Script จะเข้าถึงเพื่อส่งอีเมลแจ้งเตือนของคุณ

คุณจะต้องสร้างสเปรดชีตใหม่ที่มีที่อยู่อีเมลด้วย

เพียงเพิ่มคอลัมน์ชื่อและคอลัมน์อีเมล แล้วกรอกข้อมูลกับคนที่คุณต้องการรับอีเมลแจ้งเตือน

ใช้ Google ชีตเพื่อส่งอีเมลตามมูลค่าของเซลล์

เมื่อคุณมีที่อยู่อีเมลสำหรับส่งอีเมลแจ้งเตือนแล้ว ก็ถึงเวลาสร้างสคริปต์ของคุณ

ในการเข้าสู่ตัวแก้ไขสคริปต์ ให้คลิกที่เครื่องมือแล้วคลิกตัวแก้ไขสคริปต์

คุณจะเห็นหน้าต่างสคริปต์พร้อมฟังก์ชันเริ่มต้นที่เรียกว่า  myFunction( ) เปลี่ยนชื่อเป็นSendEmail( )

ถัดไป วางโค้ดต่อไปนี้ในฟังก์ชัน SendEmail():

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

นี่คือวิธีการทำงานของรหัสนี้:

  • getRangeและgetValues ​​ดึงค่าจากเซลล์ที่ระบุในเมธอด getRange
  • var messageและvar subjectกำหนดข้อความที่จะสร้างอีเมลแจ้งเตือนของคุณ
  • ในที่สุด ฟังก์ชันMailApp.sendEmailจะดำเนินการ Google Scripts ส่งอีเมลโดยใช้บัญชี Google ที่เชื่อมต่อของคุณ

บันทึกสคริปต์โดยคลิกที่ ไอคอน ดิสก์จากนั้นเรียกใช้โดยคลิก ไอคอน เรียกใช้ (ลูกศรขวา)

โปรดทราบว่า Google Script ต้องได้รับอนุญาตในการเข้าถึงบัญชี Gmail ของคุณเพื่อส่งอีเมล ดังนั้นในครั้งแรกที่คุณเรียกใช้สคริปต์ คุณอาจเห็นการแจ้งเตือนดังด้านล่าง

ใช้ Google ชีตเพื่อส่งอีเมลตามมูลค่าของเซลล์

คลิกที่ตรวจสอบสิทธิ์แล้วคุณจะเห็นหน้าจอแจ้งเตือนอื่นที่คุณต้องข้าม

หน้าจอแจ้งเตือนนี้เป็นเพราะคุณกำลังเขียน Google Script ที่กำหนดเองซึ่งไม่ได้ลงทะเบียนเป็นทางการ

ใช้ Google ชีตเพื่อส่งอีเมลตามมูลค่าของเซลล์

เพียงคลิกที่ขั้นสูงจากนั้นคลิกลิงก์ไปที่ SendEmail (ไม่ปลอดภัย)

คุณจะต้องทำเช่นนี้เพียงครั้งเดียว สคริปต์ของคุณจะทำงาน และที่อยู่อีเมลที่คุณระบุในสเปรดชีตของคุณจะได้รับอีเมลดังตัวอย่างด้านล่าง

ใช้ Google ชีตเพื่อส่งอีเมลตามมูลค่าของเซลล์

ขั้นตอนที่ 2: การอ่านค่าจากเซลล์ใน Google ชีต

เมื่อคุณเขียนสคริปต์ของ Google Apps ที่สามารถส่งอีเมลแจ้งเตือนได้สำเร็จ ก็ถึงเวลาทำให้อีเมลแจ้งเตือนนั้นทำงานได้ดีขึ้น

ขั้นตอนต่อไป คุณจะได้เรียนรู้วิธีอ่านค่าข้อมูลจากสเปรดชีตของ Google ตรวจสอบค่า และแสดงข้อความป๊อปอัปหากค่านั้นสูงหรือต่ำกว่าขีดจำกัดบน

ก่อนที่คุณจะดำเนินการนี้ได้ คุณจะต้องสร้างชีตอื่นใน Google สเปรดชีตที่คุณใช้งานอยู่ เรียกแผ่นงานใหม่นี้ว่า "รายงานของฉัน"

ใช้ Google ชีตเพื่อส่งอีเมลตามมูลค่าของเซลล์

โปรดทราบว่าเซลล์ D2 เป็นเซลล์ที่คุณต้องการตรวจสอบและเปรียบเทียบ ลองนึกภาพว่าคุณต้องการทราบทุกเดือนว่ายอดขายรวมของคุณลดลงต่ำกว่า 16,000 ดอลลาร์หรือไม่

มาสร้าง Google Apps Script ที่ทำแบบนั้นกันเถอะ

กลับไปที่หน้าต่าง Script Editor โดยคลิกที่Toolsแล้วคลิกScript Editor

หากคุณใช้สเปรดชีตเดียวกัน คุณจะยังมี  ฟังก์ชัน SendEmail()อยู่ในนั้น ตัดโค้ดนั้นแล้ววางลงใน Notepad คุณจะต้องใช้ในภายหลัง

วางฟังก์ชันต่อไปนี้ลงในหน้าต่างโค้ด

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

รหัสนี้ทำงานอย่างไร:

  • โหลดค่าจากเซลล์D2ลงในตัวแปรmonthSales
  • คำสั่ง IF จะเปรียบเทียบยอดขายรายเดือนในเซลล์ D2 ถึง $16,000
  • หากค่ามากกว่า 16,000 โค้ดจะเรียกกล่องข้อความของเบราว์เซอร์พร้อมการแจ้งเตือน

บันทึกรหัสนี้และเรียกใช้ หากทำงานอย่างถูกต้อง คุณควรเห็นข้อความแจ้งเตือนต่อไปนี้ในเบราว์เซอร์ของคุณ

ใช้ Google ชีตเพื่อส่งอีเมลตามมูลค่าของเซลล์

ตอนนี้ คุณมี Google Apps Script ที่สามารถส่งการแจ้งเตือนทางอีเมลและสคริปต์อื่นที่สามารถเปรียบเทียบค่าจากสเปรดชีต คุณก็พร้อมที่จะรวมทั้งสองค่าและส่งการแจ้งเตือนแทนที่จะเรียกใช้ข้อความแจ้งเตือน

ขั้นตอนที่ 3: นำทุกอย่างมารวมกัน

ตอนนี้ก็ถึงเวลาที่จะรวมสองสคริปต์ที่คุณสร้างไว้เป็นสคริปต์เดียว

ณ จุดนี้ คุณควรมีสเปรดชีตที่มีแท็บชื่อ Sheet1 ซึ่งมีผู้รับอีเมลแจ้งเตือน แท็บอื่นที่เรียกว่า MyReport มีข้อมูลการขายทั้งหมดของคุณ

ย้อนกลับไปใน Script Editor ถึงเวลาที่จะนำทุกสิ่งที่คุณได้เรียนรู้มาฝึกฝน

แทนที่โค้ดทั้งหมดในโปรแกรมแก้ไขสคริปต์ด้วยสองฟังก์ชันของคุณ ซึ่งแก้ไขดังที่แสดงไว้ที่นี่

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

สังเกตการแก้ไขที่นี่

ภายในคำสั่ง IF ให้วางสคริปต์SendEmail ภายใน ฟังก์ชัน CheckSales()ภายในวงเล็บปีกกาคำสั่ง if

ประการที่สอง เชื่อม ตัวแปร monthSalesต่อท้ายข้อความอีเมลโดยใช้อักขระ+

สิ่งเดียวที่ต้องทำคือเรียกใช้ฟังก์ชัน CheckSales() ทุกเดือน

เมื่อต้องการทำสิ่งนี้ ในตัวแก้ไขสคริปต์:

  1. คลิกที่ รายการเมนู แก้ไขจากนั้นคลิกที่ทริกเกอร์ของโปรเจ็ กต์ ปัจจุบัน
  2. ที่ด้านล่างของหน้าจอ ให้คลิกสร้างทริกเกอร์ใหม่
  3. เลือก ฟังก์ชัน CheckSalesเพื่อเรียกใช้
  4. เปลี่ยนเลือกแหล่งที่มาของเหตุการณ์เป็นแบบขับเคลื่อนด้วยเวลา
  5. เปลี่ยน  เลือกประเภทของทริกเกอร์ตามเวลาเป็นตัวจับเวลาเดือน

คลิกบันทึกเพื่อสิ้นสุดทริกเกอร์

ใช้ Google ชีตเพื่อส่งอีเมลตามมูลค่าของเซลล์

ทุกเดือน สคริปต์ใหม่ของคุณจะทำงานและเปรียบเทียบยอดขายรายเดือนทั้งหมดในเซลล์ D2 ถึง $16,000

หากน้อยกว่านั้น ระบบจะส่งอีเมลแจ้งเตือนเพื่อแจ้งยอดขายรายเดือนที่ต่ำ

ใช้ Google ชีตเพื่อส่งอีเมลตามมูลค่าของเซลล์

อย่างที่คุณเห็น Google Apps Scripts บรรจุฟังก์ชันมากมายไว้ในแพ็คเกจขนาดเล็ก ด้วยโค้ดเพียงไม่กี่บรรทัด คุณสามารถทำบางสิ่งที่น่าอัศจรรย์ได้

หากคุณต้องการทดลองเพิ่มเติม ให้ลองเพิ่มขีดจำกัดการเปรียบเทียบ $16,000 ลงในเซลล์อื่นในสเปรดชีต จากนั้นอ่านในสคริปต์ของคุณก่อนทำการเปรียบเทียบ ด้วยวิธีนี้ คุณสามารถเปลี่ยนขีดจำกัดได้โดยการเปลี่ยนค่าในชีต

ด้วยการปรับแต่งโค้ดและเพิ่มบล็อคโค้ดใหม่ คุณสามารถสร้างสิ่งง่ายๆ เหล่านี้ที่คุณเรียนรู้เพื่อสร้าง Google Scripts ที่น่าทึ่งได้ในที่สุด

ทำให้กระบวนการเป็นอัตโนมัติ

จนถึงตอนนี้ยังดีอยู่ แต่สคริปต์ด้านบนจะทำงานด้วยตนเองหากเราไม่ได้ตั้งค่าทริกเกอร์ใดๆ โชคดีที่ Google ทำให้การกำหนดค่าอัตโนมัติที่ทริกเกอร์ทำได้ง่าย นี่คือขั้นตอน 

ในตัวแก้ไข Apps Script คลิกไอคอน ทริกเกอร์ บนแถบด้านข้างซ้าย (ดูเหมือนนาฬิกาเรือนเล็ก)

คลิกลิงก์ สร้างทริกเกอร์ใหม่r หรือลิงก์ เพิ่มทริกเกอร์ ที่มุมขวาล่างของหน้าทริกเกอร์

ในเมนูแบบเลื่อนลง เลือกฟังก์ชันที่จะเรียกใช้ ให้เลือก sendEmails< i=4> ฟังก์ชัน

ในเมนูแบบเลื่อนลง เลือกแหล่งที่มาของเหตุการณ์ ให้เลือก ขับเคลื่อนด้วยเวลา.

ในเมนูแบบเลื่อนลง เลือกประเภทของทริกเกอร์ตามเวลา ให้เลือกความถี่ที่คุณต้องการ (เช่น ตัวจับเวลารายวัน สำหรับอีเมลรายวัน ตัวจับเวลาสัปดาห์ สำหรับอีเมลรายสัปดาห์ ฯลฯ)

หากเป็นไปได้ ให้เลือกช่วงเวลาหรือวันในสัปดาห์ที่ต้องการ

คลิก บันทึก เพื่อสร้างทริกเกอร์

หลังจากบันทึกแล้ว ให้คลิกปุ่ม ปรับใช้ ที่มุมขวาบน และทำตามคำแนะนำเพื่อติดป้ายกำกับและกำหนดการปรับใช้ คุณจะต้องให้สิทธิ์การทำงานอัตโนมัติในการทำงาน และเช่นเดียวกับสคริปต์นั้นเอง  

สำหรับทริกเกอร์ที่ระบุ เนื่องจากตัวอย่างของเราเกี่ยวกับการส่งการแจ้งเตือนใบแจ้งหนี้ เราถือว่าการแจ้งเตือนเหล่านี้เป็นรายเดือน และควรส่งทุกวันที่ 1 ของเดือน ระหว่างเวลา 13.00 น. ถึง 14.00 น. แต่แน่นอน คุณสามารถเปลี่ยนความถี่และเวลาได้ตามความต้องการของคุณ 

วิธีส่งอีเมลพร้อมไฟล์แนบ

เพื่อแสดงวิธีส่งอีเมลพร้อมไฟล์แนบ เราจะใช้แผ่นงานตัวอย่างที่มีการแจ้งเตือนใบแจ้งหนี้อีกครั้ง และปรับโครงสร้างข้อมูลโค้ดใหม่ให้รวมไฟล์แนบด้วย ตอนนี้ เรากำลังเริ่มต้นด้วยฟังก์ชัน และเทมเพลตอีเมลจะอยู่ในรูปแบบโค้ดในภายหลัง ส่งอีเมลเตือนความจำ

เราควรเน้นว่าตัวอย่างด้านล่างดึงไฟล์แนบอีเมลจากโฟลเดอร์ Google ไดรฟ์ ซึ่งจำเป็นอย่างยิ่งที่จะต้องรวมรหัสโฟลเดอร์และเป็นไปตามรูปแบบการตั้งชื่อที่กำหนด ข้อมูลเพิ่มเติมภายใต้ มาดูรายละเอียดส่วนโค้ดกัน 

ฟังก์ชั่น sendEmailReminders() { // รับแผ่นงานที่ใช้งานอยู่ var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // รับช่วงข้อมูล (ไม่รวมแถวส่วนหัว) var dataRange = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn()); // รับค่าจากช่วงข้อมูล var data = dataRange.getValues(); // วนซ้ำแถวข้อมูลสำหรับ (var i = 0; i < data.length; i++) { var row = data[i]; // รับค่าจากแต่ละคอลัมน์ var businessName = row[0]; อีเมล var = แถว [1]; varใบแจ้งหนี้หมายเลข=แถว[2]; varใบแจ้งหนี้จำนวน=แถว[3]; var DueDate = แถว [4]; var subject = แถว [5]; // เนื้อความอีเมล var emailBody = "เรียน" + ชื่อธุรกิจ + ",\n\n" + "นี่เป็นการเตือนว่าใบแจ้งหนี้ #" + หมายเลขใบแจ้งหนี้ + " สำหรับ $" + จำนวนเงินตามใบแจ้งหนี้ + " ครบกำหนดในวันที่ " + วันที่ครบกำหนด + ".\n" + "โปรดค้นหาใบแจ้งหนี้ที่แนบมา\n\n" + "ขอขอบคุณสำหรับความสนใจในเรื่องนี้โดยทันที"; // แนบใบแจ้งหนี้ที่เกี่ยวข้อง - คุณต้องระบุ ID โฟลเดอร์ที่ถูกต้องสำหรับจัดเก็บใบแจ้งหนี้ของคุณ varใบแจ้งหนี้FolderId = 'YOUR_FOLDER_ID_HERE'; varใบแจ้งหนี้Folder = DriveApp.getFolderById(invoiceFolderId); varใบแจ้งหนี้ไฟล์ =ใบแจ้งหนี้Folder.getFilesByName(invoiceNumber + '.pdf'); // สมมติว่าไฟล์ใบแจ้งหนี้อยู่ในรูปแบบ PDF varใบแจ้งหนี้ไฟล์; ถ้า (invoiceFiles.hasNext()) {ใบแจ้งหนี้File =ใบแจ้งหนี้Files.next(); } else { // หากไม่พบไฟล์ใบแจ้งหนี้ คุณสามารถข้ามแถวนี้หรือบันทึกข้อผิดพลาด console.error("ไม่พบไฟล์ใบแจ้งหนี้สำหรับหมายเลขใบแจ้งหนี้: " + InvoiceNumber); ดำเนินการต่อ; } // ส่งอีเมลพร้อมไฟล์แนบ MailApp.sendEmail({ to: email, subject: subject, body: emailBody, attachments: [invoiceFile] }); } }

มาแจกแจงโค้ดกัน

1. กำหนดฟังก์ชัน:sendEmailReminders

ฟังก์ชั่น sendEmailReminders() {

บรรทัดนี้ประกาศฟังก์ชันชื่อ ซึ่งจะมีโค้ดสำหรับส่งการแจ้งเตือนทางอีเมลพร้อมไฟล์แนบ sendEmailReminders

2. รับแผ่นงานที่ใช้งานอยู่:

แผ่น var = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

บรรทัดจะดึงแผ่นงานที่ใช้งานอยู่จากเอกสาร Google ชีตที่เปิดอยู่ในปัจจุบัน

3. รับช่วงข้อมูล (ไม่รวมแถวส่วนหัว):

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

บรรทัดนี้รับช่วงข้อมูลในชีต ไม่รวมแถวส่วนหัว เริ่มจากแถวที่สอง (แถว 2) และคอลัมน์แรก (คอลัมน์ 1) และขยายไปยังแถวสุดท้ายและคอลัมน์สุดท้ายของแผ่นงาน

หมายเหตุด้านข้าง: เมื่อคุณสร้างแผ่นงานที่กำหนดเอง คุณจะต้องแก้ไข เพื่อให้ตรงกับแผ่นงานของคุณ ช่วงข้อมูล

4. รับค่าจากช่วงข้อมูล:

ข้อมูล var = dataRange.getValues();

บรรทัดนี้ดึงค่า (เนื้อหา) จากช่วงของเซลล์ที่กำหนดไว้ในขั้นตอนก่อนหน้า

5. วนซ้ำแถวข้อมูล:

สำหรับ (var i = 0; i < data.length; i++) { var row = data[i];

ลูปนี้จะวนซ้ำแต่ละแถวในอาร์เรย์ ตัวแปรแสดงถึงแถวข้อมูลปัจจุบันในแต่ละ iteration.fordatarow

6. รับค่าจากแต่ละคอลัมน์:

var businessName = แถว [0]; อีเมล var = แถว [1]; varใบแจ้งหนี้หมายเลข=แถว[2]; varใบแจ้งหนี้จำนวน=แถว[3]; var DueDate = แถว [4]; var subject = แถว [5];

บรรทัดด้านบนแยกค่าจากแต่ละคอลัมน์ในแถวข้อมูลปัจจุบัน แต่ละค่าจะถูกกำหนดให้กับตัวแปรในภายหลังเพื่อให้อ้างอิงได้ง่ายในสคริปต์ ค่าที่กำหนดเป็นค่าที่กำหนดเองสำหรับแผ่นงานที่เป็นแบบอย่างของเรา 

7. สร้างเนื้อหาอีเมล:

var emailBody = "เรียน" + ชื่อธุรกิจ + ",\n\n" + "นี่เป็นการเตือนว่าใบแจ้งหนี้ #" + หมายเลขใบแจ้งหนี้ + " สำหรับ $" + จำนวนเงินตามใบแจ้งหนี้ + " ครบกำหนดในวันที่ " + วันที่ครบกำหนด + ".\n" + "โปรดค้นหาใบแจ้งหนี้ที่แนบมา\n\n" + "ขอขอบคุณสำหรับความสนใจในเรื่องนี้โดยทันที";

โค้ดจะสร้างเนื้อหาอีเมลโดยใช้ค่าที่ดึงมาจากชีต เนื้อความของอีเมลคือสตริงที่ประกอบด้วยชื่อธุรกิจ หมายเลขใบแจ้งหนี้ จำนวนเงินในใบแจ้งหนี้ และวันที่ครบกำหนด

8. รับไฟล์ใบแจ้งหนี้ที่เกี่ยวข้อง:

varใบแจ้งหนี้FolderId = 'YOUR_FOLDER_ID_HERE'; varใบแจ้งหนี้Folder = DriveApp.getFolderById(invoiceFolderId); varใบแจ้งหนี้ไฟล์ =ใบแจ้งหนี้Folder.getFilesByName(invoiceNumber + '.pdf'); var ใบแจ้งหนี้ไฟล์; ถ้า (invoiceFiles.hasNext()) {ใบแจ้งหนี้File =ใบแจ้งหนี้Files.next(); } else { console.error("ไม่พบไฟล์ใบแจ้งหนี้สำหรับหมายเลขใบแจ้งหนี้: " + InvoiceNumber); ดำเนินการต่อ; }

บรรทัดเหล่านี้เรียกข้อมูลไฟล์ใบแจ้งหนี้ที่เกี่ยวข้องกับแถวปัจจุบัน 

ขั้นแรก เข้าถึงโฟลเดอร์ไฟล์ใบแจ้งหนี้โดยใช้รหัสโฟลเดอร์ อย่าลืมแทนที่ด้วยรหัสโฟลเดอร์จริง คุณ_FOLDER_ID_HERE

โปรดทราบว่ารูปแบบการตั้งชื่อในตัวอย่างของเราคือ  และใบแจ้งหนี้จริงมีชื่อว่า "123456.pdf" หากไฟล์แนบของคุณมีชื่อแตกต่างออกไป คุณจะต้องอัปเดตการจัดรูปแบบ (หมายเลขใบแจ้งหนี้ + '.pdf')

จากนั้น สคริปต์จะค้นหาไฟล์ที่มีชื่อเดียวกันกับหมายเลขใบแจ้งหนี้ (สมมติว่าไฟล์อยู่ในรูปแบบ PDF) 

หากพบไฟล์ ระบบจะกำหนดให้กับตัวแปร มิฉะนั้น สคริปต์จะบันทึกข้อความแสดงข้อผิดพลาดและย้ายไปยังแถวถัดไป invoiceFile

9. ส่งอีเมลพร้อมไฟล์แนบ:

MailApp.sendEmail({ ถึง: อีเมล, หัวเรื่อง: หัวเรื่อง, เนื้อหา: emailBody, ไฟล์แนบ: [invoiceFile] });

บรรทัดนี้จะส่งเนื้อหาและไฟล์แนบในอีเมล และนี่คือผลลัพธ์ที่คุณควรได้รับ นอกจากนี้ ขั้นตอนอัตโนมัติทั้งหมดจะมีผลตามที่อธิบายไว้ก่อนหน้านี้ และควรคงทริกเกอร์รายเดือนไว้เนื่องจากเป็นเรื่องเกี่ยวกับการส่งการแจ้งเตือนใบแจ้งหนี้ 

ส่งอีเมล HTML ด้วย GSheets

หากต้องการส่งอีเมล HTML คุณสามารถแก้ไขสคริปต์ที่อธิบายไว้ก่อนหน้านี้ได้ค่อนข้างเรียบง่าย นี่คือ: 

ฟังก์ชั่น sendEmailReminders() { // รับแผ่นงานที่ใช้งานอยู่ var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // รับช่วงข้อมูล (ไม่รวมแถวส่วนหัว) var dataRange = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn()); // รับค่าจากช่วงข้อมูล var data = dataRange.getValues(); // วนซ้ำแถวข้อมูลสำหรับ (var i = 0; i < data.length; i++) { var row = data[i]; // รับค่าจากแต่ละคอลัมน์ var businessName = row[0]; อีเมล var = แถว [1]; varใบแจ้งหนี้หมายเลข=แถว[2]; varใบแจ้งหนี้จำนวน=แถว[3]; var DueDate = แถว [4]; var subject = แถว [5]; // HTML เนื้อความอีเมล var emailBodyHtml = "<p>เรียน " + ชื่อธุรกิจ + ",</p>" + "<p>นี่เป็นการเตือนว่าใบแจ้งหนี้ #" + หมายเลขใบแจ้งหนี้ + " สำหรับ $" + จำนวนเงินตามใบแจ้งหนี้ + " ครบกำหนดในวันที่ " + วันที่ครบกำหนด + ".</p>" + "<p>โปรดดูใบแจ้งหนี้ที่แนบมา</p>" + "<p>ขอขอบคุณที่กรุณาให้ความสนใจในเรื่องนี้โดยทันที</p>"; // แนบใบแจ้งหนี้ที่เกี่ยวข้อง - คุณต้องระบุ ID โฟลเดอร์ที่ถูกต้องสำหรับจัดเก็บใบแจ้งหนี้ของคุณ varใบแจ้งหนี้FolderId = 'YOUR_FOLDER_ID_HERE'; varใบแจ้งหนี้Folder = DriveApp.getFolderById(invoiceFolderId); varใบแจ้งหนี้ไฟล์ =ใบแจ้งหนี้Folder.getFilesByName(invoiceNumber + '.pdf'); // สมมติว่าไฟล์ใบแจ้งหนี้อยู่ในรูปแบบ PDF varใบแจ้งหนี้ไฟล์; ถ้า (invoiceFiles.hasNext()) {ใบแจ้งหนี้File =ใบแจ้งหนี้Files.next(); } else { // หากไม่พบไฟล์ใบแจ้งหนี้ คุณสามารถข้ามแถวนี้หรือบันทึกข้อผิดพลาด console.error("ไม่พบไฟล์ใบแจ้งหนี้สำหรับหมายเลขใบแจ้งหนี้: " + InvoiceNumber); ดำเนินการต่อ; } // ส่งอีเมลพร้อมไฟล์แนบ MailApp.sendEmail({ to: email, subject: subject, htmlBody: emailBodyHtml, attachments: [invoiceFile] }); } }

ในเวอร์ชันนี้ ข้อความธรรมดาจะถูกแทนที่ด้วยตัวแปรที่มีเนื้อหาในรูปแบบ HTML อีเมล BodyemailBodyHtml

เมื่อเรียกใช้ฟังก์ชัน คุณสมบัติของเนื้อหาจะถูกแทนที่ด้วยคุณสมบัติซึ่งจะส่งอีเมลเป็นอีเมล HTMLMailApp.sendEmail()htmlBody

หมายเหตุด้านข้าง: 

เรากำลังใช้แทนในสคริปต์เพื่อความสะดวก ตัวเลือกทั้งสองจะใช้ได้แม้ว่าจะอ่านได้ง่ายกว่าก็ตาม อย่างไรก็ตาม คุณสามารถฟอร์แมตสคริปต์ใหม่และแทนที่ตัวดำเนินการต่อข้อมูลด้วยตัวยึดตำแหน่งที่การแก้ไขสตริง varconstconst${การแสดงออก}

นอกจากนี้ ไม่มีสคริปต์ใดที่มีฟังก์ชันต่างๆ เนื่องจากไม่จำเป็นสำหรับตัวอย่างของเรา แต่แน่นอนว่าคุณสามารถเพิ่มหรือทำให้เป็นอัตโนมัติได้ด้วยสคริปต์ประเภทนี้ bccbcc

สุดท้ายนี้ คุณสามารถเพิ่มสไตล์ CSS ที่กำหนดเองได้ ดูฟังก์ชันที่อัปเดตด้านล่าง var emailBodyHtml =

// เนื้อหาอีเมล HTML พร้อมสไตล์ CSS var emailBodyHtml = "<html><head><style>" + "body {แบบอักษรตระกูล: Arial, sans-serif;}" + "p {ขนาดตัวอักษร: 14px;}" + ".invoice-info {font-weight: ตัวหนา; สี: #4a4a4a;}" + "</style></head><body>" + "<p>เรียน <span class='invoice-info'>" + ชื่อธุรกิจ + "</span>,</p>" + "<p>นี่เป็นการเตือนว่า Invoice #<span class='invoice-info'>" + หมายเลขใบแจ้งหนี้ + "</span> สำหรับ $<span class='invoice-info'>" + จำนวนเงินตามใบแจ้งหนี้ + "</span> ครบกำหนดใน <span class='invoice-info'>" + วันที่ครบกำหนด + "</span>.</p>" + "<p>โปรดดูใบแจ้งหนี้ที่แนบมา</p>" + "<p>ขอขอบคุณที่กรุณาให้ความสนใจในเรื่องนี้โดยทันที</p>" + "</body></html>";

เคล็ดลับมือโปร: 

  • ใช้งานง่ายด้วย  ผู้ให้บริการกล่องจดหมายบางรายอาจไม่สนับสนุนและแสดงผลอีเมลที่มีสไตล์จัดหนักอย่างเหมาะสมหรือแสดงเลย <สไตล์>
  • ใช้ Mailtrap Email Testing เพื่อดูว่าผู้ให้บริการกล่องจดหมายรองรับอีเมล HTML ของคุณมากเพียงใด 
  • ขอย้ำอีกครั้ง หากคุณต้องการส่งในปริมาณมาก วิธีที่ดีที่สุดคือใช้ MTA ที่เหมาะสม แทนฟังก์ชัน ส่งอีเมล
  • ในบันทึกนั้น โปรดคำนึงถึงข้อจำกัดของบัญชี Gmail ของคุณ สิ่งเหล่านี้จะแตกต่างออกไปสำหรับ Google Workspace และ/หรือบัญชีส่วนตัวของคุณ 

จะส่งอีเมลทริกเกอร์จาก Google ชีตได้อย่างไร

เมื่อเซลล์ถึงค่าที่กำหนด

เราจะแสดงวิธีส่งอีเมลอัตโนมัติตามค่าของเซลล์ ในตัวอย่างของเรา ใบแจ้งหนี้จะถูกส่งเมื่อเซลล์จำนวนใบแจ้งหนี้ถึง '0' ซึ่งบ่งชี้ถึงลูกค้าที่เลิกใช้งาน 

ค่าเซลล์ที่กำหนดจะทริกเกอร์อีเมลปั่นแบบกำหนดเองเพื่อเข้าถึงลูกค้าทันที และขอย้ำอีกครั้งว่าขั้นตอนการทำงานอัตโนมัติยังคงเหมือนเดิม คุณยังคงใช้ทริกเกอร์รายเดือนสำหรับอีเมลเหล่านี้ได้ 

โปรดทราบว่าสคริปต์นี้เป็นสคริปต์เดียวกับที่เราใช้ในการส่งอีเมล HTML และไฟล์แนบ แต่มีฟังก์ชันอีกชั้นหนึ่งเพื่อแนะนำตรรกะแบบมีเงื่อนไขที่อธิบายไว้ นี่คือรหัส 

ฟังก์ชั่น sendEmailReminders() { // รับแผ่นงานที่ใช้งานอยู่ var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // รับช่วงข้อมูล (ไม่รวมแถวส่วนหัว) var dataRange = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn()); // รับค่าจากช่วงข้อมูล var data = dataRange.getValues(); // วนซ้ำแถวข้อมูลสำหรับ (var i = 0; i < data.length; i++) { var row = data[i]; // รับค่าจากแต่ละคอลัมน์ var businessName = row[0]; อีเมล var = แถว [1]; varใบแจ้งหนี้หมายเลข=แถว[2]; varใบแจ้งหนี้จำนวน=แถว[3]; var DueDate = แถว [4]; var subject = แถว [5]; // กำหนดเนื้อหาอีเมลตามจำนวนใบแจ้งหนี้ var emailBodyHtml; if (invoiceAmount == 0) { // Churn customer email subject = "การแจ้งเตือนลูกค้า Churn"; emailBodyHtml = "<html><head><style>" + "body {แบบอักษรตระกูล: Arial, sans-serif;}" + "p {ขนาดตัวอักษร: 14px;}" + ".invoice-info {font-weight: ตัวหนา; สี: #4a4a4a;}" + "</style></head><body>" + "<p>เรียน" + ชื่อธุรกิจ + ",</p>" + "<p>เราสังเกตเห็นว่าจำนวนเงินในใบแจ้งหนี้ของคุณคือ 0 ดอลลาร์ เราเสียใจที่เห็นคุณเลิกใช้งาน และขอขอบคุณสำหรับข้อเสนอแนะว่าทำไมคุณจึงตัดสินใจยกเลิกการใช้บริการของเรา</p>" + "<p>หากมีสิ่งใดที่เราสามารถทำได้เพื่อปรับปรุงบริการของเราหรือชนะธุรกิจของคุณกลับมา โปรดแจ้งให้เราทราบ</p>" + "<p>ขอขอบคุณสำหรับธุรกิจที่ผ่านมา</p>" + "</body></html>"; } else { // อีเมลใบแจ้งหนี้ปกติ emailBodyHtml = "<html><head><style>" + "body {แบบอักษรตระกูล: Arial, sans-serif;}" + "p {ขนาดตัวอักษร: 14px;}" + ".invoice-info {font-weight: ตัวหนา; สี: #4a4a4a;}" + "</style></head><body>" + "<p>เรียน <span class='invoice-info'>" + ชื่อธุรกิจ + "</span>,</p>" + "<p>นี่เป็นการเตือนว่า Invoice #<span class='invoice-info'>" + หมายเลขใบแจ้งหนี้ + "</span> สำหรับ $<span class='invoice-info'>" + จำนวนเงินตามใบแจ้งหนี้ + "</span> ครบกำหนดใน <span class='invoice-info'>" + วันที่ครบกำหนด + "</span>.</p>" + "<p>โปรดดูใบแจ้งหนี้ที่แนบมา</p>" + "<p>ขอขอบคุณที่กรุณาให้ความสนใจในเรื่องนี้โดยทันที</p>" + "</body></html>"; } // แนบใบแจ้งหนี้ที่เกี่ยวข้อง - คุณต้องระบุ ID โฟลเดอร์ที่ถูกต้องสำหรับจัดเก็บใบแจ้งหนี้ของคุณ varใบแจ้งหนี้FolderId = 'YOUR_FOLDER_ID_HERE'; varใบแจ้งหนี้Folder = DriveApp.getFolderById(invoiceFolderId); varใบแจ้งหนี้ไฟล์ =ใบแจ้งหนี้Folder.getFilesByName(invoiceNumber + '.pdf'); // สมมติว่าไฟล์ใบแจ้งหนี้อยู่ในรูปแบบ PDF varใบแจ้งหนี้ไฟล์; ถ้า (invoiceFiles.hasNext()) { ใบแจ้งหนี้ไฟล์ = ใบแจ้งหนี้ไฟล์ต่อไป(); } else { // หากไม่พบไฟล์ใบแจ้งหนี้ คุณสามารถข้ามแถวนี้หรือบันทึกข้อผิดพลาด console.error("ไม่พบไฟล์ใบแจ้งหนี้สำหรับหมายเลขใบแจ้งหนี้: " + InvoiceNumber); ดำเนินการต่อ; } // ส่งอีเมลพร้อมไฟล์แนบ MailApp.sendEmail({ to: email, subject: subject, htmlBody: emailBodyHtml, attachments: [invoiceFile] }); } }

ไปจนถึงการแตกโค้ด 

โปรดทราบว่าเราเน้นเฉพาะสิ่งที่อยู่ในฟังก์ชันเพื่อหลีกเลี่ยงการทำซ้ำสิ่งที่อธิบายไว้แล้ว emailBodyHtml

ส่วนที่อัปเดตของรหัสจะกำหนดเนื้อหาของเนื้อหาอีเมลตามจำนวนเงินในใบแจ้งหนี้ หากจำนวนเงินในใบแจ้งหนี้เป็น ระบบจะถือว่าเป็นลูกค้าที่เลิกใช้งาน และใช้เทมเพลตอีเมลอื่น นี่คือรายละเอียดของรหัส: '0'

var emailBodyHtml;

โดยจะประกาศตัวแปรที่ตั้งชื่อและจัดเก็บเนื้อหาของเนื้อหาอีเมล และในตอนแรกจะเหลือ undefined.emailBodyHtml

ถ้า (จำนวนใบแจ้งหนี้ == 0) { ... }

ใบแจ้งยอดจะตรวจสอบว่าจำนวนเงินในใบแจ้งหนี้เป็น 0 หรือไม่ หากเป็นเช่นนั้น โค้ดที่อยู่ในวงเล็บปีกกาจะถูกดำเนินการ บล็อกนี้มีเทมเพลตอีเมลลูกค้าที่เลิกใช้งาน if(`{}`)

subject = "การแจ้งเตือนลูกค้ายกเลิก";

บรรทัดนี้จะกำหนดหัวข้ออีเมลสำหรับลูกค้าที่เลิกใช้งาน"การแจ้งเตือนลูกค้าที่เลิกใช้งาน"

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

 บรรทัดจะกำหนดค่าของตัวแปรให้กับเทมเพลตอีเมลลูกค้าที่เลิกใช้งาน เทมเพลตคือสตริง HTML ที่มีรูปแบบ CSS ที่กำหนดไว้ในส่วนนี้ เนื้อความของอีเมลประกอบด้วยตัวยึดตำแหน่งสำหรับชื่อธุรกิจและข้อความถึง customer.emailBodyHtml<head>

} อื่น { ... }

การบล็อกจะดำเนินการเมื่อจำนวนใบแจ้งหนี้ไม่ใช่ 0 โดยจะตั้งค่าตัวแปรให้กับเทมเพลตอีเมลใบแจ้งหนี้ปกติ เทมเพลตอีเมลเป็นสตริง HTML ที่มีรูปแบบ CSS ที่กำหนดไว้ในส่วนนี้ เนื้อหาของอีเมลประกอบด้วยตัวยึดตำแหน่งสำหรับชื่อธุรกิจ หมายเลขใบแจ้งหนี้ จำนวนใบแจ้งหนี้ และวันที่ครบกำหนดelseemailBodyHtml<head>

โดยใช้ตรรกะตามเงื่อนไขนี้ สคริปต์จะส่งเนื้อหาอีเมลที่แตกต่างกันโดยขึ้นอยู่กับว่าจำนวนเงินในใบแจ้งหนี้คือ (ลูกค้าที่เปลี่ยนใจ) หรือไม่เป็นศูนย์ (ใบแจ้งหนี้ปกติ) 0

เมื่อค่าของเซลล์เปลี่ยนแปลง

ตอนนี้ เราจะใช้สคริปต์เดียวกันกับที่ใช้ด้านบนและขยายให้ครอบคลุมกรณีการใช้งานอื่น – ลูกค้าอัปเกรด และผู้จัดการบัญชีจำเป็นต้องส่งอีเมล “ขอบคุณ” พร้อมใบแจ้งหนี้ 

เพื่ออธิบาย แนวคิดก็คือทุกเดือนผู้จัดการบัญชีจะมีชีตใหม่ (ชีตที่ 2 ในตัวอย่างของเรา) พร้อมข้อมูลประจำตัวของลูกค้า 

ตอนนี้โค้ดจะเปรียบเทียบทั้งสองแผ่น และส่งอีเมล "ขอบคุณ" อัตโนมัติ แทนอีเมลใบแจ้งหนี้ปกติ ไปยังลูกค้าที่อัปเกรด ( จำนวนใบแจ้งหนี้ ใหญ่กว่าเมื่อเทียบกับอันก่อนหน้า) 

นอกจากนี้ ไม่จำเป็นต้องแตะอีเมลที่เปลี่ยนใจ เนื่องจากอาจมีคนตัดสินใจหยุดใช้บริการในจินตนาการของเรา นี่คือสคริปต์

ฟังก์ชัน 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(); สำหรับ (var i = 0; i < data1.length; i++) { var row1 = data1[i]; var row2 = data2[i]; ชื่อธุรกิจ var = row1[0]; อีเมล var = row1[1]; varใบแจ้งหนี้หมายเลข = row1[2]; varใบแจ้งหนี้Amount1 = parseFloat(row1[3].toString().replace('$', '').replace(',', '$', '').replace(',', ' 39;.')); varใบแจ้งหนี้Amount2 = parseFloat(row2[3].toString().replace('$', '').replace(',', '$', '').replace(',', ' 39;.')); if (isNaN(invoiceAmount1) || isNaN(invoiceAmount2)) { console.error("จำนวนใบแจ้งหนี้ไม่ถูกต้องสำหรับธุรกิจ: " + ชื่อธุรกิจ + ".ใบแจ้งหนี้Amount1: " + ใบแจ้งหนี้Amount1 + ", ใบแจ้งหนี้Amount2: " + ใบแจ้งหนี้Amount2 ); ดำเนินการต่อ; } var เนื่องจากวันที่ครบกำหนด = row1[4]; หลากหลายเรื่อง; var emailBodyHtml; if (invoiceAmount1 <ใบแจ้งหนี้Amount2) { console.log("ส่ง 'ขอบคุณสำหรับการอัพเกรด' อีเมลไปที่ " + อีเมล + ".ใบแจ้งหนี้Amount1: " + ใบแจ้งหนี้Amount1 + ", ใบแจ้งหนี้Amount2: " + ใบแจ้งหนี้จำนวน 2); subject = "ขอบคุณสำหรับการอัพเกรด"; emailBodyHtml = "<html><body>" + "<p>เรียน" + ชื่อธุรกิจ + ",</p>" + "<p>ขอบคุณสำหรับการอัพเกรด! ขอขอบคุณสำหรับธุรกิจของคุณและหวังว่าจะให้บริการคุณ</p>" + "<p>ขอแสดงความนับถือ</p>" + "<p>บริษัทของคุณ</p>" + "</body></html>"; MailApp.sendEmail({ ถึง: อีเมล, หัวเรื่อง: หัวเรื่อง, htmlBody: emailBodyHtml }); } else if (invoiceAmount1 == 0) { console.log("กำลังส่ง 'การแจ้งเตือนลูกค้ายกเลิก' อีเมลไปที่ " + อีเมล + ".ใบแจ้งหนี้Amount1: " + ใบแจ้งหนี้Amount1); subject = "การแจ้งเตือนลูกค้ายกเลิก"; emailBodyHtml = "<html><head><style>" + "body {แบบอักษรตระกูล: Arial, sans-serif;}" + "p {ขนาดตัวอักษร: 14px;}" + ".invoice-info {font-weight: ตัวหนา; สี: #4a4a4a;}" + "</style></head><body>" + "<p>เรียน" + ชื่อธุรกิจ + ",</p>" + "<p>เราสังเกตเห็นว่าจำนวนเงินในใบแจ้งหนี้ของคุณคือ 0 ดอลลาร์ เราเสียใจที่เห็นคุณเลิกใช้งาน และขอขอบคุณสำหรับข้อเสนอแนะว่าทำไมคุณจึงตัดสินใจยกเลิกการใช้บริการของเรา</p>" + "<p>หากมีสิ่งใดที่เราสามารถทำได้เพื่อปรับปรุงบริการของเราหรือชนะธุรกิจของคุณกลับมา โปรดแจ้งให้เราทราบ</p>" + "<p>ขอขอบคุณสำหรับธุรกิจที่ผ่านมา</p>" + "</body></html>"; MailApp.sendEmail({ ถึง: อีเมล, หัวเรื่อง: หัวเรื่อง, htmlBody:emailBodyHtml }); } else { console.log("กำลังส่ง 'การแจ้งเตือนใบแจ้งหนี้' ส่งอีเมลไปที่ " + อีเมล + ".ใบแจ้งหนี้Amount1: " + ใบแจ้งหนี้Amount1 + ", ใบแจ้งหนี้Amount2: " + ใบแจ้งหนี้Amount2); subject = "การแจ้งเตือนใบแจ้งหนี้"; emailBodyHtml = "<html><head><style>" + "body {แบบอักษรตระกูล: Arial, sans-serif;}" + "p {ขนาดตัวอักษร: 14px;}" + ".invoice-info {font-weight: ตัวหนา; สี: #4a4a4a;}" + "</style></head><body>" "<p>เรียน <span class='invoice-info'>" + ชื่อธุรกิจ + "</span>,</p>" + "<p>นี่เป็นการเตือนว่า Invoice #<span class='invoice-info'>" + หมายเลขใบแจ้งหนี้ + "</span> สำหรับ $<span class='invoice-info'>" + ใบแจ้งหนี้จำนวน1 + "</span> ครบกำหนดใน <span class='invoice-info'>" + วันที่ครบกำหนด + "</span>.</p>" + "<p>โปรดดูใบแจ้งหนี้ที่แนบมา</p>" + "<p>ขอขอบคุณที่กรุณาให้ความสนใจในเรื่องนี้โดยทันที</p>" + "</body></html>"; // แนบใบแจ้งหนี้ที่เกี่ยวข้อง - คุณต้องระบุ ID โฟลเดอร์ที่ถูกต้องสำหรับจัดเก็บใบแจ้งหนี้ของคุณ varใบแจ้งหนี้FolderId = 'YOUR_FOLDER_ID_HERE'; varใบแจ้งหนี้Folder = DriveApp.getFolderById(invoiceFolderId); varใบแจ้งหนี้ไฟล์ =ใบแจ้งหนี้Folder.getFilesByName(invoiceNumber + '.pdf'); // สมมติว่าไฟล์ใบแจ้งหนี้อยู่ในรูปแบบ PDF varใบแจ้งหนี้ไฟล์; ถ้า (invoiceFiles.hasNext()) {ใบแจ้งหนี้File =ใบแจ้งหนี้Files.next(); } else { // หากไม่พบไฟล์ใบแจ้งหนี้ คุณสามารถข้ามแถวนี้หรือบันทึกข้อผิดพลาด console.error("ไม่พบไฟล์ใบแจ้งหนี้สำหรับหมายเลขใบแจ้งหนี้: " + InvoiceNumber); ดำเนินการต่อ; } MailApp.sendEmail({ ถึง: อีเมล, หัวเรื่อง: หัวเรื่อง, htmlBody: emailBodyHtml, ไฟล์แนบ: [invoiceFile] }); } } }</p>" + "</body></html>"; // แนบใบแจ้งหนี้ที่เกี่ยวข้อง - คุณต้องระบุ ID โฟลเดอร์ที่ถูกต้องสำหรับจัดเก็บใบแจ้งหนี้ของคุณ varใบแจ้งหนี้FolderId = 'YOUR_FOLDER_ID_HERE'; varใบแจ้งหนี้Folder = DriveApp.getFolderById(invoiceFolderId); varใบแจ้งหนี้ไฟล์ =ใบแจ้งหนี้Folder.getFilesByName(invoiceNumber + '.pdf'); // สมมติว่าไฟล์ใบแจ้งหนี้อยู่ในรูปแบบ PDF varใบแจ้งหนี้ไฟล์; ถ้า (invoiceFiles.hasNext()) {ใบแจ้งหนี้File =ใบแจ้งหนี้Files.next(); } else { // หากไม่พบไฟล์ใบแจ้งหนี้ คุณสามารถข้ามแถวนี้หรือบันทึกข้อผิดพลาด console.error("ไม่พบไฟล์ใบแจ้งหนี้สำหรับหมายเลขใบแจ้งหนี้: " + InvoiceNumber); ดำเนินการต่อ; } MailApp.sendEmail({ ถึง: อีเมล, หัวเรื่อง: หัวเรื่อง, htmlBody: emailBodyHtml, ไฟล์แนบ: [invoiceFile] }); } } }</p>" + "</body></html>"; // แนบใบแจ้งหนี้ที่เกี่ยวข้อง - คุณต้องระบุ ID โฟลเดอร์ที่ถูกต้องสำหรับจัดเก็บใบแจ้งหนี้ของคุณ varใบแจ้งหนี้FolderId = 'YOUR_FOLDER_ID_HERE'; varใบแจ้งหนี้Folder = DriveApp.getFolderById(invoiceFolderId); varใบแจ้งหนี้ไฟล์ =ใบแจ้งหนี้Folder.getFilesByName(invoiceNumber + '.pdf'); // สมมติว่าไฟล์ใบแจ้งหนี้อยู่ในรูปแบบ PDF varใบแจ้งหนี้ไฟล์; ถ้า (invoiceFiles.hasNext()) {ใบแจ้งหนี้File =ใบแจ้งหนี้Files.next(); } else { // หากไม่พบไฟล์ใบแจ้งหนี้ คุณสามารถข้ามแถวนี้หรือบันทึกข้อผิดพลาด console.error("ไม่พบไฟล์ใบแจ้งหนี้สำหรับหมายเลขใบแจ้งหนี้: " + InvoiceNumber); ดำเนินการต่อ; } MailApp.sendEmail({ ถึง: อีเมล, หัวเรื่อง: หัวเรื่อง, htmlBody: emailBodyHtml, ไฟล์แนบ: [invoiceFile] }); } } }

ไปจนถึงการแตกโค้ด 

1. สคริปต์เริ่มต้นด้วยการรับการอ้างอิงทั้ง Sheet1 และ Sheet2

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

2. จากนั้นดึงข้อมูลจากทั้งสองแผ่น โดยเริ่มจากแถวที่สองเพื่อแยกส่วนหัวออก

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. สคริปต์จะวนซ้ำแถวในทั้งสองแผ่นงาน (สมมติว่าจำนวนแถวเท่ากันในทั้งสองแผ่นงาน) โดยจะเปรียบเทียบจำนวนใบแจ้งหนี้จาก Sheet1 และ Sheet2 สำหรับแต่ละแถวที่เกี่ยวข้อง

สำหรับ (var i = 0; i < data1.length; i++) { var row1 = data1[i]; var row2 = data2[i]; // รับจำนวนใบแจ้งหนี้จากทั้งสองแผ่น varใบแจ้งหนี้Amount1 = parseFloat(row1[3].toString().replace('$', '').replace(' ,', '.')); varใบแจ้งหนี้Amount2 = parseFloat(row2[3].toString().replace('$', '').replace(',', '$', '').replace(',', ' 39;.'));

สำเนา

4. จากนั้นสคริปต์จะตรวจสอบเงื่อนไขในการส่งอีเมลประเภทต่างๆ โดยอิงจากการเปรียบเทียบจำนวนใบแจ้งหนี้จาก Sheet1 และ Sheet2

if (invoiceAmount1 < InvoiceAmount2) { // ส่ง "ขอบคุณสำหรับการอัพเกรด" email } else if (invoiceAmount1 == 0) { // ส่ง "การแจ้งเตือนลูกค้ายกเลิก" email } else { // ส่ง "การแจ้งเตือนใบแจ้งหนี้" อีเมล }

สำเนา

การเปรียบเทียบที่สำคัญคือ ซึ่งจะตรวจสอบว่าจำนวนใบแจ้งหนี้ในแผ่นงาน 1 น้อยกว่าจำนวนใบแจ้งหนี้ในแผ่นงาน 2 สำหรับแถวเดียวกันหรือไม่ (นั่นคือ ลูกค้ารายเดียวกัน) หากเป็นจริง สคริปต์จะถือว่าลูกค้าอัปเกรดแล้วและส่งอีเมลแล้ว มิฉะนั้น จะตรวจสอบเงื่อนไขอื่นๆ (การแจ้งเตือนการปั่นป่วนหรือใบแจ้งหนี้ปกติ) และส่งอีเมลที่เหมาะสม if (invoiceAmount1 < InvoiceAmount2)"ขอขอบคุณสำหรับการอัปเกรด"

เมื่อมีการอัปเดตไฟล์ Google ชีต

ตอนนี้ การหารือเกี่ยวกับกรณีการใช้งานอื่นเล็กน้อยเป็นเรื่องที่คุ้มค่า โดยที่บุคคลอื่นที่ไม่ใช่ผู้จัดการบัญชีสามารถเข้าถึงสเปรดชีตได้ 

สมมติว่าผู้จัดการบัญชีของเรามีเวลาหนึ่งวันในการพบปะลูกค้าและตอบคำถามของพวกเขา ลูกค้าสามารถเข้าถึงสเปรดชีตซึ่งสามารถอธิบายปัญหาโดยย่อและจองช่วงเวลาได้ 

เอาล่ะ มีวิธีที่ดีกว่ามากในการจัดการกับการจองและการสอบถามของลูกค้า แต่เราจะยึดแนวทางนี้เพื่อประโยชน์ของบทช่วยสอน

ขั้นตอนที่ 1

ขั้นแรกเราต้องสร้างตาราง ดังที่แสดงด้านล่าง รายการของเราค่อนข้างเรียบง่าย โดยมีเพียงสามแถวที่มีผู้จัดการ ช่วงเวลา และแบบสอบถาม

ขั้นตอนที่ 2

ถัดไป คุณต้องมีสคริปต์ของ Google เพื่อทริกเกอร์อีเมลทุกครั้งที่มีคนอัปเดตชีตด้วยข้อความค้นหา ดังนั้นจึงต้องจองช่อง นี่คือตัวอย่าง 

//@OnlyCurrentDoc ฟังก์ชั่น processEdit(e) { MailApp.sendEmail({ to: "[email protected]" ;, subject: "การจองใหม่ -- ช่วงเวลาของลูกค้า", body: "ลูกค้ามีคำถามสำหรับคุณ" });

สำเนา

เพื่อช่วยให้คุณเข้าใจสิ่งที่เกิดขึ้น จะต้องหารือเกี่ยวกับหน้าที่หลักๆ 

  • //@OnlyCurrentDoc – คำอธิบายประกอบนี้ส่งสัญญาณว่าคุณต้องการให้สคริปต์ทำงานใน Google ชีตที่ระบุเท่านั้น การนำคำอธิบายประกอบออกจะเปิดใช้งานสคริปต์ในไฟล์อื่นๆ ของคุณ 
  • ฟังก์ชั่น กระบวนการแก้ไข () – ทริกเกอร์ (เราจะตั้งค่าในขั้นตอนถัดไป) เรียกใช้สคริปต์ด้วยฟังก์ชันนี้ ฟังก์ชันนี้จะตั้งค่ากระบวนการเพื่อรับอีเมลทุกครั้งที่มีคนอัปเดตชีต
  • (e) – คำอธิบายประกอบนี้แสดงถึงออบเจ็กต์ที่มีข้อมูลเกี่ยวกับการแก้ไข มีคุณสมบัติช่วงเพื่อส่งสัญญาณว่ามีการแก้ไขช่วงหรือเซลล์ 
  • MailApp – ออบเจ็กต์ที่ฟังก์ชันใช้ในการส่งต่ออีเมล 

ก่อนที่จะดำเนินการต่อ คุณสามารถทดสอบชีตและโค้ดได้ หากคุณใช้แผ่นงานตัวอย่าง เพียงเติมเซลล์ใดเซลล์หนึ่งใต้คอลัมน์แบบสอบถาม แล้วเรียกใช้สคริปต์ อีเมลควรมาถึงกล่องจดหมายของคุณทันที แต่โปรดทราบว่าสคริปต์ยังไม่ได้ทำงานอัตโนมัติ

ขั้นตอนที่ 3

ถึงเวลาตั้งค่าและให้สิทธิ์ทริกเกอร์ในการส่งอีเมลโดยอัตโนมัติ ใน Apps Script ให้คลิกไอคอนนาฬิกาปลุกในเมนูด้านข้าง จากนั้นคลิก “…สร้างทริกเกอร์ใหม่” 

ในป๊อปอัปการกำหนดค่าทริกเกอร์ ให้เลือกเกณฑ์ต่อไปนี้

  • กระบวนการแก้ไข
  • ศีรษะ
  • จากสเปรดชีต
  • ในการแก้ไข

หมายเหตุ: ไม่เป็นไรหากคุณคง การตั้งค่าการแจ้งเตือนความล้มเหลว ไว้เป็นค่าเริ่มต้น แต่คุณสามารถเปลี่ยนได้ ว่าถ้าจำเป็น จะไม่ส่งผลกระทบต่อการทำงานโดยรวมของทริกเกอร์หรือสคริปต์ ซึ่งสามารถใช้ได้กับสคริปต์ Google ใดๆ ที่คุณอาจต้องการทำให้เป็นอัตโนมัติ 

คลิก บันทึก ให้สิทธิ์ทริกเกอร์ในบัญชีของคุณ และคุณจะเห็นทริกเกอร์นั้นใน  รายการทริกเกอร์ นอกจากนี้ อย่าลืมกดปุ่ม ปรับใช้ เพื่อเปิดใช้งานทริกเกอร์ 

ตอนนี้คุณสามารถกลับไปที่แผ่นงาน เติมเซลล์อื่นในคอลัมน์ข้อความค้นหา และตรวจสอบว่าคุณได้รับการแจ้งเตือนอัตโนมัติหรือไม่ 

หมายเหตุด้านข้าง: คุณสามารถปรับแต่งแผ่นงานตามความต้องการของคุณได้ แต่นั่นหมายความว่าคุณจะต้องปรับแต่งสคริปต์ด้วยเช่นกัน

Tags: #HOW-TO

ขิง 2.7.53.0

ขิง 2.7.53.0

Ginger เป็นตัวตรวจสอบการสะกดและไวยากรณ์ฟรี

บล็อก

บล็อก

Blocks เป็นเกมทางปัญญาสำหรับนักเรียนชั้นประถมศึกษาปีที่ 3 เพื่อฝึกฝนทักษะการตรวจจับและการมองเห็น และรวมอยู่ในโปรแกรมสนับสนุนการสอนด้านไอทีโดยครู

พรีซี่ 6.26

พรีซี่ 6.26

Prezi เป็นแอปพลิเคชั่นฟรีที่ให้คุณสร้างงานนำเสนอดิจิทัลทั้งออนไลน์และออฟไลน์

แมทเวย์

แมทเวย์

Mathway เป็นแอปที่มีประโยชน์มาก ๆ ที่สามารถช่วยคุณแก้ปัญหาทางคณิตศาสตร์ที่ต้องใช้เครื่องมือที่ซับซ้อนมากกว่าเครื่องคิดเลขในอุปกรณ์ของคุณ

อะโดบี พรีเซนเตอร์

อะโดบี พรีเซนเตอร์

Adobe Presenter เป็นซอฟต์แวร์อีเลิร์นนิงที่เผยแพร่โดย Adobe Systems บนแพลตฟอร์ม Microsoft Windows ในรูปแบบปลั๊กอิน Microsoft PowerPoint

ทูแคน 2.3.0

ทูแคน 2.3.0

Toucan เป็นแพลตฟอร์มเทคโนโลยีการศึกษา ช่วยให้คุณเรียนรู้ภาษาใหม่ในขณะที่ท่องเว็บไซต์ทั่วไปในชีวิตประจำวัน

ENetViet 24.2

ENetViet 24.2

eNetViet เป็นแอปพลิเคชั่นที่ช่วยเชื่อมโยงผู้ปกครองกับโรงเรียนที่บุตรหลานกำลังศึกษาอยู่ เพื่อให้พวกเขาสามารถเข้าใจสถานการณ์การเรียนรู้ในปัจจุบันของบุตรหลานได้อย่างชัดเจน

การพิมพ์อย่างรวดเร็ว

การพิมพ์อย่างรวดเร็ว

RapidTyping เป็นเครื่องมือฝึกแป้นพิมพ์ที่สะดวกและใช้งานง่าย ซึ่งจะช่วยให้คุณปรับปรุงความเร็วในการพิมพ์และลดข้อผิดพลาดในการสะกดคำ ด้วยบทเรียนที่จัดไว้สำหรับหลายระดับ RapidTyping จะสอนวิธีพิมพ์หรือพัฒนาทักษะที่มีอยู่

ประเภทคณิตศาสตร์ 7.4.10.53

ประเภทคณิตศาสตร์ 7.4.10.53

MathType เป็นซอฟต์แวร์สมการเชิงโต้ตอบจากนักพัฒนา Design Science (Dessci) ซึ่งช่วยให้คุณสร้างและใส่คำอธิบายประกอบทางคณิตศาสตร์สำหรับการประมวลผลคำ การนำเสนอ eLearning ฯลฯ ตัวแก้ไขนี้ยังใช้ในการสร้างเอกสาร TeX, LaTeX และ MathML อีกด้วย

ไวยากรณ์

ไวยากรณ์

แอปที่ขับเคลื่อนด้วย AI ของ Grammarly ช่วยให้ผู้คนสื่อสารได้อย่างมีประสิทธิภาพมากขึ้น ผู้ใช้หลายล้านคนพึ่งพา Grammarly ทุกวันเพื่อทำให้ข้อความ เอกสาร และโพสต์บนโซเชียลมีเดียมีความชัดเจน ปราศจากข้อผิดพลาด และเป็นมืออาชีพมากขึ้น