fx Google Apps Script for Sheets
ENहिन्दी

Triggers: onOpen, onEdit, time-driven (रोज़ सुबह 9 बजे रिपोर्ट)

⏱ 15 min

आप क्या सीखेंगे

  • दो तरह के ट्रिगर
  • onOpen — अपना मेन्यू
  • onEdit — अपने आप टाइमस्टैम्प

समझिए

1. दो तरह के ट्रिगर

Simple triggers Installable triggers
कैसे सेट होते हैं बस फ़ंक्शन का नाम onOpen, onEdit रखकर Triggers पेज या कोड से
ईमेल भेज सकते हैं, दूसरी फ़ाइलें खोल सकते हैं नहीं हाँ (आपकी अनुमति से चलते हैं)
समय आधारित नहीं हाँ
किसके लिए अच्छे मेन्यू, छोटे एडिट रिपोर्ट, अलर्ट, शेड्यूल

2. onOpen — अपना मेन्यू

function onOpen() {
  SpreadsheetApp.getUi()
    .createMenu('ExcelWalaa Tools')
    .addItem('Calculate GST', 'fastGST')
    .addItem('Build reorder list', 'buildReorderList')
    .addSeparator()
    .addItem('Send stock alert', 'sendStockAlert')
    .addToUi();
}

शीट रीलोड करें — Help के बगल में नया मेन्यू दिखता है। दूसरा आर्ग्युमेंट फ़ंक्शन का नाम टेक्स्ट के रूप में है।

3. onEdit — अपने आप टाइमस्टैम्प

जब कोई ऑर्डर का Status (कॉलम D) बदले, तो कॉलम E में तारीख़ और समय लिखो:

function onEdit(e) {
  const range = e.range;
  const sheet = range.getSheet();
  if (sheet.getName() !== 'Orders') return;
  if (range.getColumn() !== 4 || range.getRow() < 2) return;

  const stamp = range.getValue() === '' ? '' : new Date();
  sheet.getRange(range.getRow(), 5).setValue(stamp);
}
  • e event ऑब्जेक्ट है: e.range (एडिट हुआ सेल), e.value (नई वैल्यू), e.oldValue।
  • जिस एडिट से मतलब नहीं, उस पर हमेशा जल्दी बाहर निकलें (return) — onEdit फ़ाइल के हर एडिट पर चलता है।
  • स्क्रिप्ट से हुए बदलाव पर onEdit नहीं चलता। एक साथ कई सेल पेस्ट होने पर e.range सबको कवर करता है, पर यह कोड सिर्फ़ पहली रो पर स्टैम्प लगाता है — ज़्यादा चाहिए तो रो पर लूप चलाएँ।
  • एडिटर में onEdit पर Run न दबाएँ — वहाँ e नहीं होता, इसलिए एरर आता है। शीट एडिट करके जाँचें।

4. Time-driven ट्रिगर — रोज़ सुबह 9 बजे रिपोर्ट

पहले काम लिखें:

function dailyReport() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const data = ss.getSheetByName('Data').getDataRange().getValues();
  data.shift();
  const low = data.filter(r => Number(r[1]) < 5).length;
  ss.getSheetByName('Log').appendRow([new Date(), 'Items below reorder level', low]);
}

appendRow आख़िरी भरी रो के बाद एक रो जोड़ता है — लॉग के लिए बिल्कुल सही।

विकल्प A — Triggers पेज (सबसे आसान): बाईं साइडबार ⏰ Triggers → Add Trigger → फ़ंक्शन dailyReport → event source Time-driven → Day timer → 9am to 10am → Save।

विकल्प B — कोड में (एक बार चलाएँ):

function createDailyTrigger() {
  ScriptApp.getProjectTriggers()
    .filter(t => t.getHandlerFunction() === 'dailyReport')
    .forEach(t => ScriptApp.deleteTrigger(t));          // avoid duplicates

  ScriptApp.newTrigger('dailyReport')
    .timeBased()
    .everyDays(1)
    .atHour(9)
    .create();
}

5. समय की बारीकियाँ

  • Google रोज़ाना ट्रिगर चुने हुए घंटे के अंदर कभी भी चलाता है (जैसे 9:00–10:00), किसी सटीक मिनट पर नहीं।
  • घंटा स्क्रिप्ट के टाइम ज़ोन से चलता है: Project Settings (⚙️) → Time zone → (GMT+05:30) India Standard Time सेट करें।
  • दूसरे शेड्यूल: .everyHours(1), .everyMinutes(15), .onWeekDay(ScriptApp.WeekDay.MONDAY).atHour(9)।

6. जब कुछ गड़बड़ हो

फ़ेल हुए ट्रिगर रन Executions (बाईं साइडबार) में दिखते हैं, और Google आपको फ़ेलियर का सारांश ईमेल करता है। एरर को शीट में लॉग करने के लिए काम को try { … } catch (err) { … } में लपेटें।

आम गलतियाँ

सादे onEdit में ईमेल कोड डालना (चुपचाप फ़ेल होता है — इसकी जगह installable "On edit" ट्रिगर लगाएँ)। सेटअप फ़ंक्शन बार-बार चलाकर एक ही टाइम ट्रिगर कई बार बनाना। गलत टाइम ज़ोन, जिससे "9 AM" भारत में सुबह 3:30 बजे चलता है।

अभ्यास

mediumअपनी शीट में ExcelWalaa Tools मेन्यू जोड़ें। onEdit टाइमस्टैम्प वाली Orders शीट बनाएँ। dailyReport को टाइम ट्रिगर से सेट करें, फिर Triggers पेज से टेस्टिंग के लिए हर घंटे चलाएँ, Log शीट जाँचें, और वापस रोज़ाना पर सेट करें।
onOpen से menu बनाएँ। onEdit(e) में e, Orders sheet, header row और edited column जाँचकर timestamp लिखें। dailyReport का एक time-driven trigger रखें। Test में Log row जाँचें, hourly trigger हटाएँ और केवल daily trigger रखें। Time-driven execution एक time window में होता है।

प्रश्नोत्तरी

क्या simple onEdit ट्रिगर ईमेल भेज सकता है?
नहीं
रोज़ 9 बजे वाला ट्रिगर कितना सटीक है?
9 और 10 के बीच कभी भी चलता है
appendRow क्या करता है?
आख़िरी भरी रो के बाद एक रो जोड़ता है
Triggers: onOpen, onEdit, time-driven (रोज़ सुबह 9 बजे रिपोर्ट) · हिंदी | ExcelWalaa