Contents
Index 🔎︎

# LibreOffice ক্যালকে প্রোগ্রাম করার জন্য অ্যাড-ইন

এড-ইন দ্বারা Calc প্রসারিত করার প্রক্রিয়া যা নিম্নে বিবৃত হয়েছে তা পুরনো হয়। ইন্টারফেইসটি এখনও কার্যকর এবং সমর্থিত, বিদ্যমান এড-ইন দ্বারা উপযুক্ততা নিশ্চিতকরণের জন্য, কিন্তু এড-ইন প্রোগ্রাম করার জন্য আপনার উচিত নতুন API ফাংশন ব্যবহার করা।

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

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

## অ্যাড-ইন ধারনা

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

### শেয়ারকৃত লাইব্রেরীর AddIn DLL এর ফাংশন

একটি ন্যুনতমতে, প্রশাসনিক ফাংশনটি GetFunctionCount এবং GetFunctionData অশ্যই থাকতে হবে। এইগুলি ব্যবহার করে, ফাংশনটি প্যারামিটার টাইপ এবং ফলাফল মান ও নির্ধারণ করা যাবে। ফলাফল মান হিসেবে, ডাবল এবং স্ট্রিং টাইপ সমর্থিত হয়। প্যারামিটার হিসেবে, অতিরিক্ত হিসেবে ঘর এলাকা ডাবল বিন্যাস, স্ট্রিং বিন্যাস, এবং ঘর বিন্যাস সমর্থিত হয়।

প্যারামিটার reference ব্যবহার করে অতিক্রান্ত হয়। ফলে, এই মানের একটি পরিবর্তন ভিত্তিপূর্ণভাবে সম্ভব। যদিও, এইটি LibreOffice Calc তে সমর্থিত নয় কারণ এইটি স্প্রেডশীটের মধ্যে কোন অর্থ তৈরি করে না।

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

ফাংশনগুলো একই সময়ে কল করা হয় এবং তাদের ফলাফল তাৎ‍ক্ষণিকভাবে প্রদান করা হয়। প্রকৃত সময়ের ফাংশনগুলোও (অসমকালীন ফাংশন) সম্ভব; তবে, তাদের জটিলতার কারণে তাদেরকে বিস্তারিত ব্যাখ্যা করা হয় না।

## ইন্টারফেস সম্পর্কিত সাধারণ তথ্য

LibreOffice ক্যালকে সংযোজিত অ্যাড-ইন ফাংশনের সর্বোচ্চ প্যারামিটার সংখ্যা হলো ১৬: প্রদান মান একটি এবং ফাংশনের ইনপুট প্যারামিটার সর্বোচচ ১৫টি।

ডাটার ধরন নিম্নরূপে নির্ধারণ করা হয়:

ডাটার ধরন | সংজ্ঞা
CALLTYPE | উইন্ডোজের অন্তর্ভুক্ত: FAR PASCAL (_far _pascal) অন্যান্য: ডিফল্ট (অপারেটিং সিস্টেম উল্লেখিত ডিফল্ট)
USHORT | ২ বাইট unsigned Integer
DOUBLE | ৮ বাইট প্ল্যাটফর্ম-নির্ভরশীল ফরম্যাট
Paramtype | প্ল্যাটফর্ম-নির্ভরশীল- যেমন int PTR_DOUBLE =0, double এর পয়েন্টার PTR_STRING =1, zero-terminated string এর পয়েন্টার PTR_DOUBLE_ARR =2, double array এর পয়েন্টার PTR_STRING_ARR =3, string array এর পয়েন্টার PTR_CELL_ARR =4, cell array এর পয়েন্টার NONE =5

## Shared Library DLL ফাংশন‌

নিম্নে আপনি ঐসব ফাংশনের বর্ণনা খুঁজে পাবেন, যেগুলো Shared Library external DLL তে কল করা হয়।

সকল Shared Library DLL ফাংশনের জন্য, নিম্নোক্তটি প্রয়োগ করা হয়:

void CALLTYPE fn(out, in1, in2, ...)

আউটপুট: ফলাফল মান

ইনপুট: যেকোনো সংখ্যক ধরন (double&, char*, double*, char**, Cell area), যেখানে Cell area হলো একটি অ্যারে, যার ধরন double array, string array, বা cell array।

### GetFunctionCount()

রেফারেন্স প্যারামিটারের ব্যবস্থাপনা ফাংশন ব্যতীত ফাংশন সংখ্যা প্রদান করে। প্রতিটি ফাংশনের ০ এবং nCount-1 এর মধ্যবর্তী একটি অনন্য সংখ্যা রয়েছে। এই সংখ্যাটি পরবর্তীতে GetFunctionData এবং GetParameterDescription ফাংশনের জন্য প্রয়োজন হবে।

সিনট্যাক্স

void CALLTYPE GetFunctionCount(USHORT& nCount)

প্যারামিটার

USHORT &nCount:

আউটপুট: একটি ভেরিয়েবলের রেফারেন্স, যেটি অ্যাড-ইন ফাংশনের নম্বর ধারণ করবে। উদাহরণস্বরূপ: যদি অ্যাড-ইন LibreOffice ক্যালকের জন্য ৫টি ফাংশন প্রদান করে, তবে nCount=৫।

### GetFunctionData()

একটি অ্যাড-ইন ফাংশন সম্পর্কিত সকল গুরুত্বপূর্ণ তথ্য নির্ধারণ করে।

সিনট্যাক্স

void CALLTYPE GetFunctionData(USHORT& nNo, char* pFuncName, USHORT& nParamCount, Paramtype* peType, char* pInternalName)

প্যারামিটার

USHORT& nNo:

ইনপুট: ফাংশন নম্বর ০ এবং nCount-1 এর মধ্যবর্তী, সব নম্বর সহ।

char* pFuncName:

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

USHORT& nParamCount:

আউটপুট: অ্যাড-ইন ফাংশনের প্যারামিটার সংখ্যা। এই সংখ্যাটি অবশ্যই ০ অপেক্ষা বড় হবে, কারণ সেখানে সবসময় একটি ফলাফল মান রয়েছে; সর্বোচ্চ মান হলো ১৬।

Paramtype* peType:

আউটপুট: টাইপ Paramtype এর ঠিক ১৬ চলকের একটি বিন্যাস পর্যন্ত পয়েন্টার। প্রথম nParamCount এন্ট্রি প্যারামিটারের উপযুক্ত ধরন দ্বারা পূর্ণ হয়।

char* pInternalName:

আউটপুট: ব্যবহারকারীর দেখা ফাংশন নাম, এটা ফাংশন উইজার্ড এ যেভাবে উপস্থিত। এতে umlauts থাকতে পারে।

pFuncName এবং pInternalName প্যারামিটার হলো char অ্যারে, যেগুলো LibreOffice ক্যালকে ২৫৬ আকার বিশিষ্ট।

### GetParameterDescription()

অ্যাড-ইন ফাংশন এবং এর প্যারামিটারের একটি সংক্ষিপ্ত বর্ণনা প্রদান করে। অপশন হিসেবে, এই ফাংশনটি ফাংশন উইজার্ড এর ফাংশন এবং প্যারামিটারের বর্ণনা প্রদর্শন করতে ব্যবহৃত হতে পারে।

সিনট্যাক্স

void CALLTYPE GetParameterDescription(USHORT& nNo, USHORT& nParam, char* pName, char* pDesc)

প্যারামিটার

USHORT& nNo:

ইনপুট: লাইব্রেরীর ফাংশন সংখ্যা; ০ এবং nCount-1 মধ্যবর্তী।

USHORT& nParam:

ইনপুট: নির্দেশ করে, যে প্যারামিটারের জন্য বর্ণনাটি জোগান দেয়; প্যারামিটার ১ হতে শুরু হয়। যদি nParam ০ হয়, বর্ণনাটি নিজে pDesc তে জোগান দিবে অনুমান করা হয়; এই ক্ষেত্রে, pName এর কোন অর্থ থাকেনা।

char* pName:

আউটপুট: প্যারামিটারের নাম বা ধরন গ্রহণ করে, যেমন, "সংখ্যা" বা "স্ট্রিং" অথবা "তারিখ", এবং আরও শব্দ। char[256] হিসেবে LibreOffice ক্যালকে বাস্তবায়িত।

char* pDesc:

আউটপুট: প্যারামিটারের বর্ণনা গ্রহণ করে, উদাহরনস্বরূপ, "মান, যার মধ্যে universe গণনা করা হবে।" char[256] হিসেবে LibreOffice Calc তে প্রয়োগ হয়েছে।

pName এবং pDesc হলো char অ্যারে; LibreOffice ক্যালকে ২৫৬ আকারে বাস্তবায়িত। অনুগ্রহ করে নোট রাখুন যে ফাংশন উইজার্ড এ বিদ্যমান ফাঁকা স্থান সীমিত এবং ২৫৬টি অক্ষর সম্পূর্ণভাবে ব্যবহার করা যায় না।

## ঘরের এলাকা

ঘরের এলাকা পাস করতে একটি বহিঃস্থ প্রোগ্রাম মডিউল দ্বারা কোন ডাটা স্ট্রাকচার অবশ্যই প্রদান করতে হবে, নিম্নের টেবিলে সে সম্পর্কিত তথ্য রয়েছে। LibreOffice ক্যালক ডাটা ধরনের উপর ভিত্তি করে, তিনটি ভিন্ন অ্যারের মধ্যে পার্থক্য তৈরি করে।

### ডবল অ্যারে

একটি প্যারামিটার হিসেবে, সংখ্যা/ডবল ধরনের মান যুক্ত ঘরের এলাকা পাস করা হয়। LibreOffice ক্যালকে ডবল অ্যারে নিম্নরূপে নির্ধারণ করা হয়:

অফসেট | নাম | ব্যাখ্যা
0 | কলাম-১ | ঘরের এলাকার উপর-বাম কোনায় কলাম নম্বর। সংখ্যায়ন ০ হতে শুরু হয়।
2 | সারি-১ | ঘরের এলাকার উপর-বাম কোনায় সারি নম্বর; সংখ্যায়ন ০ হতে শুরু হয়।
4 | ট্যাব-১ | ঘরের উপরে-বাম কোণে টেবিল নাম্বার; সংখ্যায়ন ০ থেকে শুরু।
6 | কলাম-২ | ঘরের এলাকার নিচের-ডান কোনায় কলাম নম্বর। সংখ্যায়ন ০ হতে শুরু হয়।
8 | সারি-২ | ঘরের এলাকার নিচের-ডান কোনায় সারি নম্বর; সংখ্যায়ন ০ হতে শুরু হয়।
১০ | ট্যাব-২ | ঘরের এলাকার নিচের-ডান কোনায় টেবিল নম্বর; সংখ্যায়ন ০ হতে শুরু হয়।
১২ | গণনা | নিম্নের উপাদান সংখ্যা। ফাঁকা ঘর গণনা করা হয় না বা পাস করা হয় না।
১৪ | কলাম | উপাদানের কলাম সংখ্যা। সংখ্যায়ন ০ হতে শুরু হয়।
১৬ | সারি | উপাদানের সারি সংখ্যা; সংখ্যায়ন ০ হতে শুরু হয়।
১৮ | ট্যাব | উপাদানের টেবিল সংখ্যা; সংখ্যায়ন ০ হতে শুরু হয়।
২০ | ত্রুটি | ত্রুটি সংখ্যা, যেখানে মান ০ "ত্রুটিহীন" হিসেবে নির্ধারিত। যদি উপাদানটি একটি সূত্র ঘর থেকে আসে, সূত্র দ্বারা ত্রুটি মান নির্ধারণ করা হয়।
২২ | মান | ডবল/ফ্লোটিং পয়েন্টের ৮ বাইট IEEE ভেরিয়েবল
৩০ | ... | পরবর্তী উপাদান

### স্ট্রিং অ্যারে

একটি ঘরের এলাকা, যেটি ডাটার ধরন- টেক্সটের মান ধারণ করে এবং স্ট্রিং অ্যারে হিসেবে পাস করা হয়। LibreOffice ক্যালকের স্ট্রিং অ্যারে নিম্নরূপে নির্ধারণ করা হয়:

অফসেট | নাম | ব্যাখ্যা
0 | কলাম-১ | ঘরের এলাকার উপর-বাম কোনায় কলাম নম্বর। সংখ্যায়ন ০ হতে শুরু হয়।
2 | সারি-১ | ঘরের এলাকার উপর-বাম কোনায় সারি নম্বর; সংখ্যায়ন ০ হতে শুরু হয়।
4 | ট্যাব-১ | ঘরের উপরে-বাম কোণে টেবিল নাম্বার; সংখ্যায়ন ০ থেকে শুরু।
6 | কলাম-২ | ঘরের এলাকার নিচের-ডান কোনায় কলাম নম্বর। সংখ্যায়ন ০ হতে শুরু হয়।
8 | সারি-২ | ঘরের এলাকার নিচের-ডান কোনায় সারি নম্বর; সংখ্যায়ন ০ হতে শুরু হয়।
১০ | ট্যাব-২ | ঘরের এলাকার নিচের-ডান কোনায় টেবিল নম্বর; সংখ্যায়ন ০ হতে শুরু হয়।
১২ | গণনা | নিম্নের উপাদান সংখ্যা। ফাঁকা ঘর গণনা করা হয় না বা পাস করা হয় না।
১৪ | কলাম | উপাদানের কলাম সংখ্যা। সংখ্যায়ন ০ হতে শুরু হয়।
১৬ | সারি | উপাদানের সারি সংখ্যা; সংখ্যায়ন ০ হতে শুরু হয়।
১৮ | ট্যাব | উপাদানের টেবিল সংখ্যা; সংখ্যায়ন ০ হতে শুরু হয়।
২০ | ত্রুটি | ত্রুটি সংখ্যা, যেখানে মান ০ "ত্রুটিহীন" হিসেবে নির্ধারিত। যদি উপাদানটি একটি সূত্র ঘর থেকে আসে, সূত্র দ্বারা ত্রুটি মান নির্ধারণ করা হয়।
২২ | Len | নিম্নের স্ট্রিংএর দৈর্ঘ্য, শেষের শূন্য বাইট সহ। যদি শেষের শূন্য বাইটসহ দৈর্ঘ্য একটি বিজোড় মান হয়, তাহলে একটি জোড় মান পাওয়ার জন্য স্ট্রিংএর সাথে আরেকটি শূন্য বাইট যোগ করা হয়। ফলে, দৈর্ঘ্য হিসাব করা হয় ((StrLen+২)&~১) ব্যবহার করে।
২৪ | স্ট্রিং | শেষের শূন্য বাইট সহ স্ট্রিং
২৪+দৈর্ঘ্য | ... | পরবর্তী উপাদান

### ঘর অ্যারে

টেক্সট বা সংখ্যা রয়েছে এমন ঘরের এলাকা কল করতে, ঘর অ্যারে ব্যবহার করা হয়। LibreOffice ক্যালকে ঘর অ্যারে নিম্নরূপে নির্ধারণ করা হয়:

অফসেট | নাম | ব্যাখ্যা
0 | কলাম-১ | ঘরের এলাকার উপর-বাম কোনায় কলাম নম্বর। সংখ্যায়ন ০ হতে শুরু হয়।
2 | সারি-১ | ঘরের এলাকার উপর-বাম কোনায় সারি নম্বর; সংখ্যায়ন ০ হতে শুরু হয়।
4 | ট্যাব-১ | ঘরের উপরে-বাম কোণে টেবিল নাম্বার; সংখ্যায়ন ০ থেকে শুরু।
6 | কলাম-২ | ঘরের এলাকার নিচের-ডান কোনায় কলাম নম্বর। সংখ্যায়ন ০ হতে শুরু হয়।
8 | সারি-২ | ঘরের এলাকার নিচের-ডান কোনায় সারি নম্বর; সংখ্যায়ন ০ হতে শুরু হয়।
১০ | ট্যাব-২ | ঘরের এলাকার নিচের-ডান কোনায় টেবিল নম্বর; সংখ্যায়ন ০ হতে শুরু হয়।
১২ | গণনা | নিম্নের উপাদান সংখ্যা। ফাঁকা ঘর গণনা করা হয় না বা পাস করা হয় না।
১৪ | কলাম | উপাদানের কলাম সংখ্যা। সংখ্যায়ন ০ হতে শুরু হয়।
১৬ | সারি | উপাদানের সারি সংখ্যা; সংখ্যায়ন ০ হতে শুরু হয়।
১৮ | ট্যাব | উপাদানের টেবিল সংখ্যা; সংখ্যায়ন ০ হতে শুরু হয়।
২০ | ত্রুটি | ত্রুটি সংখ্যা, যেখানে মান ০ "ত্রুটিহীন" হিসেবে নির্ধারিত। যদি উপাদানটি একটি সূত্র ঘর থেকে আসে, সূত্র দ্বারা ত্রুটি মান নির্ধারণ করা হয়।
২২ | ধরন | ঘরের বিষয়বস্তুর ধরন, 0 == ডবল, 1 == স্ট্রিং
২৪ | মান বা দৈর্ঘ্য | যদি type == 0 হয়: ডবল/ফ্লোটিং পয়েন্টের ৮ বাইট IEEE ভেরিয়েবল যদি type == 1 হয়: নিম্নের স্ট্রিংএর দৈর্ঘ্য, শেষের শূন্য বাইট সহ। যদি শেষের শূন্য বাইটসহ দৈর্ঘ্য একটি বিজোড় মান হয়, তাহলে একটি জোড় মান পাওয়ার জন্য স্ট্রিংএর সাথে আরেকটি শূন্য বাইট যোগ করা হয়। ফলে, দৈর্ঘ্য হিসাব করা হয় ((StrLen+২)&~১) ব্যবহার করে।
২৬, যদি type==1 হয় | স্ট্রিং | যদি type == 1 হয়: শেষের শূন্য বাইট সহ স্ট্রিং
৩২ বা ২৬+দৈর্ঘ্য | ... | পরবর্তী উপাদান