אני מכירה מייק אבל זה לא עולה יקריש איפה לעשות את זה באופן חינמי באוטומציה?
ניסיתי בזפייר ומייק אבל נראה לי שיש הגבלת הודעות, נכון?
יש מערכת אחרת חינמית ?
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);
}
}
```
rhon.co.il
מעכשיו, תהיו הראשונים לקבל את כל העדכונים, החדשות, ההפתעות בלעדיות, והתכנים הכי חמים שלנו בפרוג!
חלה שגיאה בשליחה. נסו שוב!
לוח לימודים
מסלולי לימוד שאפשר להצטרף
אליהם ממש עכשיו:
תהילים פרק כה
אלְדָוִד אֵלֶיךָ יי נַפְשִׁי אֶשָּׂא:באֱלֹהַי בְּךָ בָטַחְתִּי אַל אֵבוֹשָׁה אַל יַעַלְצוּ אֹיְבַי לִי:גגַּם כָּל קוֶֹיךָ לֹא יֵבֹשׁוּ יֵבֹשׁוּ הַבּוֹגְדִים רֵיקָם:דדְּרָכֶיךָ יי הוֹדִיעֵנִי אֹרְחוֹתֶיךָ לַמְּדֵנִי:ההַדְרִיכֵנִי בַאֲמִתֶּךָ וְלַמְּדֵנִי כִּי אַתָּה אֱלֹהֵי יִשְׁעִי אוֹתְךָ קִוִּיתִי כָּל הַיּוֹם:וזְכֹר רַחֲמֶיךָ יי וַחֲסָדֶיךָ כִּי מֵעוֹלָם הֵמָּה:זחַטֹּאות נְעוּרַי וּפְשָׁעַי אַל תִּזְכֹּר כְּחַסְדְּךָ זְכָר לִי אַתָּה לְמַעַן טוּבְךָ יי:חטוֹב וְיָשָׁר יי עַל כֵּן יוֹרֶה חַטָּאִים בַּדָּרֶךְ:טיַדְרֵךְ עֲנָוִים בַּמִּשְׁפָּט וִילַמֵּד עֲנָוִים דַּרְכּוֹ:יכָּל אָרְחוֹת יי חֶסֶד וֶאֱמֶת לְנֹצְרֵי בְרִיתוֹ וְעֵדֹתָיו:יאלְמַעַן שִׁמְךָ יי וְסָלַחְתָּ לַעֲוֹנִי כִּי רַב הוּא:יבמִי זֶה הָאִישׁ יְרֵא יי יוֹרֶנּוּ בְּדֶרֶךְ יִבְחָר:יגנַפְשׁוֹ בְּטוֹב תָּלִין וְזַרְעוֹ יִירַשׁ אָרֶץ:ידסוֹד יי לִירֵאָיו וּבְרִיתוֹ לְהוֹדִיעָם:טועֵינַי תָּמִיד אֶל יי כִּי הוּא יוֹצִיא מֵרֶשֶׁת רַגְלָי:טזפְּנֵה אֵלַי וְחָנֵּנִי כִּי יָחִיד וְעָנִי אָנִי:יזצָרוֹת לְבָבִי הִרְחִיבוּ מִמְּצוּקוֹתַי הוֹצִיאֵנִי:יחרְאֵה עָנְיִי וַעֲמָלִי וְשָׂא לְכָל חַטֹּאותָי:יטרְאֵה אוֹיְבַי כִּי רָבּוּ וְשִׂנְאַת חָמָס שְׂנֵאוּנִי:כשָׁמְרָה נַפְשִׁי וְהַצִּילֵנִי אַל אֵבוֹשׁ כִּי חָסִיתִי בָךְ:כאתֹּם וָיֹשֶׁר יִצְּרוּנִי כִּי קִוִּיתִיךָ:כבפְּדֵה אֱלֹהִים אֶת יִשְׂרָאֵל מִכֹּל צָרוֹתָיו:
הנושאים החמים



Reactions: אבסולוט פרימה בלרינה, חלומות ירוקים, Harmonyapro ועוד 113 משתמשים116 //