কোড চালাচ্ছে এমন মেশিনে এক্সেল ইনস্টল করার প্রয়োজন ছাড়াই কীভাবে আমি সি # দিয়ে একটি এক্সেল স্প্রেডশিট তৈরি করতে পারি?
কোড চালাচ্ছে এমন মেশিনে এক্সেল ইনস্টল করার প্রয়োজন ছাড়াই কীভাবে আমি সি # দিয়ে একটি এক্সেল স্প্রেডশিট তৈরি করতে পারি?
উত্তর:
আপনি এক্সেললিবারি নামে একটি লাইব্রেরি ব্যবহার করতে পারেন। এটি গুগল কোডে পোস্ট করা একটি ফ্রি, ওপেন সোর্স লাইব্রেরি:
এটি আপনার উপরে উল্লিখিত পিএইচপি এক্সেল রাইটারের একটি বন্দর বলে মনে হচ্ছে। এটি নতুন .xlsx ফর্ম্যাটে এখনও লিখবে না, তবে তারা সেই কার্যকারিতাটি এতে যুক্ত করার জন্য কাজ করছে।
এটি খুব সহজ, ছোট এবং সহজেই ব্যবহারযোগ্য। এছাড়াও এটিতে একটি ডেটাসেটহেল্পার রয়েছে যা আপনাকে এক্সেল ডেটার সাথে সহজেই কাজ করতে ডেটাসেটস এবং ডেটা টেবিলগুলি ব্যবহার করতে দেয়।
এক্সেললিবারি এখনও কেবল পুরানো এক্সেল ফর্ম্যাট (.xls ফাইল) এর জন্য কাজ করে বলে মনে হচ্ছে তবে ভবিষ্যতে আরও নতুন 2007/2010 ফর্ম্যাটের জন্য সমর্থন যোগ করতে পারে।
আপনি ইপিপ্লাসও ব্যবহার করতে পারেন , যা কেবল এক্সেল 2007/2010 ফর্ম্যাট ফাইলের (.xlsx ফাইল) জন্য কাজ করে। এর রয়েছে NPOI যা উভয় সঙ্গে কাজ করে।
মন্তব্যে উল্লিখিত প্রতিটি লাইব্রেরির সাথে কয়েকটি জ্ঞাত বাগ রয়েছে। সব মিলিয়ে, সময় বাড়ার সাথে সাথে ইপিপ্লাস সেরা পছন্দ বলে মনে হচ্ছে। এটি আরও সক্রিয়ভাবে আপডেট এবং ডকুমেন্টেড বলে মনে হয়।
এছাড়াও, নীচে @ by দ্বারা উল্লিখিত হিসাবে, ইপিপ্লাসের পিভট টেবিলগুলির জন্য সমর্থন রয়েছে এবং এক্সেললিবারির কিছুটা সমর্থন থাকতে পারে ( এক্সেললিবারিতে পিভট টেবিল ইস্যু )
দ্রুত রেফারেন্সের জন্য এখানে কয়েকটি লিঙ্ক রয়েছে:
এক্সেললিবারি - জিএনইউ লেজার জিপিএল
ইপিপ্লাস - জিএনইউ লেজার জেনারেল পাবলিক লাইসেন্স (এলজিপিএল)
এনপিওআই - অ্যাপাচি লাইসেন্স
এক্সেললিবারির জন্য এখানে কয়েকটি উদাহরণ কোড:
এটি একটি উদাহরণ যা একটি ডাটাবেস থেকে ডেটা নেওয়া এবং এটি থেকে একটি ওয়ার্কবুক তৈরি করা হয়। মনে রাখবেন যে এক্সেললিবারি কোডটি নীচে একক লাইন:
//Create the data set and table
DataSet ds = new DataSet("New_DataSet");
DataTable dt = new DataTable("New_DataTable");
//Set the locale for each
ds.Locale = System.Threading.Thread.CurrentThread.CurrentCulture;
dt.Locale = System.Threading.Thread.CurrentThread.CurrentCulture;
//Open a DB connection (in this example with OleDB)
OleDbConnection con = new OleDbConnection(dbConnectionString);
con.Open();
//Create a query and fill the data table with the data from the DB
string sql = "SELECT Whatever FROM MyDBTable;";
OleDbCommand cmd = new OleDbCommand(sql, con);
OleDbDataAdapter adptr = new OleDbDataAdapter();
adptr.SelectCommand = cmd;
adptr.Fill(dt);
con.Close();
//Add the table to the data set
ds.Tables.Add(dt);
//Here's the easy part. Create the Excel worksheet from the data set
ExcelLibrary.DataSetHelper.CreateWorkbook("MyExcelFile.xls", ds);
এক্সেল ফাইল তৈরি করা তত সহজ। আপনি নিজে নিজে এক্সেল ফাইলও তৈরি করতে পারেন তবে উপরের কার্যকারিতাটি আমাকে সত্যই প্রভাবিত করেছে।
আপনি যদি এক্সএলএসএক্স ফর্ম্যাটে খুশি হন তবে আমার গিটহাব প্রকল্প, ইপিপ্লাস চেষ্টা করুন । এটি এক্সেলপ্যাকেজ থেকে উত্স দিয়ে শুরু হয়েছিল, তবে আজ এটি মোট পুনর্লিখন। এটি ব্যাপ্তি, সেল স্টাইলিং, চার্ট, আকার, ছবি, নামযুক্ত রেঞ্জ, অটোফিল্টার এবং প্রচুর অন্যান্য স্টাফ সমর্থন করে।
এবং মাইক্রোসফ্ট অফিসের জন্য ওপেন এক্সএমএল এসডিকে 2.0 ব্যবহার করার বিষয়ে কী?
কয়েকটি সুবিধা:
লিঙ্ক:
আমি নিম্নলিখিত ওপেন সোর্স প্রকল্পগুলি সাফল্যের সাথে ব্যবহার করেছি:
OOXML ফর্ম্যাটগুলির জন্য এক্সেলপ্যাকেজ (অফিস 2007)
.XLS ফর্ম্যাটের জন্য অফিস (2003) N এনপিওআই ২.০ (বিটা) এক্সএলএসএক্স সমর্থন করে।
আমার ব্লগ পোস্টগুলি একবার দেখুন:
এক্স # স্প্রেডশিট তৈরি করা হচ্ছে। সিএলে এক্সএলএস এবং .এক্সএলএসএক্স
আপনি এক্সেল ফাইলগুলি তৈরি এবং পরিচালনা করতে OLEDB ব্যবহার করতে পারেন। এটি পরীক্ষা করুন: ওএইলডিবি ব্যবহার করে এক্সেল রিডিং এবং রাইটিং ।
সাধারণ উদাহরণ:
using (OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\temp\\test.xls;Extended Properties='Excel 8.0;HDR=Yes'"))
{
conn.Open();
OleDbCommand cmd = new OleDbCommand("CREATE TABLE [Sheet1] ([Column1] string, [Column2] string)", conn);
cmd.ExecuteNonQuery();
}
সম্পাদনা - আরও কিছু লিঙ্ক:
.NET- এর বাণিজ্যিক সমাধান, স্প্রেডশিটগিয়ার এটি করবে।
আপনি লাইভ ASP.NET (C # এবং ভিবি) নমুনা দেখতে পারেন এখানে ডাউনলোড মূল্যায়ন সংস্করণ এখানে ।
দাবি অস্বীকার: আমি স্প্রেডশিটগিয়ার এলএলসি এর মালিক
আমি কয়েকটি বিকল্প ব্যবহার করেছি:
যদি এক্সএলএসএক্স আবশ্যক: এক্সেলপ্যাকেজ একটি ভাল শুরু তবে বিকাশকারী এতে কাজ করা ছেড়ে দিলে মারা যায়। এক্সএমএল সেখান থেকে তুলে নেওয়া হয়েছে এবং কয়েকটি বৈশিষ্ট্য যুক্ত করেছে। এক্সএমএল কোনও খারাপ বিকল্প নয়, আমি এখনও এটি বেশ কয়েকটি প্রোডাকশন ওয়েবসাইটে ব্যবহার করছি।
আমার সমস্ত নতুন প্রকল্পের জন্য, যদিও আমি অ্যাপাচি পিওআইয়ের নেট নেট বন্দর এনপিওআই ব্যবহার করছি । এনপিওআই ২.০ (আলফা) এক্সএলএসএক্স সমর্থন করে।
এইচটিএমএল টেবিল ব্যবহার করার জন্য একটি অত্যন্ত হালকা ওজনের বিকল্প হতে পারে। একটি ফাইলের মধ্যে কেবল মাথা, দেহ এবং টেবিল ট্যাগ তৈরি করুন এবং এটি একটি xx এক্সটেনশান সহ ফাইল হিসাবে সংরক্ষণ করুন। মাইক্রোসফ্টের নির্দিষ্ট বৈশিষ্ট্য রয়েছে যা আপনি সূত্র সহ আউটপুট স্টাইল করতে ব্যবহার করতে পারেন।
আমি বুঝতে পারি যে আপনি এটি কোনও ওয়েব অ্যাপ্লিকেশনটিতে কোডিং করছেন না, তবে এইচটিএমএল টেবিলের মাধ্যমে এক্সেল ফাইলের সংমিশ্রণের উদাহরণ এখানে রয়েছে । আপনি যদি কোন কনসোল অ্যাপ, ডেস্কটপ অ্যাপ্লিকেশন বা পরিষেবা কোড করে থাকেন তবে এই কৌশলটি ব্যবহার করা যেতে পারে।
আপনি যদি এক্সেল তৈরি করেন 2007/2010 ফাইলগুলি এই ওপেন সোর্স প্রকল্পটির চেষ্টা করে দেখুন: https://github.com/closedxml/closedxml
এটি এক্সএমএল ডকুমেন্টগুলির ঝামেলা না করেই ফাইলগুলি (ভিবিএর অনুরূপ) ম্যানিপুলেট করার একটি অবজেক্ট ওরিয়েন্টেড উপায় সরবরাহ করে। এটি সি # এবং ভিজ্যুয়াল বেসিক (ভিবি) এর মতো কোনও নেট নেট ভাষা ব্যবহার করতে পারে।
ক্লোজডএক্সএমএল আপনাকে এক্সেল অ্যাপ্লিকেশন ছাড়াই এক্সেল 2007/2010 ফাইল তৈরি করতে দেয়। সাধারণ উদাহরণটি ওয়েব সার্ভারে এক্সেল রিপোর্ট তৈরি করছে:
var workbook = new XLWorkbook(); var worksheet = workbook.Worksheets.Add("Sample Sheet"); worksheet.Cell("A1").Value = "Hello World!"; workbook.SaveAs("HelloWorld.xlsx");
আপনি এক্সেলএক্সএমএল রাইটার ব্যবহার করতে পারেন ।
এটা ঠিক কাজ করে।
আপনি আসলে সি # তে উপলব্ধ ইন্টারপ ক্লাসগুলি পরীক্ষা করতে চাইতে পারেন (উদাঃ Microsoft.Office.Interop.Excel
আপনি কোনও ওএলই বলেন না (যা এটি নয়) তবে আন্তঃবিদ্যালয়ের ক্লাসগুলি ব্যবহার করা খুব সহজ। এখানে সি # ডকুমেন্টেশন পরীক্ষা করে দেখুন (এক্সেলের জন্য ইন্টারপ শুরু হয়) সি # পিডিএফ এর 1072 পৃষ্ঠা)।
আপনি যদি তাদের চেষ্টা না করেন তবে আপনি মুগ্ধ হতে পারেন।
এই সম্পর্কে মাইক্রোসফ্টের অবস্থান সম্পর্কে সতর্ক করা উচিত :
মাইক্রোসফ্ট বর্তমানে কোনও অযৌক্তিক, অ-ইন্টারেক্টিভ ক্লায়েন্ট অ্যাপ্লিকেশন বা উপাদান (এএসপি, এএসপি.এনইটি, ডিসিওএম, এবং এনটি পরিষেবাদি সহ) থেকে মাইক্রোসফ্ট অফিস অ্যাপ্লিকেশনগুলির অটোমেশন প্রস্তাবনা দেয় এবং সমর্থন করে না, কারণ অফিস অস্থির আচরণ এবং / অথবা অফিস যখন এই পরিবেশে চালিত হয় তখন অচল।
এখানে একটি সম্পূর্ণ বিনামূল্যে C # এর গ্রন্থাগার, যা আপনি একটি থেকে রফতানি করতে দেয় এর DataSet
, DataTable
বা List<>
একটি জেনুইন এক্সেল 2007 .xlsx ফাইলে, OpenXML লাইব্রেরি ব্যবহার করছে:
http://mikesknowledgebase.com/pages/CSharp/ExportToExcel.htm
নির্দেশাবলী এবং একটি ডেমো অ্যাপ্লিকেশন সহ নিখরচায় - সম্পূর্ণ উত্স কোড সরবরাহ করা হয়।
আপনার অ্যাপ্লিকেশনটিতে এই শ্রেণিটি যুক্ত করার পরে, আপনি কেবলমাত্র এক লাইনের কোডের মধ্যে আপনার ডেটাসেটটি এক্সেলে এক্সপোর্ট করতে পারেন:
CreateExcelFile.CreateExcelDocument(myDataSet, "C:\\Sample.xlsx");
এটি এর চেয়ে সহজ কিছু পায় না ...
এবং এটি এমনকি আপনার সার্ভারে উপস্থিত থাকা এক্সেলের প্রয়োজন নেই।
আপনি এক্সএমএল স্প্রেডশিট 2003 ফর্ম্যাট ব্যবহার করে আপনার ফাইলগুলি তৈরির বিষয়ে বিবেচনা করতে পারেন । এটি একটি ডকুমেন্টেড স্কিমা ব্যবহার করে একটি সাধারণ এক্সএমএল ফর্ম্যাট ।
আপনি জেমবক্স.স্প্রেডশীটটি একবার দেখে নিতে পারেন ।
তাদের সমস্ত বৈশিষ্ট্য সহ একটি বিনামূল্যে সংস্করণ রয়েছে তবে শিট প্রতি 150 সারি এবং ওয়ার্কবুক প্রতি 5 টি শীট সীমাবদ্ধ, যদি এটি আপনার প্রয়োজনের মধ্যে পড়ে।
আমার নিজের এটি এখনও ব্যবহার করার দরকার হয়নি তবে আকর্ষণীয় দেখাচ্ছে।
সিঙ্কফিউশন প্রয়োজনীয় এক্সএলএসআইআই এটি করতে পারে। এটি মাইক্রোসফ্ট অফিসের উপর নির্ভরশীলতা রাখে না এবং বিভিন্ন প্ল্যাটফর্মগুলির জন্য নির্দিষ্ট সমর্থনও রয়েছে।
কোড নমুনা:
//Creates a new instance for ExcelEngine.
ExcelEngine excelEngine = new ExcelEngine();
//Loads or open an existing workbook through Open method of IWorkbooks
IWorkbook workbook = excelEngine.Excel.Workbooks.Open(fileName);
//To-Do some manipulation|
//To-Do some manipulation
//Set the version of the workbook.
workbook.Version = ExcelVersion.Excel2013;
//Save the workbook in file system as xlsx format
workbook.SaveAs(outputFileName);
আপনি যোগ্যতা অর্জন করলে (সম্পূর্ণ আয় থেকে 1 মিলিয়ন মার্কিন ডলার) কমিউনিটি লাইসেন্স প্রোগ্রামের মাধ্যমে সম্পূর্ণ নিয়ন্ত্রণের স্যুটটি বিনামূল্যে পাওয়া যায় । দ্রষ্টব্য: আমি সিঙ্কফিউজনের জন্য কাজ করি।
আমরা হব,
আপনি যেমন তৃতীয় পক্ষের লাইব্রেরি Aspose ব্যবহার করতে পারেন ।
এই গ্রন্থাগারের সুবিধা রয়েছে যে এটির জন্য আপনার মেশিনে এক্সেল ইনস্টল করার দরকার নেই যা আপনার ক্ষেত্রে আদর্শ হবে।
ওপেনএক্সএমএল একটি ভাল বিকল্প যা সার্ভারে এমএস এক্সেল ইনস্টল করা এড়াতে সহায়তা করে Microsoft মাইক্রোসফ্ট সরবরাহিত ওপেন এক্সএমএল এসডিকে ২.০ ওপেন এক্সএমএল প্যাকেজগুলি এবং একটি প্যাকেজের মধ্যে অন্তর্নিহিত ওপেন এক্সএমএল স্কিমা উপাদানগুলি পরিচালনা করার কাজটি সহজ করে। ওপেন এক্সএমএল অ্যাপ্লিকেশন প্রোগ্রামিং ইন্টারফেস (এপিআই) অনেকগুলি সাধারণ কাজকে আবশ্যক করে যা বিকাশকারীরা ওপেন এক্সএমএল প্যাকেজগুলিতে সম্পাদন করে।
এটি ওপেনএক্সএমএল দেখুন: বিকল্প যা সার্ভারে এমএস এক্সেল ইনস্টল করা এড়াতে সহায়তা করে
বিভিন্ন অফিস 2003 এক্সএমএল লাইব্রেরি ছোট এক্সেল ফাইলগুলির জন্য সহজলভ্য কাজ করে। তবে, এক্সএমএল ফর্ম্যাটে সংরক্ষিত একটি বড় ওয়ার্কবুকের নিছক আকারটি একটি সমস্যা হিসাবে দেখতে পাচ্ছি। উদাহরণস্বরূপ, এর সাথে আমি যে ওয়ার্কবুকটি নিয়ে কাজ করি তা নতুনতে 40MB হবে (এবং স্বীকারযোগ্যভাবে আরও দৃ tight়ভাবে প্যাক করা) এক্সএলএসএক্স ফর্ম্যাটটি 360MB এক্সএমএল ফাইল হয়ে যায়।
আমার গবেষণা যতদূর আমাকে নিয়ে গেছে, দুটি বাণিজ্যিক প্যাকেজ রয়েছে যা পুরানো বাইনারি ফাইল ফর্ম্যাটে আউটপুট দেয় allow তারা হ'ল:
উভয়ই সস্তা নয় (যথাক্রমে 500 ইউএসডি এবং 800 ইউএসডি, আমার মনে হয়)। তবে দু'জনেই এক্সেল নিজে থেকেই স্বতন্ত্র কাজ করে।
আমি কী সম্পর্কে কৌতূহলী হব তা হ'ল ওপেন অফিস.গ্রন্থের পছন্দগুলির জন্য এক্সেল আউটপুট মডিউল। আমি ভাবছি তাদের জাভা থেকে। নেট এ পোর্ট করা যায় কিনা।
আমি এক্সএমএল স্প্রেডশিট তৈরির বিষয়ে একমত, এটি সি # 3 এর জন্য কীভাবে করা যায় তার একটি উদাহরণ এখানে রয়েছে (প্রত্যেকে ভিবি 9: পি-তে এটি ব্লগ করে) http://www.aaron-powell.com/linq-to-xML-to- সীমা অতিক্রম করা
আমি সদ্য সম্প্রতি ফ্লেক্সকেল.এনইটি ব্যবহার করেছি এবং এটি একটি দুর্দান্ত লাইব্রেরি হিসাবে পেয়েছি! আমি অনেকগুলি সফ্টওয়্যার পণ্য সম্পর্কে এটি বলি না। এখানে পুরো বিক্রয় পিচ দেওয়ার কোনও অর্থ নেই, আপনি তাদের ওয়েবসাইটে সমস্ত বৈশিষ্ট্যগুলি পড়তে পারেন।
এটি একটি বাণিজ্যিক পণ্য, তবে আপনি যদি এটি কিনে থাকেন তবে আপনি সম্পূর্ণ উত্স পাবেন। সুতরাং আমি মনে করি আপনি যদি এটি করতে চান তবে আপনি এটি আপনার সমাবেশে সংকলন করতে পারেন। অন্যথায় এটি এক্সকপিতে কেবল একটি অতিরিক্ত সমাবেশ - কোনও কনফিগারেশন বা ইনস্টলেশন বা এর মতো কিছু নয়।
আমি মনে করি না তৃতীয় পক্ষের লাইব্রেরিগুলি ছাড়া আপনি এটি করার কোনও উপায় খুঁজে পাবেন না। নেট ফ্রেমওয়ার্ক, সম্ভবত এটির পক্ষে সমর্থন তৈরি করে নি এবং ওএইএল অটোমেশন কেবল ব্যথার সম্পূর্ণ বিশ্ব world
আমি System.IO.StreamWriter ব্যবহার করে এক্সেল অবজেক্টটি ব্যবহার না করে এক্সেল করার জন্য ডেটাসেট রফতানি করার জন্য একটি সাধারণ কোড লিখেছি।
নীচে কোডটি যা ডেটাसेट থেকে সমস্ত সারণী পড়বে এবং সেগুলি একে একে শীটগুলিতে লিখবে। আমি এই নিবন্ধ থেকে সাহায্য নিয়েছি ।
public static void exportToExcel(DataSet source, string fileName)
{
const string endExcelXML = "</Workbook>";
const string startExcelXML = "<xml version>\r\n<Workbook " +
"xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\"\r\n" +
" xmlns:o=\"urn:schemas-microsoft-com:office:office\"\r\n " +
"xmlns:x=\"urn:schemas- microsoft-com:office:" +
"excel\"\r\n xmlns:ss=\"urn:schemas-microsoft-com:" +
"office:spreadsheet\">\r\n <Styles>\r\n " +
"<Style ss:ID=\"Default\" ss:Name=\"Normal\">\r\n " +
"<Alignment ss:Vertical=\"Bottom\"/>\r\n <Borders/>" +
"\r\n <Font/>\r\n <Interior/>\r\n <NumberFormat/>" +
"\r\n <Protection/>\r\n </Style>\r\n " +
"<Style ss:ID=\"BoldColumn\">\r\n <Font " +
"x:Family=\"Swiss\" ss:Bold=\"1\"/>\r\n </Style>\r\n " +
"<Style ss:ID=\"StringLiteral\">\r\n <NumberFormat" +
" ss:Format=\"@\"/>\r\n </Style>\r\n <Style " +
"ss:ID=\"Decimal\">\r\n <NumberFormat " +
"ss:Format=\"0.0000\"/>\r\n </Style>\r\n " +
"<Style ss:ID=\"Integer\">\r\n <NumberFormat " +
"ss:Format=\"0\"/>\r\n </Style>\r\n <Style " +
"ss:ID=\"DateLiteral\">\r\n <NumberFormat " +
"ss:Format=\"mm/dd/yyyy;@\"/>\r\n </Style>\r\n " +
"</Styles>\r\n ";
System.IO.StreamWriter excelDoc = null;
excelDoc = new System.IO.StreamWriter(fileName);
int sheetCount = 1;
excelDoc.Write(startExcelXML);
foreach (DataTable table in source.Tables)
{
int rowCount = 0;
excelDoc.Write("<Worksheet ss:Name=\"" + table.TableName + "\">");
excelDoc.Write("<Table>");
excelDoc.Write("<Row>");
for (int x = 0; x < table.Columns.Count; x++)
{
excelDoc.Write("<Cell ss:StyleID=\"BoldColumn\"><Data ss:Type=\"String\">");
excelDoc.Write(table.Columns[x].ColumnName);
excelDoc.Write("</Data></Cell>");
}
excelDoc.Write("</Row>");
foreach (DataRow x in table.Rows)
{
rowCount++;
//if the number of rows is > 64000 create a new page to continue output
if (rowCount == 64000)
{
rowCount = 0;
sheetCount++;
excelDoc.Write("</Table>");
excelDoc.Write(" </Worksheet>");
excelDoc.Write("<Worksheet ss:Name=\"" + table.TableName + "\">");
excelDoc.Write("<Table>");
}
excelDoc.Write("<Row>"); //ID=" + rowCount + "
for (int y = 0; y < table.Columns.Count; y++)
{
System.Type rowType;
rowType = x[y].GetType();
switch (rowType.ToString())
{
case "System.String":
string XMLstring = x[y].ToString();
XMLstring = XMLstring.Trim();
XMLstring = XMLstring.Replace("&", "&");
XMLstring = XMLstring.Replace(">", ">");
XMLstring = XMLstring.Replace("<", "<");
excelDoc.Write("<Cell ss:StyleID=\"StringLiteral\">" +
"<Data ss:Type=\"String\">");
excelDoc.Write(XMLstring);
excelDoc.Write("</Data></Cell>");
break;
case "System.DateTime":
//Excel has a specific Date Format of YYYY-MM-DD followed by
//the letter 'T' then hh:mm:sss.lll Example 2005-01-31T24:01:21.000
//The Following Code puts the date stored in XMLDate
//to the format above
DateTime XMLDate = (DateTime)x[y];
string XMLDatetoString = ""; //Excel Converted Date
XMLDatetoString = XMLDate.Year.ToString() +
"-" +
(XMLDate.Month < 10 ? "0" +
XMLDate.Month.ToString() : XMLDate.Month.ToString()) +
"-" +
(XMLDate.Day < 10 ? "0" +
XMLDate.Day.ToString() : XMLDate.Day.ToString()) +
"T" +
(XMLDate.Hour < 10 ? "0" +
XMLDate.Hour.ToString() : XMLDate.Hour.ToString()) +
":" +
(XMLDate.Minute < 10 ? "0" +
XMLDate.Minute.ToString() : XMLDate.Minute.ToString()) +
":" +
(XMLDate.Second < 10 ? "0" +
XMLDate.Second.ToString() : XMLDate.Second.ToString()) +
".000";
excelDoc.Write("<Cell ss:StyleID=\"DateLiteral\">" +
"<Data ss:Type=\"DateTime\">");
excelDoc.Write(XMLDatetoString);
excelDoc.Write("</Data></Cell>");
break;
case "System.Boolean":
excelDoc.Write("<Cell ss:StyleID=\"StringLiteral\">" +
"<Data ss:Type=\"String\">");
excelDoc.Write(x[y].ToString());
excelDoc.Write("</Data></Cell>");
break;
case "System.Int16":
case "System.Int32":
case "System.Int64":
case "System.Byte":
excelDoc.Write("<Cell ss:StyleID=\"Integer\">" +
"<Data ss:Type=\"Number\">");
excelDoc.Write(x[y].ToString());
excelDoc.Write("</Data></Cell>");
break;
case "System.Decimal":
case "System.Double":
excelDoc.Write("<Cell ss:StyleID=\"Decimal\">" +
"<Data ss:Type=\"Number\">");
excelDoc.Write(x[y].ToString());
excelDoc.Write("</Data></Cell>");
break;
case "System.DBNull":
excelDoc.Write("<Cell ss:StyleID=\"StringLiteral\">" +
"<Data ss:Type=\"String\">");
excelDoc.Write("");
excelDoc.Write("</Data></Cell>");
break;
default:
throw (new Exception(rowType.ToString() + " not handled."));
}
}
excelDoc.Write("</Row>");
}
excelDoc.Write("</Table>");
excelDoc.Write(" </Worksheet>");
sheetCount++;
}
excelDoc.Write(endExcelXML);
excelDoc.Close();
}
তৃতীয় পক্ষের সমাধানে কেবলমাত্র অন্য একটি রেফারেন্স যুক্ত করতে চান যা আপনার সমস্যাটিকে সরাসরি সম্বোধন করে: http://www.officewriter.com
(অস্বীকৃতি: আমি সফটআর্টিসানদের পক্ষে কাজ করি, যে সংস্থা অফিস রাইটার করে তোলে)
লিনকু থেকে এক্সএমএল করার একটি উপায় এখানে, নমুনা কোড সহ সম্পূর্ণ:
এক্সএমএলে লিনকুই সহ এক্সেল ডেটা দ্রুত আমদানি ও রপ্তানি করুন
এটি একটি সামান্য জটিল, যেহেতু আপনাকে নামস্থান এবং আরও কিছু আমদানি করতে হবে তবে এটি আপনাকে কোনও বাহ্যিক নির্ভরতা এড়াতে দেয়।
(এছাড়াও, অবশ্যই এটি ভিবি। নেট, সি # নয়, তবে আপনি এক্সএমএল লিটারেলগুলি ব্যবহার করতে নিজস্ব প্রকল্পের ভিবি। নেট স্টট সর্বদা বিচ্ছিন্ন করতে পারেন এবং সি # তে সমস্ত কিছু করতে পারেন))
ইনফ্রাজিস্টিকস বা সিঙ্কফিউশন এর মতো কিছু তৃতীয় পক্ষের উপাদান বিক্রেতারা খুব ভাল এক্সেল রপ্তানি ক্ষমতা সরবরাহ করে যার জন্য মাইক্রোসফ্ট এক্সেল ইনস্টল করা প্রয়োজন হয় না।
যেহেতু এই বিক্রেতারা উন্নত ইউআই গ্রিড উপাদানগুলি সরবরাহ করে, আপনি যদি আপনার অ্যাপ্লিকেশনটির ইউজার ইন্টারফেসে গ্রিডের বর্তমান অবস্থার নকল করতে একটি এক্সেল রফতানির স্টাইল এবং বিন্যাস চান তবে এই উপাদানগুলি বিশেষভাবে কার্যকর।
যদি আপনার রফতানিটি রফতানি হওয়া ডেটার উপর জোর দিয়ে এবং ইউআই-র কোনও লিঙ্ক না দিয়ে সার্ভারের পাশ দিয়ে চালিত করার উদ্দেশ্যে হয়, তবে আমি মুক্ত মুক্ত উত্স বিকল্পগুলির মধ্যে একটির (উদাহরণস্বরূপ এক্সেললিবারি) যেতে চাই।
আমি এর আগে মাইক্রোসফ্ট অফিস স্যুটে সার্ভার সাইড অটোমেশন ব্যবহার করার চেষ্টা করে এমন প্রকল্পগুলির সাথে জড়িত ছিলাম। এই অভিজ্ঞতার ভিত্তিতে আমি দৃ approach়ভাবে সেই পদ্ধতির বিরুদ্ধে সুপারিশ করব।
public class GridViewExportUtil
{
public static void Export(string fileName, GridView gv)
{
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.AddHeader(
"content-disposition", string.Format("attachment; filename={0}", fileName));
HttpContext.Current.Response.ContentType = "application/ms-excel";
using (StringWriter sw = new StringWriter())
{
using (HtmlTextWriter htw = new HtmlTextWriter(sw))
{
// Create a form to contain the grid
Table table = new Table();
// add the header row to the table
if (gv.HeaderRow != null)
{
GridViewExportUtil.PrepareControlForExport(gv.HeaderRow);
table.Rows.Add(gv.HeaderRow);
}
// add each of the data rows to the table
foreach (GridViewRow row in gv.Rows)
{
GridViewExportUtil.PrepareControlForExport(row);
table.Rows.Add(row);
}
// add the footer row to the table
if (gv.FooterRow != null)
{
GridViewExportUtil.PrepareControlForExport(gv.FooterRow);
table.Rows.Add(gv.FooterRow);
}
// render the table into the htmlwriter
table.RenderControl(htw);
// render the htmlwriter into the response
HttpContext.Current.Response.Write(sw.ToString());
HttpContext.Current.Response.End();
}
}
}
/// <summary>
/// Replace any of the contained controls with literals
/// </summary>
/// <param name="control"></param>
private static void PrepareControlForExport(Control control)
{
for (int i = 0; i < control.Controls.Count; i++)
{
Control current = control.Controls[i];
if (current is LinkButton)
{
control.Controls.Remove(current);
control.Controls.AddAt(i, new LiteralControl((current as LinkButton).Text));
}
else if (current is ImageButton)
{
control.Controls.Remove(current);
control.Controls.AddAt(i, new LiteralControl((current as ImageButton).AlternateText));
}
else if (current is HyperLink)
{
control.Controls.Remove(current);
control.Controls.AddAt(i, new LiteralControl((current as HyperLink).Text));
}
else if (current is DropDownList)
{
control.Controls.Remove(current);
control.Controls.AddAt(i, new LiteralControl((current as DropDownList).SelectedItem.Text));
}
else if (current is CheckBox)
{
control.Controls.Remove(current);
control.Controls.AddAt(i, new LiteralControl((current as CheckBox).Checked ? "True" : "False"));
}
if (current.HasControls())
{
GridViewExportUtil.PrepareControlForExport(current);
}
}
}
}
হাই এই সমাধানটি হ'ল আপনার গ্রিড ভিউটি আপনার এক্সেল ফাইলে রফতানি করা এটি আপনাকে সাহায্য করতে পারে
আপনি এই লাইব্রেরিটি ব্যবহার করে সুন্দরভাবে ফর্ম্যাট হওয়া এক্সেল ফাইল তৈরি করতে পারেন:
http://officehelper.codeplex.com/docamentation
নীচের নমুনা দেখুন:
using (ExcelHelper helper = new ExcelHelper(TEMPLATE_FILE_NAME, GENERATED_FILE_NAME))
{
helper.Direction = ExcelHelper.DirectionType.TOP_TO_DOWN;
helper.CurrentSheetName = "Sheet1";
helper.CurrentPosition = new CellRef("C3");
//the template xlsx should contains the named range "header"; use the command "insert"/"name".
helper.InsertRange("header");
//the template xlsx should contains the named range "sample1";
//inside this range you should have cells with these values:
//<name> , <value> and <comment>, which will be replaced by the values from the getSample()
CellRangeTemplate sample1 = helper.CreateCellRangeTemplate("sample1", new List<string> {"name", "value", "comment"});
helper.InsertRange(sample1, getSample());
//you could use here other named ranges to insert new cells and call InsertRange as many times you want,
//it will be copied one after another;
//even you can change direction or the current cell/sheet before you insert
//typically you put all your "template ranges" (the names) on the same sheet and then you just delete it
helper.DeleteSheet("Sheet3");
}
যেখানে নমুনা দেখতে দেখতে:
private IEnumerable<List<object>> getSample()
{
var random = new Random();
for (int loop = 0; loop < 3000; loop++)
{
yield return new List<object> {"test", DateTime.Now.AddDays(random.NextDouble()*100 - 50), loop};
}
}
সি # থেকে এক্সেল ফাইল তৈরির সহজ ও দ্রুততম উপায় হ'ল ওপেন এক্সএমএল উত্পাদনশীলতা সরঞ্জামটি ব্যবহার করা। ওপেন এক্সএমএল উত্পাদনশীলতা সরঞ্জামটি ওপেন এক্সএমএল এসডিকে ইনস্টলেশনের সাথে আসে। সরঞ্জামটি ইঞ্জিনিয়ারদের যে কোনও এক্সেল ফাইলকে সি # কোডে বিপরীত করে। এরপরে সি # কোডটি সেই ফাইলটি পুনরায় তৈরি করতে ব্যবহার করা যেতে পারে।
জড়িত প্রক্রিয়াটির একটি ওভারভিউ হ'ল:
DesiredLook.xlsx
।DesiredLook.xlsx
এবং উপরের কাছে কোড প্রতিবিম্বিত বোতামটি ক্লিক করুন।
বোনাস হিসাবে, এই পদ্ধতিটি যে কোনও ওয়ার্ড এবং পাওয়ারপয়েন্ট ফাইলগুলির জন্য কাজ করে। সি # বিকাশকারী হিসাবে, তারপরে আপনি আপনার প্রয়োজনীয়তার সাথে মানিয়ে নিতে কোডটিতে পরিবর্তন আনবেন।
আমি গিথুবে একটি সাধারণ ডাব্লুপিএফ অ্যাপ্লিকেশন তৈরি করেছি যা এই উদ্দেশ্যে উইন্ডোজ চলবে। এমন একটি স্থানধারক বলা হয় GeneratedClass
যেখানে আপনি উত্পন্ন কোডটি পেস্ট করতে পারেন paste আপনি যদি ফাইলটির একটি সংস্করণ ফিরে যান তবে এটি এর মতো একটি এক্সেল ফাইল তৈরি করবে:
সি # তে কিছু কার্যকর এক্সেল অটোমেশন আপনি নীচের লিঙ্কটি থেকে দেখতে পারেন।
http://csharp.net-informations.com/excel/csharp-excel-tutorial.htm
Bolton।
এক্সেল ফাইলগুলি কীভাবে তৈরি করবেন সে সম্পর্কে নমুনাগুলি দেখুন।
সি # এবং ভিবি.এনইটি-র উদাহরণ রয়েছে
এটি এক্সএসএল এক্সএসএলএক্স এবং সিএসভি এক্সেল ফাইল পরিচালনা করে।
xls
বাxlsx
ফাইল রয়েছে)। এটির কোনও প্রয়োজন নেই যে আপনার কম্পিউটারে এমন কোনও প্রোগ্রাম রয়েছে যা এটি পড়তে পারে (বলুন, বাইনারি)।