আরও জন্য নীচে আমার আপডেট দেখুন।
আমার মাঝে মাঝে এমন প্রকল্প থাকে যেখানে আমাকে এক্সেল ফাইল (xlsx ফর্ম্যাট) হিসাবে কিছু ডেটা আউটপুট করতে হয়। প্রক্রিয়াটি সাধারণত:
ব্যবহারকারীরা আমার অ্যাপ্লিকেশনটিতে কিছু বোতাম ক্লিক করে
আমার কোডটি একটি ডিবি কোয়েরি চালায় এবং ফলাফলগুলি কোনওভাবে প্রসেস করে
আমার কোডটি এক্সেল কম ইন্টারপ লাইব্রেরি বা কিছু তৃতীয় পক্ষের লাইব্রেরি (উদাহরণস্বরূপ, Aspose.Cells) ব্যবহার করে একটি * .xlsx ফাইল উত্পন্ন করে
এটি অনলাইনে কীভাবে করা যায় তার জন্য আমি সহজে কোডের সন্ধান করতে পারি তবে এটি করার জন্য আমি আরও শক্তিশালী উপায়ের সন্ধান করছি। আমার কোডটি বজায় রাখা যায় এবং সহজেই বোধগম্য হয় তা নিশ্চিত করার জন্য আমার কোডটি কিছু নকশার নীতি অনুসরণ করতে চাই।
এক্সএলএক্সএক্স ফাইল উত্পন্ন করার আমার প্রাথমিক প্রয়াসটি এখানে দেখতে পঠিত:
var wb = new Workbook();
var ws = wb.Worksheets[0];
ws.Cells[0, 0].Value = "Header";
ws.Cells[1, 0].Value = "Row 1";
ws.Cells[2, 0].Value = "Row 2";
ws.Cells[3, 0].Value = "Row 3";
wb.Save(path);
পেশাদাররা: বেশি কিছু না। এটি কাজ করে, তাই ভাল।
কনস:
- সেল রেফারেন্সগুলি হার্ডকোডযুক্ত, তাই আমার কোডে আমার কাছে ম্যাজিক নম্বরগুলি লিটারযুক্ত রয়েছে।
- অনেকগুলি সেল রেফারেন্স আপডেট না করে কলাম এবং সারি যুক্ত করা বা মুছে ফেলা কঠিন।
- আমার কিছু তৃতীয় পক্ষের লাইব্রেরি শিখতে হবে। কিছু গ্রন্থাগার অন্যান্য লাইব্রেরির মতো ব্যবহৃত হয়, তবে এখনও সমস্যা হতে পারে। আমার একটি সমস্যা হয়েছিল যেখানে কম ইন্টার ইন্টারপ লাইব্রেরিগুলি 1-ভিত্তিক সেল রেফারেন্সিং ব্যবহার করে তবে Aspose.Cells 0-ভিত্তিক সেল রেফারেন্সিং ব্যবহার করে।
এখানে একটি সমাধান যা আমি উপরে তালিকাভুক্ত কয়েকটি কনসকে সম্বোধন করে। আমি ডেটা টেবিলটিকে তার নিজস্ব অবজেক্ট হিসাবে চিকিত্সা করতে চেয়েছিলাম যা সেল ম্যানিপুলেশন এবং অন্য সেল রেফারেন্সগুলিকে বিঘ্নিত না করে চারদিকে স্থানান্তরিত এবং পরিবর্তিত হতে পারে। এখানে কিছু সিউডোকোড:
var headers = new Block(new string[] { "Col 1", "Col 2", "Col 3" });
var body = new Block(new string[,]
{
{ "Row 1", "Row 1", "Row 1" },
{ "Row 2", "Row 2", "Row 2" },
{ "Row 3", "Row 3", "Row 3" }
});
body.PutBelow(headers);
এই সমাধানের অংশ হিসাবে, আমার কাছে কিছু ব্লকইঞ্জাইন অবজেক্ট থাকবে যা ব্লকের একটি ধারক গ্রহণ করে এবং * .xlsx ফাইল হিসাবে ডেটা আউটপুট দেওয়ার জন্য প্রয়োজনীয় সেল ম্যানিপুলেশনগুলি সম্পাদন করে। একটি ব্লক অবজেক্টের সাথে এটি ফর্ম্যাটিং যুক্ত থাকতে পারে।
পেশাদাররা:
- এটি আমার প্রাথমিক কোডটিতে থাকা বেশিরভাগ ম্যাজিক নম্বর সরিয়ে দেয়।
- এটি সেল ম্যানিপুলেশন কোডটি প্রচুর আড়াল করে, যদিও ব্লকইঞ্জাইন অবজেক্টে আমি উল্লেখ করেছি যে সেল ম্যানিপুলেশন এখনও প্রয়োজন।
- স্প্রেডশিটের অন্যান্য অংশগুলিকে প্রভাবিত না করে সারিগুলি যুক্ত করা এবং মুছে ফেলা অনেক সহজ।
কনস:
- কলামগুলি যুক্ত করা বা অপসারণ করা এখনও কঠিন। আমি যদি দুটি এবং তিনটি কলামের অবস্থানটি অদলবদল করতে চাইতাম তবে আমাকে সরাসরি ঘর সামগ্রীগুলি অদলবদল করতে হবে। এই ক্ষেত্রে এটি আটটি সম্পাদনা হবে এবং এইভাবে আটটি ভুল করার সুযোগ।
- এই দুটি কলামের জন্য আমার যদি কোনও ফর্ম্যাটিং থাকে তবে আমাকে এটিও আপডেট করতে হবে।
- এই সমাধান অনুভূমিক ব্লক স্থান নির্ধারণ সমর্থন করে না; আমি কেবল একটির নীচে অন্য ব্লক রাখতে পারি। অবশ্যই আমার থাকতে পারত
tableRight.PutToRightOf(tableLeft)
তবে টেবিলরাইট এবং টেবিল লেফটে বিভিন্ন সংখ্যক সারি থাকলে সমস্যা দেখা দিতে পারে। টেবিল স্থাপন করতে ইঞ্জিনটি অন্য প্রতিটি টেবিল সম্পর্কে সচেতন হতে হবে। এটি আমার কাছে অযথা জটিল মনে হয়। - আমার তৃতীয় পক্ষের কোডটি এখনও শিখতে হবে, যদিও ব্লক অবজেক্টের মাধ্যমে বিমূর্ততার একটি স্তর এবং একটি ব্লকইজাইন কোডটি আমার প্রাথমিক প্রয়াসের চেয়ে তৃতীয় পক্ষের লাইব্রেরিতে কম শক্তভাবে মিলিত হবে। আমি যদি স্বচ্ছভাবে-যুগল উপায়ে প্রচুর বিভিন্ন ফর্ম্যাটিং বিকল্পগুলি সমর্থন করতে চাইতাম তবে আমাকে সম্ভবত প্রচুর কোড লিখতে হবে; আমার ব্লকইঞ্জাইন একটি বিশাল গণ্ডগোল হবে।
এখানে একটি সমাধান যা পৃথক রুট নেয়। প্রক্রিয়াটি এখানে:
আমি আমার রিপোর্টের ডেটা নিই এবং আমার চয়ন করা কিছু ফর্ম্যাটে একটি এক্সএমএল ফাইল উত্পন্ন করি।
আমি তখন এক্সএমএল ফাইলটিকে এক্সেল 2003 এক্সএমএল স্প্রেডশিট ফাইলে রূপান্তর করতে একটি এক্সএসএল রূপান্তর ব্যবহার করি।
সেখান থেকে আমি কেবলমাত্র তৃতীয় পক্ষের লাইব্রেরি ব্যবহার করে এক্সএমএল স্প্রেডশিটকে একটি এক্সএলএসএক্স ফাইলে রূপান্তর করি।
আমি এই পৃষ্ঠাটি পেয়েছি যা একই ধরণের প্রক্রিয়া বর্ণনা করে এবং কোড উদাহরণগুলি অন্তর্ভুক্ত করে।
পেশাদাররা:
- এই সমাধানটির জন্য প্রায় কোনও সেল ম্যানিপুলেশন প্রয়োজন। পরিবর্তে আপনি নিজের ম্যানিপুলেশন করতে xsl / xpath ব্যবহার করেন। একটি টেবিলের মধ্যে দুটি কলাম অদলবদল করার জন্য, আপনি আমার অন্যান্য সমাধানগুলির বিপরীতে পুরো কলামগুলি এক্সএসএল ফাইলটিতে সরিয়ে নিয়েছেন যার জন্য সেল-অদলবদলের প্রয়োজন হবে।
- আপনার এখনও একটি তৃতীয় পক্ষের লাইব্রেরি দরকার যা একটি এক্সেল 2003 এক্সএমএল স্প্রেডশিটকে একটি এক্সএলএসএক্স ফাইলে রূপান্তর করতে পারে, এগুলি আপনার লাইব্রেরির জন্য প্রয়োজন about তৃতীয় পক্ষের লাইব্রেরিতে আপনাকে যে পরিমাণ কোড লিখতে হবে তা ক্ষুদ্র।
- আমি মনে করি এই সমাধানটি বোঝার পক্ষে সবচেয়ে সহজ এবং ন্যূনতম পরিমাণের কোডের প্রয়োজন।
- কোডটি যা আমার নিজস্ব এক্সএমএল ফর্ম্যাটে ডেটা তৈরি করে তা সহজ হবে।
- এক্সএসএল ফাইলটি কেবল জটিল হবে কারণ এক্সেল 2003 এক্সএমএল স্প্রেডশিট জটিল। তবে এক্সএসএল ফাইলের আউটপুট পরীক্ষা করা সহজ: কেবল এক্সেলের আউটপুটটি খুলুন এবং ত্রুটি বার্তাগুলির জন্য পরীক্ষা করুন।
- এক্সেল 2003 এক্সএমএল স্প্রেডশিট ফাইলের নমুনা উত্পন্ন করা সহজ: কেবল আপনার পছন্দসই এক্সএলএসএক্স ফাইলের মতো দেখতে একটি স্প্রেডশিট তৈরি করুন এবং তারপরে এটি একটি এক্সেল 2003 এক্সএমএল স্প্রেডশিট হিসাবে সংরক্ষণ করুন।
কনস:
- এক্সেল 2003 এক্সএমএল স্প্রেডশিটগুলি নির্দিষ্ট বৈশিষ্ট্যগুলিকে সমর্থন করে না। উদাহরণস্বরূপ আপনি কলামের প্রস্থগুলি অটোফিট করতে পারবেন না। আপনি শিরোলেখ বা পাদলেখগুলিতে চিত্রগুলি অন্তর্ভুক্ত করতে পারবেন না। যদি আপনি ফলাফল xlsx ফাইলটি পিডিএফ রফতানি করতে চলেছেন, আপনি পিডিএফ বুকমার্ক সেট করতে পারবেন না। (আমি সেল মন্তব্যগুলি ব্যবহার করে এটির জন্য একটি সমাধান হ্যাক করেছি)) আপনার তৃতীয় পক্ষের লাইব্রেরিটি ব্যবহার করে এটি করতে হবে।
- এক্সেল 2003 এক্সএমএল স্প্রেডশিট সমর্থন করে এমন একটি গ্রন্থাগার প্রয়োজন।
- 11 বছরের পুরানো এমএস অফিস ফাইল ফর্ম্যাট ব্যবহার করে।
দ্রষ্টব্য: আমি বুঝতে পেরেছি যে এক্সএলএসএক্স ফাইলগুলি আসলে এক্সপিএল ফাইলযুক্ত জিপ ফাইল, তবে এক্সএমএল ফর্ম্যাটিংটি আমার উদ্দেশ্যগুলির জন্য খুব জটিল বলে মনে হচ্ছে।
অবশেষে, আমি এসএসআরএসের সাথে জড়িত সমাধানগুলি সন্ধান করেছি, তবে এটি আমার উদ্দেশ্যগুলির জন্য খুব স্ফীত মনে হয়।
আমার প্রাথমিক প্রশ্নে ফিরে যান, কোডটিতে এক্সেল ফাইল উত্পন্ন করার জন্য একটি ভাল নকশা-ধরণ কী ?. আমি কয়েকটি সমাধান সম্পর্কে ভাবতে পারি, তবে কোনওটিই আদর্শ হিসাবে স্থির থাকে বলে মনে হয় না। প্রত্যেকেরই ঘাটতি রয়েছে।
আপডেট: সুতরাং আমি অনুরূপ এক্সএলএসএক্স ফাইল উত্পন্ন করার জন্য আমার ব্লকইঞ্জাইন সমাধান এবং আমার এক্সএমএল স্প্রেডশিট সমাধান উভয়ই চেষ্টা করেছিলাম। তাদের সম্পর্কে আমার মতামত এখানে:
ব্লকইঞ্জাইন সমাধান:
- বিকল্পগুলির বিবেচনায় এটির জন্য খুব বেশি কোডের প্রয়োজন।
- আমার যদি একটি অফসেট ভুল হয় তবে একটির সাথে অন্য ব্লকের ওভাররাইট করা খুব সহজ।
- আমি প্রাথমিকভাবে বলেছি যে ব্লক স্তরে ফর্ম্যাটিং সংযুক্ত করা যেতে পারে। আমি ব্লক সামগ্রী থেকে আলাদা করে ফর্ম্যাটিং করার চেয়ে বেশি ভাল না বলে মনে করেছি। বিষয়বস্তু এবং বিন্যাসের একত্রিত করার জন্য আমি ভাল উপায়ের কথা ভাবতে পারি না। এগুলি আলাদা রাখার জন্য আমি কোনও ভাল উপায় খুঁজে পাচ্ছি না। এটা ঠিক একটা গন্ডগোল
এক্সএমএল স্প্রেডশিট সমাধান:
- আপাতত এই সমাধান নিয়ে যাচ্ছি।
- এটি পুনরাবৃত্তি করে যে এই সমাধানটির জন্য অনেক কম কোড দরকার। আমি কার্যকরভাবে এক্সেল দিয়ে ব্লকজিনকে প্রতিস্থাপন করছি। বুকমার্ক এবং পৃষ্ঠা বিরতির মতো বৈশিষ্ট্যগুলির জন্য আমার এখনও একটি হ্যাক দরকার।
- এক্সএমএল স্প্রেডশিট ফর্ম্যাটটি চূড়ান্ত, তবে একটি ছোট পরিবর্তন করা সহজ এবং আপনার পছন্দসই ডিফ প্রোগ্রামে বিদ্যমান ফাইলের সাথে ফলাফলগুলির তুলনা করা সহজ। এবং একবার আপনি কিছু আইডিসিএনক্রসিটি বুঝতে পেরে আপনি এটিকে জায়গায় রেখে দিতে পারেন এবং সেখান থেকে এটি ভুলে যেতে পারেন।
- আমি এখনও উদ্বিগ্ন যে এই সমাধানটি পুরানো এক্সেল ফাইল ফর্ম্যাটের উপর নির্ভর করে।
- আমি তৈরি করা XSLT ফাইলটি কাজ করা সহজ। ব্লকইঞ্জাইন সমাধানের চেয়ে ফর্ম্যাটিংয়ের সাথে ডিল করা এখানে অনেক সহজ।