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

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

শুরু হচ্ছে

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

এখানে একটি সাধারণ কাস্টম ফাংশন রয়েছে, যার নাম 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. Google পত্রকগুলিতে একটি স্প্রেডশীট তৈরি করুন বা খুলুন৷
  2. মেনু আইটেম এক্সটেনশন > Apps স্ক্রিপ্ট নির্বাচন করুন।
  3. স্ক্রিপ্ট এডিটরে যেকোনো কোড মুছুন। উপরের DOUBLE ফাংশনের জন্য, স্ক্রিপ্ট এডিটরে কোডটি কপি করে পেস্ট করুন।
  4. শীর্ষে, সংরক্ষণ করুন ক্লিক করুন।

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

Google Workspace Marketplaceথেকে একটি কাস্টম ফাংশন পাওয়া

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

  1. Google পত্রকগুলিতে একটি স্প্রেডশীট তৈরি করুন বা খুলুন৷
  2. শীর্ষে, অ্যাড-অনগুলিতে ক্লিক করুন > অ্যাড-অনগুলি পান
  3. একবার Google Workspace Marketplace খুললে, উপরের ডানদিকের কোণায় অনুসন্ধান বাক্সে ক্লিক করুন।
  4. "কাস্টম ফাংশন" টাইপ করুন এবং এন্টার টিপুন।
  5. আপনি যদি একটি কাস্টম ফাংশন অ্যাড-অন খুঁজে পান যা আপনি আগ্রহী, এটি ইনস্টল করতে ইনস্টল ক্লিক করুন।
  6. একটি ডায়ালগ বক্স আপনাকে বলতে পারে যে অ্যাড-অনটির অনুমোদন প্রয়োজন৷ যদি তাই হয়, বিজ্ঞপ্তিটি মনোযোগ সহকারে পড়ুন, তারপরে অনুমতি দিন ক্লিক করুন।
  7. অ্যাড-অন স্প্রেডশীটে উপলব্ধ হয়। একটি ভিন্ন স্প্রেডশীটে অ্যাড-অন ব্যবহার করতে, অন্য স্প্রেডশিটটি খুলুন এবং উপরে, অ্যাড-অন > অ্যাড-অনগুলি পরিচালনা করুন-এ ক্লিক করুন। আপনি যে অ্যাড-অনটি ব্যবহার করতে চান সেটি খুঁজুন এবং Options > এই ডকুমেন্টে ব্যবহার করুন ক্লিক করুন।

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

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

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

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

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

নামকরণ

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

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

যুক্তি

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

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


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

মান ফেরত দিন

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

  • যদি একটি কাস্টম ফাংশন একটি মান প্রদান করে, তাহলে যে কক্ষ থেকে ফাংশনটি কল করা হয়েছিল সেখানে মানটি প্রদর্শিত হয়৷
  • যদি একটি কাস্টম ফাংশন মানগুলির একটি দ্বি-মাত্রিক বিন্যাস প্রদান করে, যতক্ষণ পর্যন্ত সেই কোষগুলি খালি থাকে ততক্ষণ মানগুলি সংলগ্ন কক্ষগুলিতে উপচে পড়ে৷ যদি এটি অ্যারেকে বিদ্যমান ঘরের বিষয়বস্তু ওভাররাইট করতে দেয়, তবে কাস্টম ফাংশন পরিবর্তে একটি ত্রুটি নিক্ষেপ করবে। একটি উদাহরণের জন্য, কাস্টম ফাংশন অপ্টিমাইজ করার বিভাগটি দেখুন।
  • একটি কাস্টম ফাংশন যেগুলিকে একটি মান প্রদান করে সেগুলি ছাড়া অন্য কোষগুলিকে প্রভাবিত করতে পারে না৷ অন্য কথায়, একটি কাস্টম ফাংশন নির্বিচারে কোষগুলি সম্পাদনা করতে পারে না, শুধুমাত্র যে কোষগুলি থেকে এটি বলা হয় এবং তাদের সংলগ্ন কোষগুলি। নির্বিচারে ঘর সম্পাদনা করতে, পরিবর্তে একটি ফাংশন চালানোর জন্য একটি কাস্টম মেনু ব্যবহার করুন।
  • একটি কাস্টম ফাংশন কল অবশ্যই 30 সেকেন্ডের মধ্যে ফিরতে হবে। যদি এটি না হয়, সেলটি একটি ত্রুটি প্রদর্শন করবে: Internal error executing the custom function.

তথ্যের ধরণ

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

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

স্বয়ংসম্পূর্ণ

Google Sheets কাস্টম ফাংশনের জন্য স্বয়ংসম্পূর্ণ সমর্থন করে অনেকটা বিল্ট-ইন ফাংশনের মতো। আপনি একটি কক্ষে একটি ফাংশনের নাম টাইপ করার সাথে সাথে আপনি অন্তর্নির্মিত এবং কাস্টম ফাংশনের একটি তালিকা দেখতে পাবেন যা আপনি যা লিখবেন তার সাথে মেলে।

কাস্টম ফাংশনগুলি এই তালিকায় উপস্থিত হবে যদি তাদের স্ক্রিপ্টে একটি 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 স্ক্রিপ্ট পরিষেবা ব্যবহার করা

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

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

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

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

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

শেয়ারিং

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

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

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

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

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

উদাহরণস্বরূপ, উপরে দেখানো 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 অবজেক্টের মানচিত্র পদ্ধতি ব্যবহার করে কোষের দ্বি-মাত্রিক অ্যারের প্রতিটি মানের উপর পুনরাবৃত্তিমূলকভাবে DOUBLE কল করতে। এটি একটি দ্বি-মাত্রিক অ্যারে প্রদান করে যা ফলাফল ধারণ করে। এইভাবে, আপনি শুধুমাত্র একবার DOUBLE কল করতে পারেন কিন্তু এটিকে একবারে প্রচুর সংখ্যক কক্ষের জন্য গণনা করতে পারেন, যেমনটি নীচের স্ক্রিনশটে দেখানো হয়েছে। ( map কলের পরিবর্তে স্টেটমেন্ট if আপনি নেস্টেডের সাথে একই জিনিসটি সম্পাদন করতে পারেন।)

একইভাবে, নীচের কাস্টম ফাংশনটি দক্ষতার সাথে ইন্টারনেট থেকে লাইভ বিষয়বস্তু নিয়ে আসে এবং শুধুমাত্র একটি একক ফাংশন কলের সাথে ফলাফলের দুটি কলাম প্রদর্শন করতে একটি দ্বি-মাত্রিক অ্যারে ব্যবহার করে। প্রতিটি কক্ষের নিজস্ব ফাংশন কলের প্রয়োজন হলে, অপারেশনটি যথেষ্ট বেশি সময় নেবে, যেহেতু Apps স্ক্রিপ্ট সার্ভারকে প্রতিবার 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;
}

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