समझिए
1. ज़रूरतें
- Microsoft 365 बिज़नेस या एजुकेशन अकाउंट (Office Scripts हर प्लान में नहीं — देखें कि Automate टैब दिखता है या नहीं)।
- वर्कबुक OneDrive for Business या SharePoint में सेव हो।
- Excel on the web में चलता है, और बिज़नेस अकाउंट के लिए नए Excel डेस्कटॉप वर्ज़न में भी।
अगर आपके पास सिर्फ़ पर्सनल/होम अकाउंट है या फ़ाइलें अपनी डिस्क पर हैं, तो इसकी जगह VBA (मॉड्यूल 2) या Python + Task Scheduler (लेसन 1) इस्तेमाल करें।
2. Office Scripts बनाम VBA
| VBA | Office Scripts | |
|---|---|---|
| भाषा | VBA | TypeScript (टाइप वाली JavaScript) |
| कहाँ चलता है | Excel डेस्कटॉप | Excel on the web (और बिज़नेस अकाउंट के लिए डेस्कटॉप) |
| कहाँ रखा जाता है | .xlsm के अंदर | आपके OneDrive में, किसी भी वर्कबुक पर चलता है |
| बिना PC के शेड्यूल पर चल सकता है | नहीं | हाँ, Power Automate से |
| Outlook, डिस्क की फ़ाइलें, दूसरे ऐप | हाँ (डेस्कटॉप) | नहीं — वह हिस्सा Power Automate करता है |
3. पहली स्क्रिप्ट रिकॉर्ड करें
Automate टैब → Record Actions → हेडर फ़ॉर्मेट करें, चौड़ाई सेट करें → Stop। Excel आपके लिए स्क्रिप्ट लिख देता है — macro recorder वाला ही आइडिया। कोड देखने के लिए Edit पर क्लिक करें।
4. स्क्रिप्ट की बनावट
हर स्क्रिप्ट में एक main फ़ंक्शन होता है। Excel उसमें वर्कबुक देता है:
function main(workbook: ExcelScript.Workbook) {
const sheet = workbook.getWorksheet("Data");
sheet.getRange("A1").setValue("Updated by Office Script");
}
पैटर्न: कुछ get करो (getWorksheet, getRange, getValues) और कुछ set करो (setValue, setValues, setColor)। Apps Script से काफ़ी मिलता-जुलता।
5. काम की स्क्रिप्ट: शीट फ़ॉर्मेट करो और टोटल लौटाओ
function main(workbook: ExcelScript.Workbook): number {
const sheet = workbook.getWorksheet("Data");
if (!sheet) throw new Error("Sheet 'Data' not found");
const used = sheet.getUsedRange();
if (!used) return 0; // empty sheet
const values = used.getValues();
// Total of column E (index 4), skipping the header row
let total = 0;
for (let i = 1; i < values.length; i++) {
total += Number(values[i][4]) || 0;
}
// Header style
const header = used.getRow(0);
header.getFormat().getFont().setBold(true);
header.getFormat().getFont().setColor("#FFFFFF");
header.getFormat().getFill().setColor("#1F4E78");
used.getFormat().autofitColumns();
sheet.getFreezePanes().freezeRows(1);
return total;
}
getValues()2D array लौटाता है, बिल्कुल Apps Script की तरह।main(...)के बाद: numberका मतलब स्क्रिप्ट एक नंबर लौटाती है। Power Automate अगले स्टेप में वह वैल्यू इस्तेमाल कर सकता है।- दोनों
ifजाँचें ग़ायब या खाली शीट को संभालती हैं, ताकि फ़्लो को क्रैश की जगह साफ़ मैसेज मिले। - जाँचने के लिए Code Editor में Run पर क्लिक करें।
6. Power Automate से शेड्यूल करें
make.powerautomate.com पर → Create → Scheduled cloud flow:
- Recurrence — हर 1 Week, Monday को, घंटा 9, टाइम ज़ोन (UTC+05:30) Chennai, Kolkata, Mumbai, New Delhi।
- Excel Online (Business) → Run script — Location (OneDrive for Business), Document Library, File और Script चुनें।
- Office 365 Outlook → Send an email (V2) — To: मालिक; Subject:
Weekly sales total; Body: "Total sales: " और Run script स्टेप के dynamic content से result चुनें। - Save → अभी आज़माने के लिए Test → Manually।
वर्कबुक खुली होना ज़रूरी नहीं और कोई कंप्यूटर चालू होना ज़रूरी नहीं।
7. स्क्रिप्ट में वैल्यू भेजना
workbook के बाद पैरामीटर जोड़ें, Power Automate हर एक के लिए बॉक्स दिखाता है:
function main(workbook: ExcelScript.Workbook, minAmount: number): string {
const used = workbook.getWorksheet("Data")?.getUsedRange();
if (!used) return "No data";
const values = used.getValues();
const big = values.slice(1).filter(r => Number(r[4]) >= minAmount);
return `${big.length} sales of ${minAmount} or more`;
}
8. दूसरे काम के ट्रिगर
Recurrence की जगह फ़्लो SharePoint फ़ोल्डर में फ़ाइल जुड़ने पर, अटैचमेंट वाला ईमेल आने पर, Microsoft Form सबमिट होने पर, या Power Automate मोबाइल ऐप के बटन से शुरू हो सकता है। Run script स्टेप वही रहता है।
9. सीमाएँ जो जाननी चाहिए
Power Automate से चलने वाली स्क्रिप्ट की समय सीमा छोटी होती है (कुछ मिनट) और रोज़ के रन की सीमा भी, इसलिए उन्हें केंद्रित रखें — फ़ॉर्मेट करो, सारांश बनाओ, वैल्यू लौटाओ। भारी डेटा का काम Power Query या Python में करें।
आम गलतियाँ
वर्कबुक लोकल डिस्क पर सेव होना (Run script उसे नहीं देख सकता)। Recurrence में गलत टाइम ज़ोन। एक getValues की जगह हर सेल पर getValue वाले लंबे लूप (धीमे, Apps Script जैसे ही)। उम्मीद करना कि स्क्रिप्ट खुद ईमेल भेजेगी — वह Power Automate करता है।