ขิง 2.7.53.0
Ginger เป็นตัวตรวจสอบการสะกดและไวยากรณ์ฟรี
การส่งอีเมลจาก Google ชีตต้องใช้ Google Apps Script แต่อย่ากังวล หากคุณไม่เคยสร้างสคริปต์ Google Apps มาก่อน การส่งอีเมลทำได้ง่ายมาก
ในบทแนะนำต่อไปนี้ คุณจะได้เรียนรู้วิธีตรวจสอบค่าของเซลล์ในGoogle ชีต หากค่าเกินขีดจำกัดที่กำหนด คุณสามารถส่งอีเมลแจ้งเตือนไปยังที่อยู่อีเมลใดก็ได้ที่คุณต้องการโดยอัตโนมัติ
มีประโยชน์หลายอย่างสำหรับสคริปต์นี้ คุณอาจได้รับการแจ้งเตือนหากรายได้รายวันในรายงานการขายของคุณลดลงต่ำกว่าระดับที่กำหนด หรือคุณอาจได้รับอีเมลหากพนักงานของคุณรายงานว่าได้เรียกเก็บเงินจากลูกค้าในสเปรดชีตการติดตามโครงการของคุณนานเกินไป
ไม่ว่าแอปพลิเคชันใด สคริปต์นี้น่าสนใจ นอกจากนี้ยังช่วยให้คุณประหยัดเวลาในการตรวจสอบการอัปเดตสเปรดชีตด้วยตนเอง
ขั้นตอนที่ 1: การส่งอีเมลด้วย Google ชีต
ก่อนที่คุณจะสามารถสร้าง Google Apps Script เพื่อส่งอีเมลจาก Google ชีตคุณจะต้องมีที่อยู่อีเมล Gmail ซึ่ง Google Apps Script จะเข้าถึงเพื่อส่งอีเมลแจ้งเตือนของคุณ
คุณจะต้องสร้างสเปรดชีตใหม่ที่มีที่อยู่อีเมลด้วย
เพียงเพิ่มคอลัมน์ชื่อและคอลัมน์อีเมล แล้วกรอกข้อมูลกับคนที่คุณต้องการรับอีเมลแจ้งเตือน
เมื่อคุณมีที่อยู่อีเมลสำหรับส่งอีเมลแจ้งเตือนแล้ว ก็ถึงเวลาสร้างสคริปต์ของคุณ
ในการเข้าสู่ตัวแก้ไขสคริปต์ ให้คลิกที่เครื่องมือแล้วคลิกตัวแก้ไขสคริปต์
คุณจะเห็นหน้าต่างสคริปต์พร้อมฟังก์ชันเริ่มต้นที่เรียกว่า 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);
นี่คือวิธีการทำงานของรหัสนี้:
บันทึกสคริปต์โดยคลิกที่ ไอคอน ดิสก์จากนั้นเรียกใช้โดยคลิก ไอคอน เรียกใช้ (ลูกศรขวา)
โปรดทราบว่า Google Script ต้องได้รับอนุญาตในการเข้าถึงบัญชี Gmail ของคุณเพื่อส่งอีเมล ดังนั้นในครั้งแรกที่คุณเรียกใช้สคริปต์ คุณอาจเห็นการแจ้งเตือนดังด้านล่าง
คลิกที่ตรวจสอบสิทธิ์แล้วคุณจะเห็นหน้าจอแจ้งเตือนอื่นที่คุณต้องข้าม
หน้าจอแจ้งเตือนนี้เป็นเพราะคุณกำลังเขียน Google Script ที่กำหนดเองซึ่งไม่ได้ลงทะเบียนเป็นทางการ
เพียงคลิกที่ขั้นสูงจากนั้นคลิกลิงก์ไปที่ SendEmail (ไม่ปลอดภัย)
คุณจะต้องทำเช่นนี้เพียงครั้งเดียว สคริปต์ของคุณจะทำงาน และที่อยู่อีเมลที่คุณระบุในสเปรดชีตของคุณจะได้รับอีเมลดังตัวอย่างด้านล่าง
ขั้นตอนที่ 2: การอ่านค่าจากเซลล์ใน Google ชีต
เมื่อคุณเขียนสคริปต์ของ Google Apps ที่สามารถส่งอีเมลแจ้งเตือนได้สำเร็จ ก็ถึงเวลาทำให้อีเมลแจ้งเตือนนั้นทำงานได้ดีขึ้น
ขั้นตอนต่อไป คุณจะได้เรียนรู้วิธีอ่านค่าข้อมูลจากสเปรดชีตของ 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!');="" }="">
รหัสนี้ทำงานอย่างไร:
บันทึกรหัสนี้และเรียกใช้ หากทำงานอย่างถูกต้อง คุณควรเห็นข้อความแจ้งเตือนต่อไปนี้ในเบราว์เซอร์ของคุณ
ตอนนี้ คุณมี 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() ทุกเดือน
เมื่อต้องการทำสิ่งนี้ ในตัวแก้ไขสคริปต์:
คลิกบันทึกเพื่อสิ้นสุดทริกเกอร์
ทุกเดือน สคริปต์ใหม่ของคุณจะทำงานและเปรียบเทียบยอดขายรายเดือนทั้งหมดในเซลล์ D2 ถึง $16,000
หากน้อยกว่านั้น ระบบจะส่งอีเมลแจ้งเตือนเพื่อแจ้งยอดขายรายเดือนที่ต่ำ
อย่างที่คุณเห็น 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 คุณสามารถแก้ไขสคริปต์ที่อธิบายไว้ก่อนหน้านี้ได้ค่อนข้างเรียบง่าย นี่คือ:
ฟังก์ชั่น 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>";
เคล็ดลับมือโปร:
เมื่อเซลล์ถึงค่าที่กำหนด
เราจะแสดงวิธีส่งอีเมลอัตโนมัติตามค่าของเซลล์ ในตัวอย่างของเรา ใบแจ้งหนี้จะถูกส่งเมื่อเซลล์จำนวนใบแจ้งหนี้ถึง '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: "ลูกค้ามีคำถามสำหรับคุณ" });
สำเนา
เพื่อช่วยให้คุณเข้าใจสิ่งที่เกิดขึ้น จะต้องหารือเกี่ยวกับหน้าที่หลักๆ
ก่อนที่จะดำเนินการต่อ คุณสามารถทดสอบชีตและโค้ดได้ หากคุณใช้แผ่นงานตัวอย่าง เพียงเติมเซลล์ใดเซลล์หนึ่งใต้คอลัมน์แบบสอบถาม แล้วเรียกใช้สคริปต์ อีเมลควรมาถึงกล่องจดหมายของคุณทันที แต่โปรดทราบว่าสคริปต์ยังไม่ได้ทำงานอัตโนมัติ
ขั้นตอนที่ 3
ถึงเวลาตั้งค่าและให้สิทธิ์ทริกเกอร์ในการส่งอีเมลโดยอัตโนมัติ ใน Apps Script ให้คลิกไอคอนนาฬิกาปลุกในเมนูด้านข้าง จากนั้นคลิก “…สร้างทริกเกอร์ใหม่”
ในป๊อปอัปการกำหนดค่าทริกเกอร์ ให้เลือกเกณฑ์ต่อไปนี้
หมายเหตุ: ไม่เป็นไรหากคุณคง การตั้งค่าการแจ้งเตือนความล้มเหลว ไว้เป็นค่าเริ่มต้น แต่คุณสามารถเปลี่ยนได้ ว่าถ้าจำเป็น จะไม่ส่งผลกระทบต่อการทำงานโดยรวมของทริกเกอร์หรือสคริปต์ ซึ่งสามารถใช้ได้กับสคริปต์ Google ใดๆ ที่คุณอาจต้องการทำให้เป็นอัตโนมัติ
คลิก บันทึก ให้สิทธิ์ทริกเกอร์ในบัญชีของคุณ และคุณจะเห็นทริกเกอร์นั้นใน รายการทริกเกอร์ นอกจากนี้ อย่าลืมกดปุ่ม ปรับใช้ เพื่อเปิดใช้งานทริกเกอร์
ตอนนี้คุณสามารถกลับไปที่แผ่นงาน เติมเซลล์อื่นในคอลัมน์ข้อความค้นหา และตรวจสอบว่าคุณได้รับการแจ้งเตือนอัตโนมัติหรือไม่
หมายเหตุด้านข้าง: คุณสามารถปรับแต่งแผ่นงานตามความต้องการของคุณได้ แต่นั่นหมายความว่าคุณจะต้องปรับแต่งสคริปต์ด้วยเช่นกัน
Ginger เป็นตัวตรวจสอบการสะกดและไวยากรณ์ฟรี
Blocks เป็นเกมทางปัญญาสำหรับนักเรียนชั้นประถมศึกษาปีที่ 3 เพื่อฝึกฝนทักษะการตรวจจับและการมองเห็น และรวมอยู่ในโปรแกรมสนับสนุนการสอนด้านไอทีโดยครู
Prezi เป็นแอปพลิเคชั่นฟรีที่ให้คุณสร้างงานนำเสนอดิจิทัลทั้งออนไลน์และออฟไลน์
Mathway เป็นแอปที่มีประโยชน์มาก ๆ ที่สามารถช่วยคุณแก้ปัญหาทางคณิตศาสตร์ที่ต้องใช้เครื่องมือที่ซับซ้อนมากกว่าเครื่องคิดเลขในอุปกรณ์ของคุณ
Adobe Presenter เป็นซอฟต์แวร์อีเลิร์นนิงที่เผยแพร่โดย Adobe Systems บนแพลตฟอร์ม Microsoft Windows ในรูปแบบปลั๊กอิน Microsoft PowerPoint
Toucan เป็นแพลตฟอร์มเทคโนโลยีการศึกษา ช่วยให้คุณเรียนรู้ภาษาใหม่ในขณะที่ท่องเว็บไซต์ทั่วไปในชีวิตประจำวัน
eNetViet เป็นแอปพลิเคชั่นที่ช่วยเชื่อมโยงผู้ปกครองกับโรงเรียนที่บุตรหลานกำลังศึกษาอยู่ เพื่อให้พวกเขาสามารถเข้าใจสถานการณ์การเรียนรู้ในปัจจุบันของบุตรหลานได้อย่างชัดเจน
RapidTyping เป็นเครื่องมือฝึกแป้นพิมพ์ที่สะดวกและใช้งานง่าย ซึ่งจะช่วยให้คุณปรับปรุงความเร็วในการพิมพ์และลดข้อผิดพลาดในการสะกดคำ ด้วยบทเรียนที่จัดไว้สำหรับหลายระดับ RapidTyping จะสอนวิธีพิมพ์หรือพัฒนาทักษะที่มีอยู่
MathType เป็นซอฟต์แวร์สมการเชิงโต้ตอบจากนักพัฒนา Design Science (Dessci) ซึ่งช่วยให้คุณสร้างและใส่คำอธิบายประกอบทางคณิตศาสตร์สำหรับการประมวลผลคำ การนำเสนอ eLearning ฯลฯ ตัวแก้ไขนี้ยังใช้ในการสร้างเอกสาร TeX, LaTeX และ MathML อีกด้วย
แอปที่ขับเคลื่อนด้วย AI ของ Grammarly ช่วยให้ผู้คนสื่อสารได้อย่างมีประสิทธิภาพมากขึ้น ผู้ใช้หลายล้านคนพึ่งพา Grammarly ทุกวันเพื่อทำให้ข้อความ เอกสาร และโพสต์บนโซเชียลมีเดียมีความชัดเจน ปราศจากข้อผิดพลาด และเป็นมืออาชีพมากขึ้น