
מאת: Shlomi Postelnik
אחרי שלמדנו איך לשלוח הצעת מחיר בודדת בלחיצת כפתור, הגיע הזמן לעבור לשלב הבא: אוטומציה בקנה מידה רחב.
דמיינו שאתם צריכים לשלוח הצעות מחיר, דוחות חודשיים או סטטוס חשבון ל-50 לקוחות שונים. במקום לעשות זאת אחד-אחד, נלמד היום איך ליצור לולאה חכמה ב-Office Scripts שתעבור על רשימת תפוצה, תעדכן את הנתונים בגיליון עבור כל לקוח בנפרד, ותשלח לכל אחד מייל אישי, מעוצב ומדויק – והכל בריצה אחת.
למה זה הפתרון המושלם לדיוור עסקי?
רוב מערכות הדיוור ההמוני יודעות לשתול טקסט פשוט (כמו שם הלקוח). אבל הכוח האמיתי של אקסל הוא היכולת לשלוח ללקוח נתונים ויזואליים שרלוונטיים רק לו. הסקריפט שלנו יודע "להשתיל" את נתוני הלקוח בתוך התבנית שבניתם, לתת לנוסחאות להתעדכן, ואז "לצלם" את התוצאה הסופית ולשלוח אותה כחלק בלתי נפרד מגוף המייל.
טיפ של אלופים: "מנגנון אישור שליחה" (Approval Mechanism)
כשעובדים עם רשימות גדולות, אנחנו לא רוצים לשלוח מיילים בטעות לפני שהנתונים מוכנים ב-100%.
בקוד שצירפנו כאן בהמשך, הוספנו עמודה חכמה בגיליון האקסל: "האם לשלוח?".
הסקריפט מבצע בדיקה לוגית מהירה: רק אם הוא מזהה את המילה "כן" בעמודה הייעודית, הוא יבצע את השליחה. זה מאפשר לכם:
-
לבצע "הרצה יבשה" (Dry Run): לסמן "כן" רק בשורה שלכם ולוודא שהמייל יוצא מושלם.
-
שליחה מדורגת: לאשר רק לקוחות שסיימתם לעבד את הנתונים שלהם.
-
שליטה מלאה: למנוע שליחות כפולות או טעויות מביכות מול לקוחות.
איך זה עובד? (מאחורי הקלעים)
-
קריאת הרשימה: הסקריפט סורק טבלה המכילה שמות, כתובות מייל, סכומי הצעה ועמודת סטטוס ("כן"/"לא").
-
השתלת נתונים (Injection): עבור כל שורה מאושרת, הסקריפט כותב את הנתונים לתוך תאי התבנית בגיליון.
-
צילום דינמי ויישור לימין: ברגע שהתבנית התעדכנה, הסקריפט מצלם אותה ובונה מייל ב-HTML עם הגדרת
dir='rtl'כדי שהעברית תישאר ישרה ומקצועית. -
דיווח בזמן אמת: הסקריפט מדפיס הודעה על כל מייל שנשלח, כך שתוכלו לעקוב אחרי ההתקדמות.
לסיכום
שליחה המונית מותאמת אישית היא כבר לא נחלתם של מתכנתים בלבד. בעזרת Office Scripts, כל מנהל פרויקטים או איש כספים יכול להפוך את האקסל למערכת דיוור חכמה, חסכונית ומקצועית להפליא.
הקוד המלא לביצוע המשימה:
function main(workbook: ExcelScript.Workbook) {
let ws = workbook.getActiveWorksheet();
// 1. הגדרת טבלת אנשי הקשר (A עד D)
// עמודה A: שם | B: מייל | C: סכום | D: האם לשלוח?
let contactRange = ws.getRange("A20:D30");
let contactValues = contactRange.getValues();
// 2. הגדרת טווח התמונה לצילום (דינמי מתאים קודמים)
let startCell = ws.getRange("E1").getText();
let endCell = ws.getRange("E2").getText();
let dynamicRangeAddress = startCell + ":" + endCell;
// 3. ריצה בלולאה על כל השורות בטבלה
for (let i = 0; i < contactValues.length; i++) {
let name = contactValues[i][0].toString();
let emailAddress = contactValues[i][1].toString();
let amount = contactValues[i][2].toString();
let shouldSend = contactValues[i][3].toString(); // עמודה D - הסטטוס
// בדיקה: אם לא כתוב "כן" בעמודה D, דלג לשורה הבאה
if (shouldSend !== "כן") {
console.log("מדלג על: " + name + " (לא סומן 'כן')");
continue;
}
// בדיקה נוספת שהנתונים הבסיסיים קיימים
if (!name || !emailAddress) continue;
// 4. השתלת הנתונים בתבנית הצעת המחיר
ws.getRange("C3").setValue(name);
ws.getRange("C12").setValue(amount);
// 5. צילום הטווח המעודכן
let rangeToCapture = ws.getRange(dynamicRangeAddress);
let img = rangeToCapture.getImage();
let imgHtml = '<img src="data:image/png;base64,' + img + '" style="width:450px; border:1px solid #ccc;"/><br/><br/>';
// 6. בניית גוף המייל (RTL)
let emailBody =
"<div dir='rtl' style='font-family: Arial, sans-serif; text-align: right;'>" +
"היי " + name + ",<br/><br/>" +
"מצרף בזאת את הצעת המחיר המעודכנת על סך: <strong>" + amount + "</strong><br/>" +
"להלן פירוט הסעיפים המלא:<br/><br/>" +
imgHtml +
"בברכה,<br/>" +
"<strong>שלומי פוסטלניק</strong>" +
"</div>";
// 7. שליחת המייל
OfficeScript.sendMail({
to: emailAddress,
subject: "הצעת מחיר מותאמת אישית עבור " + name,
contentType: OfficeScript.EmailContentType.html,
content: emailBody
});
console.log("בוצעה שליחה ל: " + name);
}
}
טיפ קטן ממני: לפני שאתם לוחצים על הכפתור עבור רשימה גדולה, וודאו שכתובות התאים (כמו E1 ו-E2) מוגדרות נכון לטווח שאתם רוצים לצלם.
צודק לגמרי, זהו פרט קריטי עבור המשתמשים ה"כבדים" שמתכננים לשלוח מאות מיילים בבת אחת. חשוב לתאם ציפיות כדי שהסקריפט לא ייעצר באמצע העבודה.
⚠️ שימו לב: מגבלות השליחה של Microsoft 365
לפני שאתם יוצאים לדרך עם רשימות תפוצה של אלפי נמענים, חשוב להכיר את "חוקי התנועה" של מיקרוסופט. כדי למנוע ספאם, המערכת מגדירה מכסות שליחה יומיות עבור שירות OfficeScript.sendMail:
-
מכסת השליחה: המגבלה הסטנדרטית עבור רוב רישיונות ה-Business עומדת על עד 100 שליחות ביום דרך הסקריפט (המכסה עשויה להשתנות בהתאם לסוג הרישיון שלכם).
-
מה קורה כשעוברים את המכסה? אם תנסו לשלוח מעבר למכסה היומית, הסקריפט יחזיר שגיאה והשליחה תיעצר.
-
הפתרון לרשימות גדולות: אם יש לכם רשימת תפוצה של מאות או אלפי אנשים, מומלץ לחלק את השליחה לכמה ימים (בעזרת עמודת "האם לשלוח?" שבנינו) או להשתמש בחיבור ל-Power Automate עם שירות חיצוני כמו SendGrid או Mailchimp.
טיפ קטן: המגבלה הזו קיימת רק על שליחה אוטומטית מתוך הסקריפט, והיא לא משפיעה על היכולת שלהם לשלוח מיילים ידנית מתוך האאוטלוק כרגיל.
בהצלחה בשדרוג האוטומציה שלכם!




