গুগল শীটে কাস্টম ফাংশন

গুগল শিটস শত শত বিল্ট-ইন ফাংশন অফার করে যেমন AVERAGE , SUM , এবং VLOOKUP । যখন এগুলো আপনার প্রয়োজনের জন্য যথেষ্ট না হয়, তখন আপনি কাস্টম ফাংশন লেখার জন্য গুগল অ্যাপস স্ক্রিপ্ট ব্যবহার করতে পারেন এবং তারপর বিল্ট-ইন ফাংশনের মতো গুগল শিটসে ব্যবহার করতে পারেন।

কাস্টম ফাংশনের উদাহরণের জন্য, নিম্নলিখিত টিউটোরিয়ালগুলি দেখুন:

শুরু করা

কাস্টম ফাংশনগুলি স্ট্যান্ডার্ড জাভাস্ক্রিপ্ট ব্যবহার করে তৈরি করা হয়। আপনি যদি জাভাস্ক্রিপ্টে নতুন হন, তাহলে কোডেক্যাডেমি নতুনদের জন্য একটি দুর্দান্ত কোর্স অফার করে। (দ্রষ্টব্য: এই কোর্সটি গুগল দ্বারা তৈরি করা হয়নি এবং এর সাথে সম্পর্কিতও নয়।)

এখানে DOUBLE নামে একটি সহজ কাস্টম ফাংশন রয়েছে, যা একটি ইনপুট মানকে 2 দিয়ে গুণ করে:

/**
 * Multiplies an input value by 2.
 * @param {number} input The number to double.
 * @return The input multiplied by 2.
 * @customfunction
*/
function DOUBLE(input) {
  return input * 2;
}

যদি আপনি জাভাস্ক্রিপ্ট লিখতে না জানেন এবং শেখার সময় না পান, তাহলে অ্যাড-অন স্টোরটি দেখুন যে অন্য কেউ ইতিমধ্যেই আপনার প্রয়োজনীয় কাস্টম ফাংশনটি তৈরি করে ফেলেছে কিনা।

একটি কাস্টম ফাংশন তৈরি করা হচ্ছে

একটি কাস্টম ফাংশন লিখতে:

  1. গুগল শিটে একটি স্প্রেডশিট তৈরি করুন বা খুলুন।
  2. মেনু আইটেম এক্সটেনশন > অ্যাপস স্ক্রিপ্ট নির্বাচন করুন।
  3. স্ক্রিপ্ট এডিটরে যেকোনো কোড মুছে ফেলুন। উপরের DOUBLE ফাংশনের জন্য, কোডটি কপি করে স্ক্রিপ্ট এডিটরে পেস্ট করুন।
  4. উপরে, করুন এ ক্লিক করুন।

এখন আপনি কাস্টম ফাংশনটি ব্যবহার করতে পারেন।

গুগল ওয়ার্কস্পেস মার্কেটপ্লেস থেকে একটি কাস্টম ফাংশন পাওয়া

গুগল ওয়ার্কস্পেস মার্কেটপ্লেস গুগল শিটের জন্য অ্যাড-অন হিসেবে বেশ কিছু কাস্টম ফাংশন অফার করে। এই অ্যাড-অনগুলি ব্যবহার বা অন্বেষণ করতে:

  1. গুগল শিটে একটি স্প্রেডশিট তৈরি করুন বা খুলুন।
  2. উপরে, অ্যাড-অন > অ্যাড-অন পান ক্লিক করুন।
  3. গুগল ওয়ার্কস্পেস মার্কেটপ্লেসটি খোলার পরে, উপরের ডানদিকে কোণায় অনুসন্ধান বাক্সে ক্লিক করুন।
  4. "custom function" টাইপ করুন এবং এন্টার টিপুন।
  5. যদি আপনি এমন কোনও কাস্টম ফাংশন অ্যাড-অন খুঁজে পান যা আপনার আগ্রহের, তাহলে এটি ইনস্টল করতে ইনস্টল করুন এ ক্লিক করুন।
  6. একটি ডায়ালগ বক্স আপনাকে বলতে পারে যে অ্যাড-অনটির অনুমোদন প্রয়োজন। যদি তাই হয়, তাহলে নোটিশটি মনোযোগ সহকারে পড়ুন, তারপর অনুমতি দিন ক্লিক করুন।
  7. অ্যাড-অনটি স্প্রেডশিটে উপলব্ধ হবে। অন্য স্প্রেডশিটে অ্যাড-অনটি ব্যবহার করতে, অন্য স্প্রেডশিটটি খুলুন এবং উপরে, অ্যাড-অন > অ্যাড-অন পরিচালনা করুন এ ক্লিক করুন। আপনি যে অ্যাড-অনটি ব্যবহার করতে চান তা খুঁজুন এবং বিকল্পগুলি > এই নথিতে ব্যবহার করুন এ ক্লিক করুন।

একটি কাস্টম ফাংশন ব্যবহার করা

একবার আপনি একটি কাস্টম ফাংশন লিখে ফেললে অথবা Google Workspace Marketplace থেকে একটি ইনস্টল করলে, এটি একটি বিল্ট-ইন ফাংশনের মতোই ব্যবহার করা সহজ:

  1. আপনি যে ঘরে ফাংশনটি ব্যবহার করতে চান সেখানে ক্লিক করুন।
  2. একটি সমান চিহ্ন ( = ) টাইপ করুন, তারপর ফাংশনের নাম এবং যেকোনো ইনপুট মান লিখুন — উদাহরণস্বরূপ, =DOUBLE(A1) — এবং এন্টার টিপুন।
  3. ঘরটি মুহূর্তের জন্য Loading... প্রদর্শন করবে, তারপর ফলাফলটি ফেরত দেবে।

কাস্টম ফাংশনের জন্য নির্দেশিকা

আপনার নিজস্ব কাস্টম ফাংশন লেখার আগে, কিছু নির্দেশিকা জানা উচিত।

নামকরণ

জাভাস্ক্রিপ্ট ফাংশনের নামকরণের জন্য স্ট্যান্ডার্ড কনভেনশন ছাড়াও, নিম্নলিখিত বিষয়গুলি সম্পর্কে সচেতন থাকুন:

  • একটি কাস্টম ফাংশনের নাম অবশ্যই SUM() মতো বিল্ট-ইন ফাংশনের নাম থেকে আলাদা হতে হবে।
  • একটি কাস্টম ফাংশনের নাম আন্ডারস্কোর ( _ ) দিয়ে শেষ হতে পারে না, যা অ্যাপস স্ক্রিপ্টে একটি ব্যক্তিগত ফাংশনকে নির্দেশ করে।
  • একটি কাস্টম ফাংশনের নাম সিনট্যাক্স function myFunction() দিয়ে ঘোষণা করতে হবে, var myFunction = new Function() দিয়ে নয়।
  • বড় হাতের অক্ষর কোন ব্যাপার না, যদিও স্প্রেডশিট ফাংশনের নাম ঐতিহ্যগতভাবে বড় হাতের অক্ষরে লেখা হয়।

যুক্তি

একটি বিল্ট-ইন ফাংশনের মতো, একটি কাস্টম ফাংশন আর্গুমেন্টগুলিকে ইনপুট মান হিসেবে নিতে পারে:

  • যদি আপনি আপনার ফাংশনটিকে একটি একক ঘরের রেফারেন্স দিয়ে আর্গুমেন্ট হিসেবে ডাকেন (যেমন =DOUBLE(A1) ), তাহলে আর্গুমেন্টটি হবে ঘরের মান।
  • যদি আপনি আপনার ফাংশনকে বিভিন্ন কোষের রেফারেন্স সহ একটি আর্গুমেন্ট হিসেবে ডাকেন (যেমন =DOUBLE(A1:B10) ), তাহলে আর্গুমেন্টটি কোষের মানগুলির একটি দ্বি-মাত্রিক অ্যারে হবে। উদাহরণস্বরূপ, নীচের স্ক্রিনশটে, =DOUBLE(A1:B2) এর আর্গুমেন্টগুলিকে Apps Script দ্বারা double([[1,3],[2,4]]) হিসাবে ব্যাখ্যা করা হয়েছে। মনে রাখবেন যে উপরে থেকে DOUBLE এর নমুনা কোডটি একটি অ্যারেকে ইনপুট হিসাবে গ্রহণ করার জন্য পরিবর্তন করতে হবে।


  • কাস্টম ফাংশন আর্গুমেন্ট অবশ্যই ডিটারমিনিস্টিক হতে হবে। অর্থাৎ, বিল্ট-ইন স্প্রেডশিট ফাংশন যা প্রতিবার গণনা করার সময় ভিন্ন ফলাফল প্রদান করে — যেমন NOW() বা RAND() — সেগুলিকে কাস্টম ফাংশনে আর্গুমেন্ট হিসেবে অনুমোদিত নয়। যদি একটি কাস্টম ফাংশন এই অস্থির বিল্ট-ইন ফাংশনগুলির একটির উপর ভিত্তি করে একটি মান প্রদান করার চেষ্টা করে, তাহলে এটি অনির্দিষ্টকালের জন্য Loading... প্রদর্শন করবে।

মান ফেরত দিন

প্রতিটি কাস্টম ফাংশনকে প্রদর্শনের জন্য একটি মান প্রদান করতে হবে, যেমন:

  • যদি একটি কাস্টম ফাংশন একটি মান প্রদান করে, তাহলে মানটি সেই কক্ষে প্রদর্শিত হবে যেখান থেকে ফাংশনটি কল করা হয়েছিল।
  • যদি একটি কাস্টম ফাংশন দ্বি-মাত্রিক মানের অ্যারে প্রদান করে, তাহলে যতক্ষণ পর্যন্ত ঐ ঘরগুলি খালি থাকে ততক্ষণ পর্যন্ত মানগুলি সংলগ্ন কোষগুলিতে ওভারফ্লো হয়। যদি এর ফলে অ্যারেটি বিদ্যমান কোষের বিষয়বস্তুগুলিকে ওভাররাইট করে, তাহলে কাস্টম ফাংশনটি পরিবর্তে একটি ত্রুটি নিক্ষেপ করবে। উদাহরণস্বরূপ, কাস্টম ফাংশন অপ্টিমাইজ করার বিভাগটি দেখুন।
  • একটি কাস্টম ফাংশন সেইসব কোষগুলিকে প্রভাবিত করতে পারে না যেখানে এটি একটি মান প্রদান করে। অন্য কথায়, একটি কাস্টম ফাংশন ইচ্ছামত কোষ সম্পাদনা করতে পারে না, শুধুমাত্র যে কোষগুলি থেকে এটি ডাকা হয় এবং তাদের সংলগ্ন কোষগুলি। ইচ্ছামত কোষ সম্পাদনা করতে, পরিবর্তে একটি ফাংশন চালানোর জন্য একটি কাস্টম মেনু ব্যবহার করুন।
  • একটি কাস্টম ফাংশন কল অবশ্যই 30 সেকেন্ডের মধ্যে ফিরে আসতে হবে। যদি তা না হয়, তাহলে সেলটি #ERROR! প্রদর্শন করবে এবং সেল নোটটি Exceeded maximum execution time (line 0).

ডেটা টাইপ

গুগল শিটস ডেটার প্রকৃতির উপর নির্ভর করে বিভিন্ন ফর্ম্যাটে ডেটা সংরক্ষণ করে। যখন এই মানগুলি কাস্টম ফাংশনে ব্যবহার করা হয়, তখন অ্যাপস স্ক্রিপ্ট এগুলিকে জাভাস্ক্রিপ্টে উপযুক্ত ডেটা টাইপ হিসাবে বিবেচনা করে। এগুলি হল বিভ্রান্তির সবচেয়ে সাধারণ ক্ষেত্র:

  • পত্রকগুলিতে সময় এবং তারিখগুলি অ্যাপস স্ক্রিপ্টে তারিখের বস্তুতে পরিণত হয়। যদি স্প্রেডশিট এবং স্ক্রিপ্ট বিভিন্ন সময় অঞ্চল ব্যবহার করে (একটি বিরল সমস্যা), তাহলে কাস্টম ফাংশনটিকে ক্ষতিপূরণ দিতে হবে।
  • শীটগুলিতে সময়কালের মানগুলিও Date বস্তুতে পরিণত হয়, তবে তাদের সাথে কাজ করা জটিল হতে পারে
  • অ্যাপস স্ক্রিপ্টে শীটগুলিতে শতাংশের মান দশমিক সংখ্যায় পরিণত হয়। উদাহরণস্বরূপ, 10% মান সহ একটি ঘর অ্যাপস স্ক্রিপ্টে 0.1 হয়ে যায়।

স্বয়ংক্রিয়ভাবে সম্পন্ন করুন

গুগল শিটস কাস্টম ফাংশনের জন্য অটোকম্পলিট সমর্থন করে, ঠিক যেমন বিল্ট-ইন ফাংশনের জন্য। আপনি যখন একটি সেলে একটি ফাংশনের নাম টাইপ করবেন, তখন আপনি বিল্ট-ইন এবং কাস্টম ফাংশনের একটি তালিকা দেখতে পাবেন যা আপনার প্রবেশ করানো জিনিসের সাথে মেলে।

কাস্টম ফাংশনগুলি এই তালিকায় প্রদর্শিত হবে যদি তাদের স্ক্রিপ্টে একটি JsDoc @customfunction ট্যাগ থাকে, যেমনটি নীচের DOUBLE() উদাহরণে দেখানো হয়েছে।

/**
 * Multiplies the input value by 2.
 *
 * @param {number} input The value to multiply.
 * @return The input multiplied by 2.
 * @customfunction
 */
function DOUBLE(input) {
  return input * 2;
}

উন্নত

গুগল অ্যাপস স্ক্রিপ্ট পরিষেবা ব্যবহার করা

কাস্টম ফাংশনগুলি আরও জটিল কাজ সম্পাদনের জন্য নির্দিষ্ট Google Apps স্ক্রিপ্ট পরিষেবাগুলিকে কল করতে পারে। উদাহরণস্বরূপ, একটি কাস্টম ফাংশন একটি ইংরেজি বাক্যাংশকে স্প্যানিশ ভাষায় অনুবাদ করার জন্য ভাষা পরিষেবাকে কল করতে পারে।

অন্যান্য বেশিরভাগ ধরণের অ্যাপ স্ক্রিপ্টের বিপরীতে, কাস্টম ফাংশনগুলি কখনই ব্যবহারকারীদের ব্যক্তিগত ডেটাতে অ্যাক্সেস অনুমোদন করতে বলে না। ফলস্বরূপ, তারা কেবল সেই পরিষেবাগুলিতে কল করতে পারে যেগুলির ব্যক্তিগত ডেটাতে অ্যাক্সেস নেই, বিশেষ করে নিম্নলিখিতগুলি:

সমর্থিত পরিষেবা মন্তব্য
ক্যাশে কাজ করে, কিন্তু কাস্টম ফাংশনে বিশেষভাবে কার্যকর নয়
এইচটিএমএল HTML তৈরি করতে পারে, কিন্তু প্রদর্শন করতে পারে না (খুব কমই কার্যকর)
জেডিবিসি
ভাষা
তালা কাজ করে, কিন্তু কাস্টম ফাংশনে বিশেষভাবে কার্যকর নয়
মানচিত্র দিকনির্দেশনা গণনা করতে পারে, কিন্তু মানচিত্র প্রদর্শন করতে পারে না
বৈশিষ্ট্য getUserProperties() শুধুমাত্র স্প্রেডশিট মালিকের বৈশিষ্ট্য পায়। স্প্রেডশিট সম্পাদকরা একটি কাস্টম ফাংশনে ব্যবহারকারীর বৈশিষ্ট্য সেট করতে পারে না।
স্প্রেডশিট শুধুমাত্র পঠনযোগ্য (বেশিরভাগ get*() পদ্ধতি ব্যবহার করতে পারে, কিন্তু set*() নয়)।
অন্যান্য স্প্রেডশিট ( SpreadsheetApp.openById() অথবা SpreadsheetApp.openByUrl() ) খুলতে পারছি না।
URL ফেচ URL গুলি এনে ওয়েবে রিসোর্স অ্যাক্সেস করুন।
উপযোগিতা
এক্সএমএল

যদি আপনার কাস্টম ফাংশনটি ত্রুটি বার্তাটি দেয় You do not have permission to call X service. , পরিষেবাটির জন্য ব্যবহারকারীর অনুমোদন প্রয়োজন এবং তাই এটি একটি কাস্টম ফাংশনে ব্যবহার করা যাবে না।

উপরে তালিকাভুক্ত পরিষেবাগুলি ছাড়া অন্য কোনও পরিষেবা ব্যবহার করতে, একটি কাস্টম মেনু তৈরি করুন যা একটি কাস্টম ফাংশন লেখার পরিবর্তে একটি অ্যাপস স্ক্রিপ্ট ফাংশন চালায়। মেনু থেকে ট্রিগার করা একটি ফাংশন প্রয়োজনে ব্যবহারকারীর কাছ থেকে অনুমোদন চাইবে এবং ফলস্বরূপ সমস্ত অ্যাপস স্ক্রিপ্ট পরিষেবা ব্যবহার করতে পারবে।

শেয়ার করা

কাস্টম ফাংশনগুলি যে স্প্রেডশিটে তৈরি করা হয়েছিল তার সাথে আবদ্ধ হয়ে শুরু হয়। এর অর্থ হল একটি স্প্রেডশিটে লেখা একটি কাস্টম ফাংশন অন্য স্প্রেডশিটে ব্যবহার করা যাবে না যদি না আপনি নিম্নলিখিত পদ্ধতিগুলির মধ্যে একটি ব্যবহার করেন:

  • স্ক্রিপ্ট এডিটর খুলতে এক্সটেনশন > অ্যাপস স্ক্রিপ্টে ক্লিক করুন, তারপর মূল স্প্রেডশিট থেকে স্ক্রিপ্ট টেক্সটটি কপি করুন এবং অন্য স্প্রেডশিটের স্ক্রিপ্ট এডিটরে পেস্ট করুন।
  • ফাইল > একটি অনুলিপি তৈরি করুন ক্লিক করে কাস্টম ফাংশন ধারণকারী স্প্রেডশিটের একটি অনুলিপি তৈরি করুন। যখন একটি স্প্রেডশিট অনুলিপি করা হয়, তখন এর সাথে সংযুক্ত যেকোনো স্ক্রিপ্টও অনুলিপি করা হয়। যাদের স্প্রেডশিটে অ্যাক্সেস আছে তারা স্ক্রিপ্টটি অনুলিপি করতে পারেন। (যাদের সহযোগীদের শুধুমাত্র দেখার অ্যাক্সেস আছে তারা মূল স্প্রেডশিটে স্ক্রিপ্ট সম্পাদক খুলতে পারবেন না। তবে, যখন তারা একটি অনুলিপি তৈরি করেন, তখন তারা অনুলিপিটির মালিক হন এবং স্ক্রিপ্টটি দেখতে পারেন।)
  • স্ক্রিপ্টটি গুগল শিটস এডিটর অ্যাড-অন হিসেবে প্রকাশ করুন।

অপ্টিমাইজেশন

প্রতিবার যখন কোনও স্প্রেডশিটে কোনও কাস্টম ফাংশন ব্যবহার করা হয়, তখন Google Sheets অ্যাপস স্ক্রিপ্ট সার্ভারে একটি পৃথক কল করে। যদি আপনার স্প্রেডশিটে কয়েক ডজন (অথবা শত শত, অথবা হাজার হাজার!) কাস্টম ফাংশন কল থাকে, তাহলে এই প্রক্রিয়াটি বেশ ধীর হতে পারে। অনেক বা জটিল কাস্টম ফাংশন সহ কিছু প্রকল্পের কার্য সম্পাদনে সাময়িক বিলম্ব হতে পারে।

ফলস্বরূপ, যদি আপনি একটি বৃহৎ পরিসরে ডেটাতে একাধিকবার একটি কাস্টম ফাংশন ব্যবহার করার পরিকল্পনা করেন, তাহলে ফাংশনটি এমনভাবে পরিবর্তন করার কথা বিবেচনা করুন যাতে এটি একটি দ্বি-মাত্রিক অ্যারের আকারে ইনপুট হিসাবে একটি পরিসর গ্রহণ করে, তারপর একটি দ্বি-মাত্রিক অ্যারে প্রদান করে যা উপযুক্ত কোষগুলিতে ওভারফ্লো করতে পারে।

উদাহরণস্বরূপ, উপরে দেখানো DOUBLE() ফাংশনটি একটি একক কোষ বা কোষের পরিসর গ্রহণ করার জন্য নিম্নরূপ পুনর্লিখন করা যেতে পারে:

/**
 * Multiplies the input value by 2.
 *
 * @param {number|Array<Array<number>>} input The value or range of cells
 *     to multiply.
 * @return The input multiplied by 2.
 * @customfunction
 */
function DOUBLE(input) {
  return Array.isArray(input) ?
      input.map(row => row.map(cell => cell * 2)) :
      input * 2;
}

উপরের পদ্ধতিটি জাভাস্ক্রিপ্টের Array object to পদ্ধতির map পদ্ধতি ব্যবহার করে কোষের দ্বি-মাত্রিক অ্যারেতে প্রতিটি সারি পেতে ব্যবহৃত হয়, তারপর প্রতিটি সারির জন্য, এটি প্রতিটি কোষের মান দ্বিগুণ করার জন্য আবার map ব্যবহার করে। এটি একটি দ্বি-মাত্রিক অ্যারে প্রদান করে যার ফলাফল থাকে। এইভাবে, আপনি কেবল একবার DOUBLE কল করতে পারেন তবে এটিকে একসাথে অনেকগুলি কোষের জন্য গণনা করতে দিতে পারেন, যেমনটি নীচের স্ক্রিনশটে দেখানো হয়েছে। (আপনি map কলের পরিবর্তে nested if স্টেটমেন্ট দিয়ে একই জিনিস সম্পন্ন করতে পারেন।)

একইভাবে, নীচের কাস্টম ফাংশনটি দক্ষতার সাথে ইন্টারনেট থেকে লাইভ কন্টেন্ট আনে এবং একটি দ্বি-মাত্রিক অ্যারে ব্যবহার করে শুধুমাত্র একটি ফাংশন কলের মাধ্যমে দুটি কলামের ফলাফল প্রদর্শন করে। যদি প্রতিটি সেলের নিজস্ব ফাংশন কলের প্রয়োজন হয়, তাহলে অপারেশনটি যথেষ্ট বেশি সময় নেবে, কারণ অ্যাপস স্ক্রিপ্ট সার্ভারকে প্রতিবার XML ফিড ডাউনলোড এবং পার্স করতে হবে।

/**
 * Show the title and date for the first page of posts on the
 * Developer blog.
 *
 * @return Two columns of data representing posts on the
 *     Developer blog.
 * @customfunction
 */
function getBlogPosts() {
  var array = [];
  var url = 'https://gsuite-developers.googleblog.com/atom.xml';
  var xml = UrlFetchApp.fetch(url).getContentText();
  var document = XmlService.parse(xml);
  var root = document.getRootElement();
  var atom = XmlService.getNamespace('http://www.w3.org/2005/Atom');
  var entries = document.getRootElement().getChildren('entry', atom);
  for (var i = 0; i < entries.length; i++) {
    var title = entries[i].getChild('title', atom).getText();
    var date = entries[i].getChild('published', atom).getValue();
    array.push([title, date]);
  }
  return array;
}

এই কৌশলগুলি প্রায় যেকোনো কাস্টম ফাংশনে প্রয়োগ করা যেতে পারে যা একটি স্প্রেডশিট জুড়ে বারবার ব্যবহৃত হয়, যদিও বাস্তবায়নের বিবরণ ফাংশনের আচরণের উপর নির্ভর করে পরিবর্তিত হবে।