אני מכירה מייק אבל זה לא עולה יקריש איפה לעשות את זה באופן חינמי באוטומציה?
ניסיתי בזפייר ומייק אבל נראה לי שיש הגבלת הודעות, נכון?
יש מערכת אחרת חינמית ?
function onEdit(e) {
// הגדרות
const WATCH_RANGE = 'A1:B10'; // טווח התאים שאחריהם עוקבים
const EMAIL_ADDRESS = '<לא ניתן לפרסם מיילים באופן פומבי>'; // כתובת המייל שלך
const SHEET_NAME = 'Sheet1'; // שם הגיליון
const FLAG_SHEET_NAME = 'Flags'; // שם הגיליון שיכיל את הדגל
const FLAG_CELL = 'A1'; // התא בגיליון הדגל שבו נשמר סטטוס המייל
const EMAIL_SUBJECT = 'שינוי בוצע בגיליון!';
const EMAIL_BODY = 'שינוי בוצע בגיליון שלך בטווח: ' + WATCH_RANGE;
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName(SHEET_NAME);
const flagsSheet = ss.getSheetByName(FLAG_SHEET_NAME);
//בדיקה האם גליון הדגל קיים, ואם לא, ליצור אותו
if (!flagsSheet) {
ss.insertSheet(FLAG_SHEET_NAME);
const newFlagsSheet = ss.getSheetByName(FLAG_SHEET_NAME)
newFlagsSheet.getRange(FLAG_CELL).setValue(false);
}
const range = e.range;
// בדיקה אם השינוי בוצע בטווח הרלוונטי
if (sheet.getName() == SHEET_NAME && range.getSheet().getName() == SHEET_NAME && range.isPartOf(sheet.getRange(WATCH_RANGE))) {
// קריאה לסטטוס שליחת המייל
const emailSent = flagsSheet.getRange(FLAG_CELL).getValue();
//אם המייל לא נשלח עדיין
if (!emailSent) {
//שליחת מייל
MailApp.sendEmail({
to: EMAIL_ADDRESS,
subject: EMAIL_SUBJECT,
body: EMAIL_BODY
});
//עדכון דגל שנשלח מייל
flagsSheet.getRange(FLAG_CELL).setValue(true);
}
}
}
function onOpen() {
// הגדרות
const FLAG_SHEET_NAME = 'Flags'; // שם הגיליון שיכיל את הדגל
const FLAG_CELL = 'A1'; // התא בגיליון הדגל שבו נשמר סטטוס המייל
const ss = SpreadsheetApp.getActiveSpreadsheet();
const flagsSheet = ss.getSheetByName(FLAG_SHEET_NAME);
//איפוס הדגל
if (flagsSheet) {
flagsSheet.getRange(FLAG_CELL).setValue(false);
}
}
תשאלו את גיפיטיזה מראה לי על השורה הזו שלא תקין:
const range = e.range;
function onEdit(e) {
// הגדרות
const WATCH_RANGE = 'A1:B10'; // טווח התאים שאחריהם עוקבים
const EMAIL_ADDRESS = '<לא ניתן לפרסם מיילים באופן פומבי>'; // כתובת המייל שלך
const SHEET_NAME = 'Sheet1'; // שם הגיליון
const FLAG_SHEET_NAME = 'Flags'; // שם הגיליון שיכיל את הדגל
const FLAG_CELL = 'A1'; // התא בגיליון הדגל שבו נשמר סטטוס המייל
const EMAIL_SUBJECT = 'שינוי בוצע בגיליון!';
const EMAIL_BODY = 'שינוי בוצע בגיליון שלך בטווח: ' + WATCH_RANGE;
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName(SHEET_NAME);
const flagsSheet = ss.getSheetByName(FLAG_SHEET_NAME);
// בדיקה אם הטריגר נשלח עם אובייקט e נכון
if (!e || !e.range) {
Logger.log('No event data available.');
return; // אם אין אובייקט e, יוצאים מהפונקציה
}
Logger.log('Event data is valid.');
// בדיקה האם גליון הדגל קיים, ואם לא, ליצור אותו
if (!flagsSheet) {
Logger.log('No flags sheet found, creating a new one.');
ss.insertSheet(FLAG_SHEET_NAME);
const newFlagsSheet = ss.getSheetByName(FLAG_SHEET_NAME);
newFlagsSheet.getRange(FLAG_CELL).setValue(false);
} else {
Logger.log('Flags sheet found.');
}
const range = e.range;
// בדיקה אם ה-range שייך לגיליון הרצוי
if (range.getSheet() && range.getSheet().getName() == SHEET_NAME) {
Logger.log('Edit made in the correct sheet: ' + SHEET_NAME);
// בדיקה אם השינוי בוצע בטווח הרלוונטי
const watchRange = sheet.getRange(WATCH_RANGE);
const watchStartRow = watchRange.getRow();
const watchStartCol = watchRange.getColumn();
const watchEndRow = watchStartRow + watchRange.getNumRows() - 1;
const watchEndCol = watchStartCol + watchRange.getNumColumns() - 1;
const editedRow = range.getRow();
const editedCol = range.getColumn();
Logger.log('Edited Row: ' + editedRow + ', Edited Column: ' + editedCol);
Logger.log('Watch Range - Start Row: ' + watchStartRow + ', Start Col: ' + watchStartCol);
Logger.log('Watch Range - End Row: ' + watchEndRow + ', End Col: ' + watchEndCol);
// בדיקה אם התא שהשתנה נמצא בתוך טווח המעקב
if (editedRow >= watchStartRow && editedRow <= watchEndRow &&
editedCol >= watchStartCol && editedCol <= watchEndCol) {
Logger.log('Edit is within the watch range: ' + WATCH_RANGE);
// קריאה לסטטוס שליחת המייל
const emailSent = flagsSheet.getRange(FLAG_CELL).getValue();
Logger.log('Email sent status: ' + emailSent);
// אם המייל לא נשלח עדיין
if (!emailSent) {
Logger.log("Sending email...");
// שליחת מייל
MailApp.sendEmail({
to: EMAIL_ADDRESS,
subject: EMAIL_SUBJECT,
body: EMAIL_BODY
});
Logger.log("Email sent successfully.");
// עדכון דגל שנשלח מייל
flagsSheet.getRange(FLAG_CELL).setValue(true);
Logger.log('Flag updated to true (email sent).');
} else {
Logger.log('Email already sent, skipping email sending.');
}
} else {
Logger.log('Edit is not within the watch range.');
}
} else {
Logger.log('Edit was made in a different sheet, not ' + SHEET_NAME);
}
}
const EMAIL_ADDRESS = Session.getActiveUser().getEmail();
זה לא שולח מיילהנה הקוד המתוקן לפונקציית onEdit:
בדקתי וזה עובד!JavaScript:function onEdit(e) { // הגדרות const WATCH_RANGE = 'A1:B10'; // טווח התאים שאחריהם עוקבים const EMAIL_ADDRESS = '<לא ניתן לפרסם מיילים באופן פומבי>'; // כתובת המייל שלך const SHEET_NAME = 'Sheet1'; // שם הגיליון const FLAG_SHEET_NAME = 'Flags'; // שם הגיליון שיכיל את הדגל const FLAG_CELL = 'A1'; // התא בגיליון הדגל שבו נשמר סטטוס המייל const EMAIL_SUBJECT = 'שינוי בוצע בגיליון!'; const EMAIL_BODY = 'שינוי בוצע בגיליון שלך בטווח: ' + WATCH_RANGE; const ss = SpreadsheetApp.getActiveSpreadsheet(); const sheet = ss.getSheetByName(SHEET_NAME); const flagsSheet = ss.getSheetByName(FLAG_SHEET_NAME); // בדיקה אם הטריגר נשלח עם אובייקט e נכון if (!e || !e.range) { Logger.log('No event data available.'); return; // אם אין אובייקט e, יוצאים מהפונקציה } Logger.log('Event data is valid.'); // בדיקה האם גליון הדגל קיים, ואם לא, ליצור אותו if (!flagsSheet) { Logger.log('No flags sheet found, creating a new one.'); ss.insertSheet(FLAG_SHEET_NAME); const newFlagsSheet = ss.getSheetByName(FLAG_SHEET_NAME); newFlagsSheet.getRange(FLAG_CELL).setValue(false); } else { Logger.log('Flags sheet found.'); } const range = e.range; // בדיקה אם ה-range שייך לגיליון הרצוי if (range.getSheet() && range.getSheet().getName() == SHEET_NAME) { Logger.log('Edit made in the correct sheet: ' + SHEET_NAME); // בדיקה אם השינוי בוצע בטווח הרלוונטי const watchRange = sheet.getRange(WATCH_RANGE); const watchStartRow = watchRange.getRow(); const watchStartCol = watchRange.getColumn(); const watchEndRow = watchStartRow + watchRange.getNumRows() - 1; const watchEndCol = watchStartCol + watchRange.getNumColumns() - 1; const editedRow = range.getRow(); const editedCol = range.getColumn(); Logger.log('Edited Row: ' + editedRow + ', Edited Column: ' + editedCol); Logger.log('Watch Range - Start Row: ' + watchStartRow + ', Start Col: ' + watchStartCol); Logger.log('Watch Range - End Row: ' + watchEndRow + ', End Col: ' + watchEndCol); // בדיקה אם התא שהשתנה נמצא בתוך טווח המעקב if (editedRow >= watchStartRow && editedRow <= watchEndRow && editedCol >= watchStartCol && editedCol <= watchEndCol) { Logger.log('Edit is within the watch range: ' + WATCH_RANGE); // קריאה לסטטוס שליחת המייל const emailSent = flagsSheet.getRange(FLAG_CELL).getValue(); Logger.log('Email sent status: ' + emailSent); // אם המייל לא נשלח עדיין if (!emailSent) { Logger.log("Sending email..."); // שליחת מייל MailApp.sendEmail({ to: EMAIL_ADDRESS, subject: EMAIL_SUBJECT, body: EMAIL_BODY }); Logger.log("Email sent successfully."); // עדכון דגל שנשלח מייל flagsSheet.getRange(FLAG_CELL).setValue(true); Logger.log('Flag updated to true (email sent).'); } else { Logger.log('Email already sent, skipping email sending.'); } } else { Logger.log('Edit is not within the watch range.'); } } else { Logger.log('Edit was made in a different sheet, not ' + SHEET_NAME); } }
את פונקציית onOpen יש להשאיר כמקודם
רק שינוי קטן, יש להוסיף טריגר שיפעיל את הפונקציה onEdit בעת עריכת הגליון.
const URL_SHEET = "https://docs.google.com/spreadsheets/d/" + SpreadsheetApp.getActiveSpreadsheet().getId()
const EMAIL_BODY = 'שינוי בוצע בגיליון שלך בטווח: ' + WATCH_RANGE + "\n קישור לגליון: " + URL_SHEET ;
function onEdit(e) {
// הגדרות
const WATCH_RANGES = {
'A1:B10': { // טווח 1
email: '<כתובת_מייל_1>', // כתובת מייל עבור טווח 1
email_subject: 'שינוי בוצע בגיליון - טווח 1', // נושא מייל עבור טווח 1
email_body: 'שינוי בוצע בגיליון שלך בטווח: A1:B10' // גוף מייל עבור טווח 1
},
'C1:D10': { // טווח 2
email: '<כתובת_מייל_2>', // כתובת מייל עבור טווח 2
email_subject: 'שינוי בוצע בגיליון - טווח 2', // נושא מייל עבור טווח 2
email_body: 'שינוי בוצע בגיליון שלך בטווח: C1:D10' // גוף מייל עבור טווח 2
}
};
const SHEET_NAME = 'Sheet1'; // שם הגיליון
const FLAG_SHEET_NAME = 'Flags'; // שם הגיליון שיכיל את הדגל
const FLAG_CELL_PREFIX = 'A'; // תחילית התאים בגיליון הדגל שבהם נשמר סטטוס המייל
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName(SHEET_NAME);
let flagsSheet = ss.getSheetByName(FLAG_SHEET_NAME);
// בדיקה אם הטריגר נשלח עם אובייקט e נכון
if (!e || !e.range) {
Logger.log('No event data available.');
return; // אם אין אובייקט e, יוצאים מהפונקציה
}
Logger.log('Event data is valid.');
// בדיקה האם גליון הדגל קיים, ואם לא, ליצור אותו
if (!flagsSheet) {
Logger.log('No flags sheet found, creating a new one.');
ss.insertSheet(FLAG_SHEET_NAME);
flagsSheet = ss.getSheetByName(FLAG_SHEET_NAME);
} else {
Logger.log('Flags sheet found.');
}
const range = e.range;
// בדיקה אם ה-range שייך לגיליון הרצוי
if (range.getSheet() && range.getSheet().getName() == SHEET_NAME) {
Logger.log('Edit made in the correct sheet: ' + SHEET_NAME);
// מעבר על כל הטווחים המוגדרים
for (const watchRangeStr in WATCH_RANGES) {
const watchRange = sheet.getRange(watchRangeStr);
const watchStartRow = watchRange.getRow();
const watchStartCol = watchRange.getColumn();
const watchEndRow = watchStartRow + watchRange.getNumRows() - 1;
const watchEndCol = watchStartCol + watchRange.getNumColumns() - 1;
const editedRow = range.getRow();
const editedCol = range.getColumn();
Logger.log('Checking range: ' + watchRangeStr);
Logger.log('Edited Row: ' + editedRow + ', Edited Column: ' + editedCol);
Logger.log('Watch Range - Start Row: ' + watchStartRow + ', Start Col: ' + watchStartCol);
Logger.log('Watch Range - End Row: ' + watchEndRow + ', End Col: ' + watchEndCol);
// בדיקה אם התא שהשתנה נמצא בתוך טווח המעקב הנוכחי
if (editedRow >= watchStartRow && editedRow <= watchEndRow &&
editedCol >= watchStartCol && editedCol <= watchEndCol) {
Logger.log('Edit is within the watch range: ' + watchRangeStr);
// יצירת תא הדגל עבור טווח זה
const rangeIndex = Object.keys(WATCH_RANGES).indexOf(watchRangeStr); // יצירת אינדקס
const flagCell = `${FLAG_CELL_PREFIX}${rangeIndex + 1}`;
// אם תא הדגל לא קיים, יש ליצור אותו ולהגדיר לו ערך ראשוני
if (!flagsSheet.getRange(flagCell).getValue()) {
flagsSheet.getRange(flagCell).setValue(false);
}
// קריאה לסטטוס שליחת המייל
const emailSent = flagsSheet.getRange(flagCell).getValue();
Logger.log('Email sent status for ' + watchRangeStr + ': ' + emailSent);
// אם המייל לא נשלח עדיין
if (!emailSent) {
Logger.log("Sending email for range: " + watchRangeStr);
const emailDetails = WATCH_RANGES[watchRangeStr];
// שליחת מייל
MailApp.sendEmail({
to: emailDetails.email,
subject: emailDetails.email_subject,
body: emailDetails.email_body
});
Logger.log("Email sent successfully for range: " + watchRangeStr);
// עדכון דגל שנשלח מייל
flagsSheet.getRange(flagCell).setValue(true);
Logger.log('Flag updated to true (email sent) for range: ' + watchRangeStr);
} else {
Logger.log('Email already sent for range ' + watchRangeStr + ', skipping email sending.');
}
} else {
Logger.log('Edit is not within the watch range: ' + watchRangeStr);
}
}
} else {
Logger.log('Edit was made in a different sheet, not ' + SHEET_NAME);
}
}
```
מעכשיו, תהיו הראשונים לקבל את כל העדכונים, החדשות, ההפתעות בלעדיות, והתכנים הכי חמים שלנו בפרוג!
חלה שגיאה בשליחה. נסו שוב!
לוח לימודים
מסלולי לימוד שאפשר לההצטרף
אליהם ממש עכשיו:
14.05
ט"ז אייר
נפתחה ההרשמה!
קורס עיצוב גרפי ודיגיטל
המסלול המקיף!
18.05
כ' אייר
נפתחה ההרשמה!
קורס עימוד תורני
מותאם לאברכים!
22.05
כ"ד אייר
נפתחה ההרשמה!
קורס עיצוב ואדריכלות פנים
המסלול המקיף ותכנים
24.06
ל' סיוון
הטבת ענק לירושלמים!
קורס בוטים ואוטומציות למתכנתים
מתכנתים וגם ירושלמים? פרוג בשיתוף פעולה עם מרכז כיוון ירושלים בהנחות ענק בלעדיות - ולמספר מקומות מוגבל!
קורס מקוצר ומפוצץ תוכן!
24.06
ל' סיוון
נפתחה ההרשמה!
קורס מאסטר בשיווק דיגיטלי
מפוצץ תוכן!
24.06
ל' סיוון
נפתחה ההרשמה!
קורס צילום אירועים וסטודיו
המסלול לגברים
תהילים פרק צה
א לְכוּ נְרַנְּנָה לַיי נָרִיעָה לְצוּר יִשְׁעֵנוּ:ב נְקַדְּמָה פָנָיו בְּתוֹדָה בִּזְמִרוֹת נָרִיעַ לוֹ:ג כִּי אֵל גָּדוֹל יי וּמֶלֶךְ גָּדוֹל עַל כָּל אֱלֹהִים:ד אֲשֶׁר בְּיָדוֹ מֶחְקְרֵי אָרֶץ וְתוֹעֲפוֹת הָרִים לוֹ:ה אֲשֶׁר לוֹ הַיָּם וְהוּא עָשָׂהוּ וְיַבֶּשֶׁת יָדָיו יָצָרוּ:ו בֹּאוּ נִשְׁתַּחֲוֶה וְנִכְרָעָה נִבְרְכָה לִפְנֵי יי עֹשֵׂנוּ:ז כִּי הוּא אֱלֹהֵינוּ וַאֲנַחְנוּ עַם מַרְעִיתוֹ וְצֹאן יָדוֹ הַיּוֹם אִם בְּקֹלוֹ תִשְׁמָעוּ:ח אַל תַּקְשׁוּ לְבַבְכֶם כִּמְרִיבָה כְּיוֹם מַסָּה בַּמִּדְבָּר:ט אֲשֶׁר נִסּוּנִי אֲבוֹתֵיכֶם בְּחָנוּנִי גַּם רָאוּ פָעֳלִי:י אַרְבָּעִים שָׁנָה אָקוּט בְּדוֹר וָאֹמַר עַם תֹּעֵי לֵבָב הֵם וְהֵם לֹא יָדְעוּ דְרָכָי:יא אֲשֶׁר נִשְׁבַּעְתִּי בְאַפִּי אִם יְבֹאוּן אֶל מְנוּחָתִי: