আমি কীভাবে মাইক্রোসফ্ট অফিস ইনস্টল না করে সি # তে একটি এক্সেল (.XLS এবং .XLSX) ফাইল তৈরি করব?


1888

কোড চালাচ্ছে এমন মেশিনে এক্সেল ইনস্টল করার প্রয়োজন ছাড়াই কীভাবে আমি সি # দিয়ে একটি এক্সেল স্প্রেডশিট তৈরি করতে পারি?


"... মিসেস অফিস ইনস্টল না করে?" প্রশ্নের অংশটি খুব অযৌক্তিক মনে হচ্ছে। আপনি একটি সি # প্রোগ্রাম থেকে যে কোনও ধরণের ফাইল তৈরি করতে পারেন (যার মধ্যে একটির সাথে একটি xlsবা xlsxফাইল রয়েছে)। এটির কোনও প্রয়োজন নেই যে আপনার কম্পিউটারে এমন কোনও প্রোগ্রাম রয়েছে যা এটি পড়তে পারে (বলুন, বাইনারি)।
মাইকে

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

5
ধরে নিই যে আপনি স্যান লাইব্রেরি বা বাহ্যিক কোডের জন্য কিছু করার চেষ্টা করছেন, আমি এক্সএলএস ফাইলের জন্য কথা বলতে পারব না, তবে এক্সএলএসএক্স ফাইলের জন্য, একটি বিদ্যমান ফাইলটি কেন, একটি জিপ ফাইলের নাম পরিবর্তন করে এবং সামগ্রীগুলি অন্বেষণ করে শুরু করবেন না? কিছুটা বিপরীত প্রকৌশল আপনাকে বলবে বেশ কিছুটা। বিভিন্ন ফোল্ডার এবং সাবফোল্ডারগুলিতে বিভিন্ন xML ফাইল এবং rels ফাইল রয়েছে। এটি অন্বেষণ করার চেষ্টা করুন এবং দেখুন যে এটি এমন কিছু কিনা যা আপনি অনুলিপি করতে পারেন বা দেখতে পারেন যে আপনি বিভিন্ন এক্সএমএল নেমস্পেস / স্কিমাতে ডকুমেন্টেশন পেতে পারেন কিনা।
আলেকজান্ডার রায়ান ব্যাগেট

এই টুইটটি অত্যন্ত কার্যকর ছিল! একটি পোস্ট জিপি সংরক্ষণাগার হিসাবে স্বয়ংক্রিয় প্রতিবেদন তৈরি এবং দস্তাবেজগুলি অন্বেষণ করার সময় এই পোস্টটি জুড়ে এসেছিল একটি ডকুমেন্ট ফাইল তৈরির ক্ষেত্রে কী অন্তর্দৃষ্টি দেয়।
সেন্টেন্টফ্লেস

উত্তর:


1053

আপনি এক্সেললিবারি নামে একটি লাইব্রেরি ব্যবহার করতে পারেন। এটি গুগল কোডে পোস্ট করা একটি ফ্রি, ওপেন সোর্স লাইব্রেরি:

ExcelLibrary

এটি আপনার উপরে উল্লিখিত পিএইচপি এক্সেল রাইটারের একটি বন্দর বলে মনে হচ্ছে। এটি নতুন .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);

এক্সেল ফাইল তৈরি করা তত সহজ। আপনি নিজে নিজে এক্সেল ফাইলও তৈরি করতে পারেন তবে উপরের কার্যকারিতাটি আমাকে সত্যই প্রভাবিত করেছে।


247
এক্সেললিবারি ব্যতিক্রমী ইপিপ্লাস - epplus.codeplex.com দ্বারা ছাড়িয়ে গেছে । জান নিয়মিত আপডেট করে। এটি ব্যবহার করে চলেছে এবং এটি আমাদের সাথে কাজ করেছি এমন একটি সেরা ওপেন সোর্স প্রকল্প।

3
এটি লক্ষ করা উচিত যে এক্সেললিবারিতে প্রচুর পারফরম্যান্স সমস্যা রয়েছে যখন বড় ডেটাসেটগুলি পরিচালনা করে (প্রচুর কলাম সহ 5000 সারি এর চেয়ে বেশি)। বর্তমানে কর্মক্ষেত্রে কোড বেসের একটি ভারী পরিবর্তন করছি যাতে আমরা এটি কোনও প্রকল্পে ব্যবহার করতে পারি।
রসিসডেড

ইপপ্লাস এক্সেল লাইব্রেরির তুলনায় অনেক কম বগী বলে মনে হচ্ছে, তবে এটি জিপিএল এবং সুতরাং ওপেন সোর্স প্রকল্পগুলির জন্য কেবল একটি সমাধান।
শেঠ


6
ক্লোজডএক্সএমএল সম্পর্কে কী ? আমি আপনার প্রকল্পে দরকারী প্রমাণ হতে পারে।
Amadeus সানচেজ

589

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


77
লাইসেন্স এখন এলজিপিএল, এখানে নোট প্রকাশ করুন: epplus.codeplex.com/releases/view/79802
সাইমন ডি

13
উদাহরণগুলি সহায়ক ছিল। আমি কয়েক ঘন্টার মধ্যে মাইক্রোসফ্ট ইন্টারপ লাইব্রেরি (ভয়াবহ ধীর) এই লাইব্রেরিতে (সংস্করণ 4.x) ব্যবহার করে আমার কোড পরিবর্তন করতে সক্ষম হয়েছি। আমার বেঞ্চমার্ক দুটি ট্যাব এবং প্রায় 750,000 কোষ সহ একটি ফাইল লিখে। এমএস ইন্টারপ ব্যবহার করে এটি 13 মিনিট সময় নেয়। ইপিপ্লাস ব্যবহার করে এটি 10 ​​সেকেন্ড সময় নিয়েছিল, প্রায় 80x স্পিডআপ। খুব খুশি!
পল চেরনোচ

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

4
@ পল চেরনোচ: আমরা খুব দ্রুত ইন্টারপ দিয়ে বড় এক্সেল শিটগুলি তৈরি করি। গোপনীয়তা একটি বাল্ক আপডেট করা হয়। একটি অবজেক্ট তৈরি করুন [,] ব্লক করুন, সেট আপ করুন, তারপরে সেই ম্যাট্রিক্সটি একবারে এক্সেলে লিখুন: এক্সেল ওয়ার্কশিট.জেট_রেঞ্জ (রেঞ্জ)। ভ্যালু 2 = ব্লক;
মার্ক মকেটন

2
দেখে মনে হচ্ছে যে লাইসেন্সগুলি এলজিপিএল থেকে পলিমফর্ম নন-বাণিজ্যিক 1.0.0 লাইসেন্সে চলেছে
লুক

175

এবং মাইক্রোসফ্ট অফিসের জন্য ওপেন এক্সএমএল এসডিকে 2.0 ব্যবহার করার বিষয়ে কী?

কয়েকটি সুবিধা:

  • অফিস ইনস্টল করা প্রয়োজন হয় না
  • মাইক্রোসফ্ট = শালীন এমএসডিএন ডকুমেন্টেশন দ্বারা তৈরি
  • একটি মাত্র। নেট প্রকল্পে ব্যবহার করতে হবে
  • ডিডিএফ, ডিগ্রিফিকেশন ইত্যাদির মতো অনেক সরঞ্জাম নিয়ে আসে

লিঙ্ক:


3
এটি লক্ষণীয় গুরুত্বপূর্ণ যে এর জন্য ডিএলএল কেবল 5 এমবি এর বেশি এবং অফিস 2007 ফর্ম্যাটগুলিতে সীমাবদ্ধ। তবে অবশ্যই সবচেয়ে সহজ এবং দ্রুত সমাধান যা আমার পক্ষে কাজ করে।
জোশ ব্রাউন 13

18
কেবলমাত্র একটি মাথা আপ যে ভি 2.5 আউট আছে এবং এখানে ডাউনলোড করা যায়
Snuffleupagus

10
এসডিকে এক্সএমএলকে ক্লাসগুলিতে মডেল করে, যাতে প্রতিটি এক্সএমএল ট্যাগ কোনও ট্যাগে ম্যাপ করা হয় এবং তারপরে আপনাকে ক্লাসের স্তরক্রমটি তৈরি করতে হবে (প্রতিটি উদাহরণে শিশুদের উদাহরণ / ট্যাগগুলির সংকলন রয়েছে)। এর অর্থ আপনাকে একটি এক্সেল ফাইলের এক্সএমএল কাঠামোটি জানতে হবে, যা খুব জটিল। উপরে উল্লিখিত ইপিপ্লাসের মতো একটি মোড়ক ব্যবহার করা অনেক সহজ, যা জিনিসগুলিকে সরল করে।
সোশি আশের

2
মাইক্রোসফ্ট ওপেন এক্সএমএল এসডিকে একটি দুর্দান্ত নমুনা - ওপেন এক্সএমএল রাইটারটি পলিম্যাথপ্রোগ্রামার
গ্রেগ

4
আমি মাইক্রোসফ্ট ওপেন এক্সএমএল এসডিকে ওপেন এক্সএমএল রাইটারকে দুর্দান্ত দেখতে পেয়েছি। উপরের সমাধানগুলি ব্যবহার করে (বিশেষত ভিনসেন্ট টমের নমুনা (পলি ম্যাথ)), এমন একটি লেখক তৈরি করা সহজ যা প্রচুর পরিমাণে ডেটা প্রবাহিত করে, এবং রেকর্ডগুলি এমনভাবে উপস্থাপন করে যা আপনি যা করতে চান তার চেয়ে বেশি জটিল নয় writes যে CSV; তবে আপনি পরিবর্তে এক্সএমএল লিখছেন। ওপেন এক্সএমএল হ'ল এমন মানসিকতা যা মাইক্রোসফ্ট এটির নতুন অফিস ফর্ম্যাটগুলিকে বিবেচনা করে। এবং আপনি যদি তাদের এক্সএমএল বিষয়বস্তুতে পোকার মতো মনে করেন তবে আপনি সর্বদা .xslx থেকে .zip ফাইলগুলিতে নাম পরিবর্তন করতে পারেন।
গ্রেগ

167

আমি নিম্নলিখিত ওপেন সোর্স প্রকল্পগুলি সাফল্যের সাথে ব্যবহার করেছি:

  • OOXML ফর্ম্যাটগুলির জন্য এক্সেলপ্যাকেজ (অফিস 2007)

  • .XLS ফর্ম্যাটের জন্য অফিস (2003) N এনপিওআই ২.০ (বিটা) এক্সএলএসএক্স সমর্থন করে।

আমার ব্লগ পোস্টগুলি একবার দেখুন:

এক্স # স্প্রেডশিট তৈরি করা হচ্ছে। সিএলে এক্সএলএস এবং .এক্সএলএসএক্স

এক্সেল টেবিল এবং গতিশীল চার্ট সহ এনপিওআই


6
এনপিওআই-তে একটি নোট - সারি এবং কলামের উল্লেখগুলি শূন্য-ভিত্তিক। একটি বিদ্যমান টেমপ্লেট পপুলেশন জন্য ভাল কাজ করে।
জন এম

108

আপনি এক্সেল ফাইলগুলি তৈরি এবং পরিচালনা করতে 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();
}

সম্পাদনা - আরও কিছু লিঙ্ক:


4
এক্স 64 এ চলাকালীন কেউ যদি এটি কাজ করে তা নিশ্চিত করতে পারবেন? আমি নিশ্চিত যে আপনার অ্যাপটি 32-বিট মোডে সংকলিত বা চলমান থাকলে জেট কেবলমাত্র কাজ করে।
লামার

2
আমি এই সংযোগটি মাত্র পরীক্ষা করেছি এবং এটি একটি উইন্ডোজ সার্ভার ২০০৮ আর ২ এক্স R৪ আরসিতে ব্যর্থ হয়েছে, মনে হয় 2007 অফিস সিস্টেম ড্রাইভার ইনস্টল করতে হবে: ডেটা সংযোগের উপাদানগুলি [ মাইক্রোসফট.ডাউনলোডস
জি

25
এটির সাথে খুব সাবধানতা অবলম্বন করুন - এটি একটি বড় কদর্য ক্লেজ (উদাহরণস্বরূপ, কখনও কখনও এটি একটি কলামের ধরণের অনুমান করে এবং সমস্ত ডেটা খাপ খায় না যা ফিট করে না)।
dbkk

9
এই পদ্ধতিটি ব্যবহার করা হলে একজনকে খুব সতর্ক হওয়া উচিত। আমি এটি এমন ডেটার জন্য খুব অদৃশ্য পেয়েছি যা নিখুঁত বিন্যাসে নেই।
কেনি মান

9
বড় প্রকল্পে ওলেডিবি ব্যবহার করতে হয়েছিল এমন ব্যক্তি হিসাবে, আমি বলি এটি থেকে থাকুন! এটি কখনও কখনও কোনও সেল মান পুনরুদ্ধার করতে সক্ষম হয় না কারণ এটি ফর্ম্যাটটি বুঝতে পারে না। এটিতে মুছে ফেলা অপারেশন নেই। এমনকি সামান্য সরবরাহকারী পরিবর্তনের সাথেও এটি সম্পূর্ণ আলাদা এবং অনির্দেশ্য কাজ করে। আমি বলব একটি প্রমাণিত বাণিজ্যিক সমাধানের জন্য যান।
ক্যানার Öncü

80

.NET- এর বাণিজ্যিক সমাধান, স্প্রেডশিটগিয়ার এটি করবে।

আপনি লাইভ ASP.NET (C # এবং ভিবি) নমুনা দেখতে পারেন এখানে ডাউনলোড মূল্যায়ন সংস্করণ এখানে

দাবি অস্বীকার: আমি স্প্রেডশিটগিয়ার এলএলসি এর মালিক


10
আপনার দুর্দান্ত পণ্য রয়েছে তবে আমি মনে করি এখানকার অনেক লোক বিনামূল্যে সমাধানের প্রত্যাশা করছেন। এটি ডাউন ভোটগুলি ব্যাখ্যা করতে পারে।
md1337

65

আমি কয়েকটি বিকল্প ব্যবহার করেছি:

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

আমার সমস্ত নতুন প্রকল্পের জন্য, যদিও আমি অ্যাপাচি পিওআইয়ের নেট নেট বন্দর এনপিওআই ব্যবহার করছি । এনপিওআই ২.০ (আলফা) এক্সএলএসএক্স সমর্থন করে।


এক্সএলএস সমর্থন করা প্রয়োজন হলে এক্সেলপ্যাকেজ সম্পর্কে সতর্কতা অবলম্বন করুন। এটির সাথে আমার বেশ কষ্ট হয়েছিল এবং অবশেষে এক্সেললিবারিতে স্যুইচ হয়ে গেল।
জেরেমি

অবশ্যই সত্য. এক্সএলএসএক্স সমর্থন প্রয়োজন হলে এক্সেলপ্যাকেজ / এক্সএমএল কেবলমাত্র একটি ভাল বিকল্প need
নাট

5
নোট করুন যে এক্সেলপ্যাকেজের উত্তরসূরি রয়েছে: ইপিপ্লাস ( epplus.codeplex.com ) যা এক্সএলএসএক্স সমর্থন করে। উদাহরণস্বরূপ এনপিওআইয়ের সাথে তুলনা করা আমার একমাত্র উদ্বেগ, পারফরম্যান্স, যেমন যখন প্রচুর কলাম থাকে।
প্রগম্যাটেক

63

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

আমি বুঝতে পারি যে আপনি এটি কোনও ওয়েব অ্যাপ্লিকেশনটিতে কোডিং করছেন না, তবে এইচটিএমএল টেবিলের মাধ্যমে এক্সেল ফাইলের সংমিশ্রণের উদাহরণ এখানে রয়েছে । আপনি যদি কোন কনসোল অ্যাপ, ডেস্কটপ অ্যাপ্লিকেশন বা পরিষেবা কোড করে থাকেন তবে এই কৌশলটি ব্যবহার করা যেতে পারে।


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

3
এই সমাধানটি আমার পক্ষে ভাল কাজ করেছে, কেবলমাত্র নোট করুন আপনি .xlsx এক্সটেনশনটি ব্যবহার করতে পারবেন না
জিল

আমার সংস্থার কিছু লোক Office 2010 এবং তদূর্ধের মাধ্যমে এইভাবে তৈরি এক্সেল ফাইলগুলি খুলতে পারে না। সমস্যা কী তা জানেন না তবে আমাকে নিজের ওপেনএক্সএমএল বাস্তবায়নটি রোল করতে হয়েছিল। (সোগারের উত্তর দেখুন)
ক্রিস্টেন

49

আপনি যদি এক্সেল তৈরি করেন 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");

9
আমি এটি এমন প্রকল্পে ব্যবহার করার চেষ্টা করেছি যা বেশ বড় আকারের এক্সেল শিট তৈরি করে। দুর্দান্ত গ্রন্থাগার, তবে কার্য সম্পাদনে অত্যন্ত দুর্বল। আমি যে প্রকল্পে কাজ করছি তার জন্য আমি কেবল একটি তুলনা করেছি: ক্লোজডএক্সএমএল (বনাম 0.53.3) 92,489 এমএস নিয়েছে যেখানে পরীক্ষার জন্য ইপিপ্লাস (বনাম 2.9.03 - আমরা ব্যবহার করতে পারি না কারণ এটি জিপিএল) 16,500 এমএস নিয়েছিল।
দ্রুড

1
@ ড্রুড লাইসেন্সটি এলজিপিএল ধরেই নিয়েছে আপনি ক্লোজড এক্সএমএল থেকে সোর্স কোডটি সংশোধন করবেন না এটি epplus.codeplex.com/license
ক্রিস মেরিসিক


47

আপনি আসলে সি # তে উপলব্ধ ইন্টারপ ক্লাসগুলি পরীক্ষা করতে চাইতে পারেন (উদাঃ Microsoft.Office.Interop.Excelআপনি কোনও ওএলই বলেন না (যা এটি নয়) তবে আন্তঃবিদ্যালয়ের ক্লাসগুলি ব্যবহার করা খুব সহজ। এখানে সি # ডকুমেন্টেশন পরীক্ষা করে দেখুন (এক্সেলের জন্য ইন্টারপ শুরু হয়) সি # পিডিএফ এর 1072 পৃষ্ঠা)।

আপনি যদি তাদের চেষ্টা না করেন তবে আপনি মুগ্ধ হতে পারেন।

এই সম্পর্কে মাইক্রোসফ্টের অবস্থান সম্পর্কে সতর্ক করা উচিত :

মাইক্রোসফ্ট বর্তমানে কোনও অযৌক্তিক, অ-ইন্টারেক্টিভ ক্লায়েন্ট অ্যাপ্লিকেশন বা উপাদান (এএসপি, এএসপি.এনইটি, ডিসিওএম, এবং এনটি পরিষেবাদি সহ) থেকে মাইক্রোসফ্ট অফিস অ্যাপ্লিকেশনগুলির অটোমেশন প্রস্তাবনা দেয় এবং সমর্থন করে না, কারণ অফিস অস্থির আচরণ এবং / অথবা অফিস যখন এই পরিবেশে চালিত হয় তখন অচল।


6
তবে আপনাকে অবশ্যই নিশ্চিত করতে হবে যে আপনি সবকিছু ম্যানুয়ালি নিষ্পত্তি করবেন, অন্যথায় আপনি মেমরি ফাঁস করবেন
MagicKat

8
@ রিকি বি: এছাড়াও, ইন্টারপের সাথে আমার অভিজ্ঞতাতে এটি এক্সেল ব্যবহার করে। যতবার আমরা এটি ব্যবহার করেছি, এক্সেলটি মেশিনে ইনস্টল না করা থাকলে আমরা COM ব্যতিক্রম পেয়ে যাব।
ম্যাজিক্যাট

1
OLE এর সাথে, এমনকি খুব সাবধানে নিষ্পত্তি করেও শেষ পর্যন্ত এটি মেমরি ফাঁস করে বা ক্র্যাশ করে। এটি উপস্থিত থাকা অ্যাপ্লিকেশন / ওয়ার্কস্টেশনগুলির জন্য যুক্তিযুক্তভাবে ঠিক আছে, তবে সার্ভারগুলির জন্য সুপারিশ করা হয় না (এমএসের একটি কেবি রয়েছে এটি উল্লেখ করে)। আমাদের সার্ভারের জন্য, আমরা কেবল এটি রাত্রে রিবুট করি। আবার, যে ঠিক কাজ করে।
জেনিফার জুইক

11
@ জিফ্রে: আহ ঠিক আছে আপনি আমাকে এটির জন্য কাজ করতে চলেছেন :) -> সমর্থন. microsoft.com/kb/257757 মাইক্রোসফ্ট বর্তমানে কোনও অযৌক্তিক, অ- ইন্টারেক্টিভ ক্লায়েন্ট অ্যাপ্লিকেশন ...
জেনিফার জোউক

4
ইন্টারপ নিয়ে এক সপ্তাহেরও বেশি লড়াইয়ের পরে আমি এই আলোচনায় আসছি এবং যদি আপনার প্রয়োজনগুলি খুব সহজ না হয় তবে এটি কাজ করবে না। আপনার স্প্রেডশিটটি ফর্ম্যাট করার জন্য সমর্থনটি অতি সামান্য, এটি যুক্তিযুক্তভাবে একটি xx ফাইল উত্পন্ন করার কারণ এবং কেবল একটি ফ্ল্যাট .csv ফাইল নয়। উদাহরণস্বরূপ, আপনি কি কোনও ঘরে 911 টিরও বেশি অক্ষরের আউটপুট দেওয়ার চেষ্টা করেছেন, বা আপনি ধারাবাহিকভাবে মার্জড কক্ষগুলির প্রস্থকে সেট করার চেষ্টা করেছেন? আমার কাছে আছে এবং আমি আপনাকে এখন বলতে পারি না যে আমি এখন এই কঙ্কালটিকে কতটা ঘৃণা করি ... নিজেকে অনুগ্রহ করুন এবং এই আলোচনায় উল্লিখিত একটি বিনামূল্যে লাইব্রেরির সাথে যান।
md1337

34

এখানে একটি সম্পূর্ণ বিনামূল্যে C # এর গ্রন্থাগার, যা আপনি একটি থেকে রফতানি করতে দেয় এর DataSet, DataTableবা List<>একটি জেনুইন এক্সেল 2007 .xlsx ফাইলে, OpenXML লাইব্রেরি ব্যবহার করছে:

http://mikesknowledgebase.com/pages/CSharp/ExportToExcel.htm

নির্দেশাবলী এবং একটি ডেমো অ্যাপ্লিকেশন সহ নিখরচায় - সম্পূর্ণ উত্স কোড সরবরাহ করা হয়।

আপনার অ্যাপ্লিকেশনটিতে এই শ্রেণিটি যুক্ত করার পরে, আপনি কেবলমাত্র এক লাইনের কোডের মধ্যে আপনার ডেটাসেটটি এক্সেলে এক্সপোর্ট করতে পারেন:

CreateExcelFile.CreateExcelDocument(myDataSet, "C:\\Sample.xlsx");

এটি এর চেয়ে সহজ কিছু পায় না ...

এবং এটি এমনকি আপনার সার্ভারে উপস্থিত থাকা এক্সেলের প্রয়োজন নেই।


1
এটি কিছুটা বিভ্রান্তিকর বলে মনে হচ্ছে, আপনি সমস্ত বৈশিষ্ট্য পেতে অনুদানের জন্য বলছেন।
UrbanEsc

এটি আংশিক সত্য: সম্পূর্ণ বিনামূল্যে সংস্করণটি আপনার জন্য একটি নিখুঁত .xlsx ফাইল উত্পন্ন করবে এবং সমস্ত উত্স কোড সরবরাহ করা হবে। যদি আপনি এই দুটি দাতব্য প্রতিষ্ঠানের মধ্যে 10 ডলার বা তারও বেশি দান করেন (যার মধ্যে আমি একেবারে কিছুই পাই না), তবে আপনি একটি "আরও ভাল" সংস্করণ পাবেন যাতে কীভাবে ফর্ম্যাটিং, তারিখ ইত্যাদি করা যায় তৃতীয় পক্ষের পণ্যগুলির দাম দেওয়া হয়, আমি গণনা করি পরিবর্তে একটি ভাল কারণ জন্য 10 ডলার দান এটি ভাল মূল্য!
মাইক গ্লেডহিল

26

আপনি এক্সএমএল স্প্রেডশিট 2003 ফর্ম্যাট ব্যবহার করে আপনার ফাইলগুলি তৈরির বিষয়ে বিবেচনা করতে পারেন । এটি একটি ডকুমেন্টেড স্কিমা ব্যবহার করে একটি সাধারণ এক্সএমএল ফর্ম্যাট ।


23

আপনি জেমবক্স.স্প্রেডশীটটি একবার দেখে নিতে পারেন ।

তাদের সমস্ত বৈশিষ্ট্য সহ একটি বিনামূল্যে সংস্করণ রয়েছে তবে শিট প্রতি 150 সারি এবং ওয়ার্কবুক প্রতি 5 টি শীট সীমাবদ্ধ, যদি এটি আপনার প্রয়োজনের মধ্যে পড়ে।

আমার নিজের এটি এখনও ব্যবহার করার দরকার হয়নি তবে আকর্ষণীয় দেখাচ্ছে।


21

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

কোড নমুনা:

//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 মিলিয়ন মার্কিন ডলার) কমিউনিটি লাইসেন্স প্রোগ্রামের মাধ্যমে সম্পূর্ণ নিয়ন্ত্রণের স্যুটটি বিনামূল্যে পাওয়া যায় । দ্রষ্টব্য: আমি সিঙ্কফিউজনের জন্য কাজ করি।


18

আমরা হব,

আপনি যেমন তৃতীয় পক্ষের লাইব্রেরি Aspose ব্যবহার করতে পারেন ।

এই গ্রন্থাগারের সুবিধা রয়েছে যে এটির জন্য আপনার মেশিনে এক্সেল ইনস্টল করার দরকার নেই যা আপনার ক্ষেত্রে আদর্শ হবে।


আরও সুনির্দিষ্টভাবে বলতে গেলে , আপনি .NET অ্যাপ্লিকেশনটিতে এক্সেল (এক্সএলএস, এক্সএলএসএক্স) ফাইল তৈরি করতে আপনি .NET এর জন্য Aspose.Cells ব্যবহার করতে পারেন ।
শাহজাদ লতিফ

9
হ্যাঁ আপনি করতে পারেন, যদি আপনি সর্বনিম্ন লাইসেন্স ফি $ 999 প্রদান করতে কিছু মনে করেন না। মাইকসকলেজবেস লাইব্রেরিটি চেষ্টা করুন ... যা এর চেয়ে 999 ডলার কম !!
মাইক গ্লেডহিল

17

ওপেনএক্সএমএল একটি ভাল বিকল্প যা সার্ভারে এমএস এক্সেল ইনস্টল করা এড়াতে সহায়তা করে Microsoft মাইক্রোসফ্ট সরবরাহিত ওপেন এক্সএমএল এসডিকে ২.০ ওপেন এক্সএমএল প্যাকেজগুলি এবং একটি প্যাকেজের মধ্যে অন্তর্নিহিত ওপেন এক্সএমএল স্কিমা উপাদানগুলি পরিচালনা করার কাজটি সহজ করে। ওপেন এক্সএমএল অ্যাপ্লিকেশন প্রোগ্রামিং ইন্টারফেস (এপিআই) অনেকগুলি সাধারণ কাজকে আবশ্যক করে যা বিকাশকারীরা ওপেন এক্সএমএল প্যাকেজগুলিতে সম্পাদন করে।

এটি ওপেনএক্সএমএল দেখুন: বিকল্প যা সার্ভারে এমএস এক্সেল ইনস্টল করা এড়াতে সহায়তা করে


17

বিভিন্ন অফিস 2003 এক্সএমএল লাইব্রেরি ছোট এক্সেল ফাইলগুলির জন্য সহজলভ্য কাজ করে। তবে, এক্সএমএল ফর্ম্যাটে সংরক্ষিত একটি বড় ওয়ার্কবুকের নিছক আকারটি একটি সমস্যা হিসাবে দেখতে পাচ্ছি। উদাহরণস্বরূপ, এর সাথে আমি যে ওয়ার্কবুকটি নিয়ে কাজ করি তা নতুনতে 40MB হবে (এবং স্বীকারযোগ্যভাবে আরও দৃ tight়ভাবে প্যাক করা) এক্সএলএসএক্স ফর্ম্যাটটি 360MB এক্সএমএল ফাইল হয়ে যায়।

আমার গবেষণা যতদূর আমাকে নিয়ে গেছে, দুটি বাণিজ্যিক প্যাকেজ রয়েছে যা পুরানো বাইনারি ফাইল ফর্ম্যাটে আউটপুট দেয় allow তারা হ'ল:

উভয়ই সস্তা নয় (যথাক্রমে 500 ইউএসডি এবং 800 ইউএসডি, আমার মনে হয়)। তবে দু'জনেই এক্সেল নিজে থেকেই স্বতন্ত্র কাজ করে।

আমি কী সম্পর্কে কৌতূহলী হব তা হ'ল ওপেন অফিস.গ্রন্থের পছন্দগুলির জন্য এক্সেল আউটপুট মডিউল। আমি ভাবছি তাদের জাভা থেকে। নেট এ পোর্ট করা যায় কিনা।


এটি একা। নেট এবং জাভা উভয় ক্ষেত্রেই কাজ করে এবং ব্যয়বহুল নয়। স্মার্টএক্সএলএস স্মার্টএক্সলস.কম
লিয়া

15

আমি এক্সএমএল স্প্রেডশিট তৈরির বিষয়ে একমত, এটি সি # 3 এর জন্য কীভাবে করা যায় তার একটি উদাহরণ এখানে রয়েছে (প্রত্যেকে ভিবি 9: পি-তে এটি ব্লগ করে) http://www.aaron-powell.com/linq-to-xML-to- সীমা অতিক্রম করা


15

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

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

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


15

আমি 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();
    }

1
নিবন্ধটি যেমনটি বলেছে, এটি এক্সএমএল যে এক্সেলটি আসলে একটি এক্সএলএস ফাইল হওয়ার চেয়ে পড়বে, যার অর্থ এটি কেবল এক্সেলেই কাজ করতে পারে এবং স্প্রেডশিট পড়তে পারে এমন অন্যান্য প্রোগ্রাম নয়। তবে এটি এখানে সমতুল্য HTML টেবিলের উত্তরগুলির চেয়ে ভাল!
রুপ

Xlsx সমর্থন করে ? ওপেনএক্সএমএল ?
কিকিনেট

14

তৃতীয় পক্ষের সমাধানে কেবলমাত্র অন্য একটি রেফারেন্স যুক্ত করতে চান যা আপনার সমস্যাটিকে সরাসরি সম্বোধন করে: http://www.officewriter.com

(অস্বীকৃতি: আমি সফটআর্টিসানদের পক্ষে কাজ করি, যে সংস্থা অফিস রাইটার করে তোলে)



12

লিনকু থেকে এক্সএমএল করার একটি উপায় এখানে, নমুনা কোড সহ সম্পূর্ণ:

এক্সএমএলে লিনকুই সহ এক্সেল ডেটা দ্রুত আমদানি ও রপ্তানি করুন

এটি একটি সামান্য জটিল, যেহেতু আপনাকে নামস্থান এবং আরও কিছু আমদানি করতে হবে তবে এটি আপনাকে কোনও বাহ্যিক নির্ভরতা এড়াতে দেয়।

(এছাড়াও, অবশ্যই এটি ভিবি। নেট, সি # নয়, তবে আপনি এক্সএমএল লিটারেলগুলি ব্যবহার করতে নিজস্ব প্রকল্পের ভিবি। নেট স্টট সর্বদা বিচ্ছিন্ন করতে পারেন এবং সি # তে সমস্ত কিছু করতে পারেন))


12

ইনফ্রাজিস্টিকস বা সিঙ্কফিউশন এর মতো কিছু তৃতীয় পক্ষের উপাদান বিক্রেতারা খুব ভাল এক্সেল রপ্তানি ক্ষমতা সরবরাহ করে যার জন্য মাইক্রোসফ্ট এক্সেল ইনস্টল করা প্রয়োজন হয় না।

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

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

আমি এর আগে মাইক্রোসফ্ট অফিস স্যুটে সার্ভার সাইড অটোমেশন ব্যবহার করার চেষ্টা করে এমন প্রকল্পগুলির সাথে জড়িত ছিলাম। এই অভিজ্ঞতার ভিত্তিতে আমি দৃ approach়ভাবে সেই পদ্ধতির বিরুদ্ধে সুপারিশ করব।


12
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);
            }
        }
    }
}

হাই এই সমাধানটি হ'ল আপনার গ্রিড ভিউটি আপনার এক্সেল ফাইলে রফতানি করা এটি আপনাকে সাহায্য করতে পারে


7
না, এটি প্রকৃত এক্সেল ফাইলের চেয়ে এক্সেল ফাইল হিসাবে চিহ্নিত এইচটিএমএল তৈরি করে। হ্যাঁ, এক্সেল নিজেই ওকে খুলবে তবে অন্যান্য প্রোগ্রামগুলি যা স্প্রেডশিট গ্রহণ করে - মাইক্রোসফ্টের ফ্রি এক্সেল ভিউয়ার সহ - এটি গ্রহণ করবে না। আপনি এখানে একটি লাইব্রেরি ব্যবহার করে একটি বাস্তব এক্সেল ফাইল তৈরি করতে আরও ভাল করতে চাই।
রূপ

আপনার স্ট্রিং সংযোজনের পরিবর্তে বিষয়বস্তু-বিবরণ শিরোনামের পাঠ্য উত্পন্ন করতে System.Net.Mime.ContentDisposition ব্যবহার করা উচিত - যা স্পেস ইত্যাদির ফাইল নাম সহ সঠিকভাবে মোকাবেলা করবে।
রূপ

12

আপনি এই লাইব্রেরিটি ব্যবহার করে সুন্দরভাবে ফর্ম্যাট হওয়া এক্সেল ফাইল তৈরি করতে পারেন: 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};
    }
}

10

সি # থেকে এক্সেল ফাইল তৈরির সহজ ও দ্রুততম উপায় হ'ল ওপেন এক্সএমএল উত্পাদনশীলতা সরঞ্জামটি ব্যবহার করা। ওপেন এক্সএমএল উত্পাদনশীলতা সরঞ্জামটি ওপেন এক্সএমএল এসডিকে ইনস্টলেশনের সাথে আসে। সরঞ্জামটি ইঞ্জিনিয়ারদের যে কোনও এক্সেল ফাইলকে সি # কোডে বিপরীত করে। এরপরে সি # কোডটি সেই ফাইলটি পুনরায় তৈরি করতে ব্যবহার করা যেতে পারে।

জড়িত প্রক্রিয়াটির একটি ওভারভিউ হ'ল:

  1. টুলটি সহ ওপেন এক্সএমএল এসডিকে ইনস্টল করুন।
  2. পছন্দসই চেহারা সহ সর্বশেষতম এক্সেল ক্লায়েন্ট ব্যবহার করে একটি এক্সেল ফাইল তৈরি করুন। এর নাম দিন DesiredLook.xlsx
  3. সরঞ্জামটি খুলুন DesiredLook.xlsxএবং উপরের কাছে কোড প্রতিবিম্বিত বোতামটি ক্লিক করুন। এখানে চিত্র বর্ণনা লিখুন
  4. আপনার ফাইলের জন্য সি # কোডটি সরঞ্জামটির ডান প্যানে তৈরি করা হবে। এটি আপনার সি # সমাধানে যুক্ত করুন এবং সেই পছন্দসই চেহারা দিয়ে ফাইলগুলি তৈরি করুন।

বোনাস হিসাবে, এই পদ্ধতিটি যে কোনও ওয়ার্ড এবং পাওয়ারপয়েন্ট ফাইলগুলির জন্য কাজ করে। সি # বিকাশকারী হিসাবে, তারপরে আপনি আপনার প্রয়োজনীয়তার সাথে মানিয়ে নিতে কোডটিতে পরিবর্তন আনবেন।

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

এখানে চিত্র বর্ণনা লিখুন


1
আমি এই ওপেন এক্সএমএল এসডিকে সমাধানটি এখনও চেষ্টা করি নি তবে বাহ, আমি অবশ্যই এটি পরীক্ষা করে দেখব। আমি অনেক বছর ধরে এই জাতীয় সরঞ্জামগুলির সাথে কাজ করেছি এবং এটি সম্পর্কে জানি না। .NET: github.com
নেবুল্যাক্স


8

এক্সেল ফাইলগুলি কীভাবে তৈরি করবেন সে সম্পর্কে নমুনাগুলি দেখুন।

সি # এবং ভিবি.এনইটি-র উদাহরণ রয়েছে

এটি এক্সএসএল এক্সএসএলএক্স এবং সিএসভি এক্সেল ফাইল পরিচালনা করে।

http://www.devtriogroup.com/ExcelJetcell/Samples

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.