मैं Microsoft Office को स्थापित किए बिना C # में Excel (.XLS और .XLSX) फ़ाइल कैसे बनाऊँ?


1888

जिस मशीन में कोड चल रहा है, उस पर एक्सेल स्थापित किए बिना मुझे C # के साथ एक एक्सेल स्प्रेडशीट कैसे बना सकते हैं?


सुश्री कार्यालय स्थापित किए बिना "...?" सवाल का हिस्सा बहुत ही अव्यवसायिक लगता है। आप C # प्रोग्राम से किसी भी प्रकार की फ़ाइल उत्पन्न कर सकते हैं ( xlsया xlsxफ़ाइल उनमें से एक होने के साथ )। यह कोई आवश्यकता नहीं है कि आपके कंप्यूटर पर एक प्रोग्राम है जो इसे पढ़ सकता है (जैसे, बाइनरी)।
माइक

30
@ माइक "एक्सेल की आवश्यकता के बिना स्थापित किया जा सकता है" टुकड़ा का पेशेवर होने से कोई लेना-देना नहीं है। यह निर्भरता के बारे में है। प्रश्न का मूल पाठ इस रूप में दिया गया था: "आदर्श रूप से, मैं खुले स्रोत को पसंद करूंगा ताकि मुझे अपने कोड में किसी तीसरे पक्ष की निर्भरता को जोड़ना न पड़े, और मैं फ़ाइल बनाने के लिए सीधे Excel का उपयोग करने से बचना चाहूंगा (OLE का उपयोग करके) स्वचालन।) " यह दुर्भाग्यपूर्ण है कि सवाल काफी सरल किया गया था।
टोनी

5
यह मानते हुए कि आप कुछ sans पुस्तकालय या बाहरी कोड करने की कोशिश कर रहे हैं, मैं xls फ़ाइल के लिए नहीं बोल सकता, लेकिन xlsx फ़ाइलों के लिए, क्यों नहीं एक मौजूदा एक लेने से शुरू करके, इसे ज़िप फ़ाइल में बदलकर और सामग्री की खोज की? थोड़ा सा उल्टा इंजीनियरिंग आपको काफी कुछ बताएगा। कई अलग-अलग xml फ़ाइलें हैं और विभिन्न फ़ोल्डरों और सबफ़ोल्डर्स में फ़ाइलों को रिले करती हैं। यह देखने की कोशिश करें और देखें कि क्या यह ऐसा कुछ है जिसे आप दोहरा सकते हैं या देख सकते हैं कि क्या आप विभिन्न xml नामस्थान / स्कीमा पर प्रलेखन पा सकते हैं।
अलेक्जेंडर रयान बैजट

@AlexanderRyanBaggett यह बेहद मददगार था! ऑटोमैटिक रिपोर्ट जनरेशन पर काम करते हुए और जिप आर्काइव के रूप में डॉक्यूमेंट्स की खोज करते हुए इस पोस्ट पर आया कि डॉक्यूमेंट फाइल बनाने में क्या जाता है।
सेंटिनफलेश

जवाबों:


1053

आप ExcelLibrary नामक लाइब्रेरी का उपयोग कर सकते हैं। यह एक मुक्त, खुला स्रोत पुस्तकालय है जो Google कोड पर पोस्ट किया गया है:

ExcelLibrary

यह PHP ExcelWriter का एक पोर्ट प्रतीत होता है जिसका आपने ऊपर उल्लेख किया था। यह अभी तक नए .xlsx प्रारूप में नहीं लिखेगा, लेकिन वे उस कार्यक्षमता को जोड़ने पर काम कर रहे हैं।

यह बहुत ही सरल, छोटा और उपयोग में आसान है। साथ ही इसमें एक DataSetHelper है जिससे आप Excel डेटा के साथ आसानी से काम करने के लिए DataSets और DataTables का उपयोग कर सकते हैं।

ExcelLibrary अभी भी पुराने एक्सेल प्रारूप (.xls फ़ाइलों) के लिए ही काम करती है, लेकिन भविष्य में नए HD प्रारूप के लिए भविष्य में समर्थन जोड़ सकती है।

आप EPPlus का भी उपयोग कर सकते हैं , जो केवल Excel 2007/2010 प्रारूप फ़ाइलों (.xlsx फ़ाइलों) के लिए काम करता है। इसमें NPOI भी है जो दोनों के साथ काम करता है।

प्रत्येक पुस्तकालय के साथ कुछ ज्ञात कीड़े हैं जो टिप्पणियों में वर्णित हैं। समय बीतने के साथ-साथ, EPPlus सबसे अच्छा विकल्प लगता है। यह अधिक सक्रिय रूप से अद्यतन और प्रलेखित होने लगता है।

नीचे दिए गए @ Артём asарионов के अनुसार, EPPlus के पास पिवट टेबल्स के लिए समर्थन है और ExcelLibrary में कुछ समर्थन हो सकता है ( ExcelLibrary में पिवट टेबल इशू )

त्वरित संदर्भ के लिए यहां कुछ लिंक दिए गए हैं:
ExcelLibrary - GNU Lesser GPL
EPPlus - GNU लेसर जनरल पब्लिक लाइसेंस (LGPL)
NPOI - Apache लाइसेंस

यहाँ ExcelLibrary के लिए कुछ उदाहरण कोड दिए गए हैं:

यहाँ एक डेटाबेस से डेटा लेने और उससे एक कार्यपुस्तिका बनाने का एक उदाहरण है। ध्यान दें कि ExcelLibrary कोड नीचे की ओर सिंगल लाइन है:

//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
ExcelLibrary को असाधारण EPPlus - epplus.codeplex.com द्वारा अधिगृहीत किया गया है । जान इसे नियमित रूप से अपडेट करता है। इसका उपयोग करते रहे हैं और यह उन बेहतरीन ओपन सोर्स प्रोजेक्ट्स में से एक है, जिनके साथ हमने काम किया है।
मार्क एक

3
यह ध्यान दिया जाना चाहिए कि बड़े डेटासेट (बहुत सारे स्तंभों के साथ 5000 पंक्तियों से बड़ा) के साथ काम करते समय ExcelLibrary में बहुत सारे प्रदर्शन मुद्दे हैं। वर्तमान में काम पर कोड आधार का एक भारी संशोधन कर रहा है ताकि हम इसे एक परियोजना में उपयोग कर सकें।
रॉसदिसड

EPPlus, ExcelLibrary की तुलना में बहुत कम छोटी है, लेकिन यह GPL है और इसलिए केवल ओपन सोर्स प्रोजेक्ट्स के लिए एक समाधान है।
सेठ


6
ClosedXML के बारे में क्या ? मैं आपकी परियोजनाओं में उपयोगी साबित हो सकता हूं।
आमादेस सैंचेज़

589

यदि आप xlsx प्रारूप से खुश हैं, तो मेरे GitHub प्रोजेक्ट, EPPlus को आज़माएँ । यह ExcelPackage से स्रोत के साथ शुरू हुआ था, लेकिन आज यह कुल पुनर्लेखन है। यह पर्वतमाला, सेल स्टाइल, चार्ट, आकार, चित्र, नामित पर्वतमाला, ऑटिफ़िल्टर और कई अन्य सामानों का समर्थन करता है।


77
लाइसेंस अब LGPL है, यहां नोट जारी करें: epplus.codeplex.com/releases/view/79802
साइमन डी

13
उदाहरण सहायक थे। मैं एक दो घंटे में इस लाइब्रेरी (संस्करण 4.x) में Microsoft इंटरॉप लाइब्रेरी (बुरी तरह से धीमा) का उपयोग करने से अपना कोड बदलने में सक्षम था। मेरा बेंचमार्क दो टैब और लगभग 750,000 कोशिकाओं के साथ एक फाइल लिखता है। एमएस इंटरोप का उपयोग करते हुए इसमें 13 मिनट का समय लगा। EPPlus का उपयोग करते हुए इसमें 10 सेकंड लगे, लगभग 80x स्पीडअप। बहुत खुश!
पॉल चेरोच

3
इस थ्रेड में स्पष्टता के लिए, LGPL सॉफ़्टवेयर को GPL को मापने वाले संक्रामक भाग के बिना लिंक करने की अनुमति देता है। आपको केवल आपके द्वारा ClosedXml में किए गए स्रोत परिवर्तन खोलने की आवश्यकता है या यदि आपने सीधे अपने आवेदन के अंदर स्रोत कोड (जैसा कि ClosedXml विधानसभाओं को संदर्भित करने के लिए विरोध किया है) रखा है, तो आपको अपने आवेदन को स्रोत खोलने की आवश्यकता है।
क्रिस मैरिसिक

4
@Paul चेरोच: हम बड़ी एक्सेल शीट को इंटरॉप के साथ बहुत तेज़ी से आबाद करते हैं। रहस्य एक थोक अद्यतन करने के लिए है। एक ऑब्जेक्ट बनाएं [,] ब्लॉक करें, उसे पॉप्युलेट करें, फिर उस मैट्रिक्स को एक बार में एक्सेल में लिखें: excelWorksheet.get_Range (रेंज) .Value2 = block;
मार्क मेकटन

2
ऐसा लगता है कि लाइसेंस एलजीपीएल से पॉलीफॉर्म नॉन-कमर्शियल 1.0.0 लाइसेंस
ल्यूक

175

और Microsoft Office के लिए ओपन XML एसडीके 2.0 का उपयोग करने के बारे में क्या?

कुछ लाभ:

  • कार्यालय स्थापित की आवश्यकता नहीं है
  • Microsoft = सभ्य MSDN प्रलेखन द्वारा बनाया गया
  • परियोजना में उपयोग करने के लिए बस एक .Net dll
  • SDK कई उपकरण जैसे कि diff, validator आदि के साथ आता है

लिंक:


3
यह नोट करना महत्वपूर्ण है कि इसके लिए DLL सिर्फ 5 MB से अधिक है और Office 2007 प्रारूपों तक सीमित है। लेकिन निश्चित रूप से सबसे आसान और सबसे तेज़ समाधान जो मेरे लिए काम करता है।
जोश ब्राउन

18
बस एक सिर जो v2.5 बाहर है और यहां डाउनलोड किया जा सकता है
स्नफेलुपेगस

10
एसडीके एक्सएमएल को कक्षाओं में मॉडल करता है, ताकि प्रत्येक एक्सएमएल टैग को एक टैग में मैप किया जाए, और फिर आपको कक्षा पदानुक्रम का निर्माण करना होगा (प्रत्येक उदाहरण में बच्चे के उदाहरण / टैग का एक संग्रह है) सही ढंग से। इसका मतलब है कि आपको एक्सेल फ़ाइल की XML संरचना को जानना होगा, जो बहुत जटिल है। ऊपर उल्लेखित EPPlus जैसे रैपर का उपयोग करना बहुत आसान है, जो चीजों को सरल बनाता है।
त्सही अशर

2
Microsoft Open XML SDK - Open XML लेखक का एक बड़ा नमूना polymathprogrammer.com/2012/08/06/… पर देखा जा सकता है या स्टैक ओवरफ़्लो समाधान stackoverflow.com/questions/11370672/…
ग्रेग

4
मुझे Microsoft Open XML SDK का ओपन XML लेखक बहुत अच्छा लगा। उपरोक्त समाधानों का उपयोग करना, (विशेष रूप से विन्सेन्ट टॉम का नमूना (पॉली मैथ)), ऐसे लेखक का निर्माण करना आसान है जो डेटा के बड़े सेटों के माध्यम से स्ट्रीम करता है, और एक तरीके से रिकॉर्ड लिखता है और आप क्या करेंगे इसके लिए बहुत अधिक जटिल नहीं है। सीएसवी; लेकिन इसके बजाय आप xml लिख रहे हैं। ओपन एक्सएमएल वह मानसिकता है जिसे माइक्रोसॉफ्ट नया ऑफिस फॉर्मेट मानता है। और अगर आप अपने एक्सएमएल कंटेंट को देखकर ऐसा महसूस करते हैं, तो आप उन्हें .xslx से .zip फाइल में हमेशा रीनेम कर सकते हैं।
ग्रेग

167

मैंने निम्नलिखित ओपन सोर्स प्रोजेक्ट्स को सफलता के साथ उपयोग किया है:

  • OOXML प्रारूपों के लिए ExcelPackage (कार्यालय 2007)

  • .XLS प्रारूप (Office 2003) के लिए NPOI। NPOI 2.0 (बीटा) XLSX को भी सपोर्ट करता है।

मेरे ब्लॉग पोस्ट पर एक नज़र डालें:

एक्सेल स्प्रेडशीट बनाना। XLS और C .XLSX C # में

एक्सेल टेबल और डायनेमिक चार्ट के साथ एनपीओआई


6
एनपीओआई पर एक नोट - पंक्ति और कॉलम संदर्भ शून्य-आधारित हैं। मौजूदा टेम्पलेट को पॉप्युलेट करने के लिए अच्छी तरह से काम करता है।
जॉन एम

108

Excel फ़ाइलों को बनाने और हेरफेर करने के लिए आप OLEDB का उपयोग कर सकते हैं। इसे देखें: 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
क्या कोई पुष्टि कर सकता है कि यह x64 में चलने पर काम करता है? मुझे पूरा यकीन है कि जेट केवल तभी काम करता है जब आपका ऐप 32-बिट मोड में संकलित या चल रहा हो।
लैमर

2
मैंने अभी इस कनेक्शन का परीक्षण किया है और यह Windows Server 2008 R2 x64 RC पर विफल रहा है, ऐसा लगता है कि किसी को 2007 Office सिस्टम ड्राइवर स्थापित करना होगा: डेटा कनेक्टिविटी घटक [ microsoft.com/downloads/…
क्रिस रिचनर

25
इस के साथ बहुत सावधान रहें - यह एक बड़ा बदसूरत थक्का है (उदाहरण के लिए, कभी-कभी यह एक स्तंभ प्रकार का अनुमान लगाता है और सभी डेटा को छोड़ देता है जो फिट नहीं होता है)।
dbkk

9
इस विधि का उपयोग करते समय किसी को बहुत सावधान रहना चाहिए। मैंने इसे डेटा के लिए बहुत परतदार पाया है जो एक आदर्श प्रारूप में नहीं है।
केनी मान

9
एक व्यक्ति के रूप में जिसे ओलेडब को एक बड़ी परियोजना में उपयोग करना था, मैं कहता हूं कि आईटी से स्टैट एडवे! यह कभी-कभी सेल वैल्यू को पुनः प्राप्त करने में सक्षम नहीं होता है क्योंकि यह प्रारूप को समझ नहीं पाता है। इसमें डिलीट ऑपरेशन नहीं है। यह मामूली प्रदाता परिवर्तन के साथ भी पूरी तरह से अलग और अप्रत्याशित काम करता है। मैं कहूंगा कि एक सिद्ध वाणिज्यिक समाधान के लिए जाना चाहिए।
कैनर 13ncü

80

.NET के लिए वाणिज्यिक समाधान, स्प्रेडशीटगियर यह करेगा।

आप यहां ASP.NET (C # और VB) के सजीव नमूने देख सकते हैं और यहां एक मूल्यांकन संस्करण डाउनलोड कर सकते हैं

अस्वीकरण: मैं स्प्रैडशीटगियर LLC का मालिक हूं


10
आपके पास एक बेहतरीन उत्पाद है लेकिन मुझे लगता है कि यहां बहुत सारे लोग मुफ्त समाधान की उम्मीद कर रहे हैं। यह नीचे के वोटों की व्याख्या कर सकता है।
md1337

65

कुछ विकल्प जो मैंने उपयोग किए हैं:

यदि XLSX एक होना चाहिए: ExcelPackage एक अच्छी शुरुआत है, लेकिन जब डेवलपर ने इस पर काम करना छोड़ दिया तो उसकी मृत्यु हो गई। ExML ने वहां से उठाया और कुछ सुविधाओं को जोड़ा। ExML एक बुरा विकल्प नहीं है, मैं अभी भी कुछ उत्पादन वेबसाइटों में इसका उपयोग कर रहा हूं।

मेरी सभी नई परियोजनाओं के लिए, हालांकि, मैं अपाचे POI के .NET पोर्ट NPOI का उपयोग कर रहा हूं । NPOI 2.0 (अल्फा) XLSX को भी सपोर्ट करता है।


यदि आपको XLS का समर्थन करने की आवश्यकता है, तो ExcelPackage से सावधान रहें। मेरे पास इसके साथ एक कठिन समय था और अंततः ExcelLibrary में बदल गया।
जेरेमी

बिलकुल सही। यदि आपको XLSX समर्थन की आवश्यकता है तो ExcelPackage / ExML केवल एक अच्छा विकल्प है।
नैट

5
ध्यान दें कि ExcelPackage में एक उत्तराधिकारी है: EPPlus ( epplus.codeplex.com ) जो XLSX का समर्थन करता है। उदाहरण के लिए NPOI की तुलना में मेरी एकमात्र चिंता, प्रदर्शन है, उदाहरण के लिए जब बहुत सारे कॉलम हैं।
19

63

HTML तालिकाओं का उपयोग करने के लिए एक अत्यंत हल्का विकल्प हो सकता है। बस एक फ़ाइल में सिर, शरीर और टेबल टैग बनाएं, और इसे एक .xls एक्सटेंशन वाली फ़ाइल के रूप में सहेजें। Microsoft विशिष्ट विशेषताएँ हैं जिनका उपयोग आप फॉर्मूला सहित आउटपुट को स्टाइल करने के लिए कर सकते हैं।

मुझे एहसास है कि आप इसे वेब एप्लिकेशन में कोडिंग नहीं कर सकते हैं, लेकिन यहां HTML टेबल के माध्यम से एक्सेल फाइल की रचना का एक उदाहरण है। यदि आप एक कंसोल ऐप, डेस्कटॉप ऐप या सेवा को कोड कर रहे थे, तो इस तकनीक का उपयोग किया जा सकता था।


6
यह इतना तदर्थ है, लेकिन यह काम करता है (खोलने पर चेतावनी जारी करने के लिए नहीं) का उल्लेख करता है और इतना सरल है, यह एक समाधान के रूप में एक जगह पाने का हकदार है। हालांकि केवल यह दिखाने के लिए कि आप एक एक्सेल फाइल का निर्यात कर सकते हैं :))
लूका रामिशविलि

3
इस समाधान ने मेरे लिए ठीक काम किया, बस ध्यान दें कि आप .xlsx एक्सटेंशन का उपयोग नहीं कर सकते
जिल

मेरे संगठन के कुछ लोग Office 2010 और इसके बाद के संस्करण में बनाई गई एक्सेल फ़ाइलों को नहीं खोल सकते। पता नहीं क्या समस्या है, लेकिन मुझे अपना खुद का OpenXML कार्यान्वयन रोल करना पड़ा। (देखें सोग्गर का उत्तर)
क्रिस्टन

49

यदि आप Excel 2007/2010 फ़ाइल बना रहे हैं, तो इस ओपन सोर्स प्रोजेक्ट को आज़माएँ: https://github.com/closedxml/closedxml

यह XML दस्तावेज़ों के झंझटों से निपटने के बिना फ़ाइलों (VBA के समान) में हेरफेर करने के लिए एक वस्तु उन्मुख तरीका प्रदान करता है। इसका उपयोग C # और Visual Basic (VB) जैसी किसी भी .NET भाषा द्वारा किया जा सकता है।

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
मैंने इसे एक ऐसी परियोजना में उपयोग करने की कोशिश की जो बहुत बड़ी एक्सेल शीट बनाती है। उत्कृष्ट पुस्तकालय, लेकिन प्रदर्शन में बेहद खराब। मैंने अभी उस प्रोजेक्ट के लिए एक तुलना की है जिस पर मैं काम कर रहा हूं: ClosedXML (v 0.53.3) ने 92,489 ms लिए, जबकि EPPlus (v 2.9.03, परीक्षण के लिए - हम इसका उपयोग नहीं कर सकते क्योंकि यह GPL है) 16,500 ms लिया।
Druid

1
@ लाइसेंस के अनुसार LGPL मान रहा है कि आप ClosedXML के स्रोत कोड को संशोधित नहीं करते हैं, यह epplus.codeplex.com/license का उपयोग करने के लिए स्वतंत्र है
क्रिस मैरिसिक


47

आप वास्तव में C # में उपलब्ध इंटरॉप कक्षाओं की जांच करना चाहते हैं (उदाहरण के लिए Microsoft.Office.Interop.Excel। आप कहते हैं कि कोई OLE नहीं है (जो यह नहीं है), लेकिन इंटरॉप कक्षाओं का उपयोग करना बहुत आसान है। C # दस्तावेज़ को यहां देखें (Excel के लिए इंटरॉप प्रारंभ होता है) पृष्ठ # C # पीडीएफ का 1072)।

यदि आपने उन्हें आज़माया नहीं है तो आप प्रभावित हो सकते हैं।

कृपया इस पर Microsoft के रुख से सावधान रहें :

Microsoft वर्तमान में किसी भी अप्राप्य, गैर-संवादात्मक ग्राहक अनुप्रयोग या घटक (ASP, ASP.NET, DCOM और NT सेवाओं सहित) से Microsoft Office अनुप्रयोगों के स्वचालन का समर्थन नहीं करता है, क्योंकि कार्यालय अस्थिर व्यवहार और / प्रदर्शित कर सकता है या गतिरोध जब कार्यालय इस वातावरण में चलाया जाता है।


6
लेकिन आपको यह सुनिश्चित करना होगा कि आप मैन्युअल रूप से सब कुछ का निपटान करें, अन्यथा आप मेमोरी को लीक कर देंगे
मैजिककैट

8
@ रेकी बी: ​​इसके अलावा, इंटरोप के साथ मेरे अनुभव में यह है कि यह एक्सेल का उपयोग करता है। हर बार हमने इसका इस्तेमाल किया, अगर एक्सेल मशीन पर स्थापित नहीं होता, तो हमें COM अपवाद मिलते।
मैजिककट

1
OLE के साथ, यहां तक ​​कि बहुत सावधानी से निपटान के साथ, यह अंततः मेमोरी या क्रैश लीक करता है। यह भाग लिया अनुप्रयोगों / कार्यस्थानों के लिए ठीक है, लेकिन सर्वरों के लिए अनुशंसित नहीं है (MS के पास यह बताते हुए KB है)। हमारे सर्वर के लिए, हम इसे केवल रात में रिबूट करते हैं। फिर, वह ठीक काम करता है।
जेनिफर जौक

11
@Geoffrey: आह ठीक है आप मुझे इसके लिए काम करने जा रहे हैं :) -> support.microsoft.com/kb/257757 Microsoft वर्तमान में अनुशंसा नहीं करता है, और समर्थन नहीं करता है, किसी भी अप्राप्य, गैर- से Microsoft Office अनुप्रयोगों का स्वचालन इंटरैक्टिव ग्राहक आवेदन ...
जेनिफर Zouak

4
मैं इंटरोप पर एक हफ्ते से अधिक समय तक संघर्ष करने के बाद इस चर्चा में आ रहा हूं, और जब तक आपकी ज़रूरतें बहुत सरल नहीं होतीं, यह काम नहीं होने वाला है। आपकी स्प्रैडशीट को फ़ॉर्मेट करने के लिए समर्थन abysmal है, जो यकीनन एक .xls फ़ाइल और केवल एक .csv फ़ाइल बनाने का कारण है। उदाहरण के लिए, क्या आपने किसी कक्ष में 911 से अधिक वर्णों का आउटपुट देने का प्रयास किया है, या क्या आपने सुसंगत तरीके से मर्ज किए गए कक्षों की चौड़ाई सेट करने का प्रयास किया है? मेरे पास है, और मैं आपको यह नहीं बता सकता कि मैं अब इस बकवास से कितना नफरत करता हूं ... अपने आप को एक एहसान करो और इस चर्चा में उल्लिखित मुक्त पुस्तकालयों में से एक के साथ जाओ।
md1337

34

यहाँ एक पूरी तरह से मुक्त सी # पुस्तकालय है, जो आप एक से निर्यात की सुविधा देता है है DataSet, DataTableया List<>एक वास्तविक Excel 2007 .xlsx फ़ाइल में, OpenXML लाइब्रेरी का उपयोग कर:

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

पूर्ण स्रोत कोड प्रदान किया गया है - नि: शुल्क - निर्देशों के साथ, और एक डेमो एप्लिकेशन।

अपने आवेदन में इस वर्ग को जोड़ने के बाद, आप कोड के सिर्फ एक लाइन में अपने डेटासेट को एक्सेल में निर्यात कर सकते हैं:

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

यह उससे ज्यादा सरल नहीं है ...

और इसके लिए एक्सेल को आपके सर्वर पर उपस्थित होने की भी आवश्यकता नहीं है।


1
यह थोड़ा भ्रामक लगता है, क्योंकि आप सभी सुविधाओं को प्राप्त करने के लिए दान मांग रहे हैं।
शहरीईएससी

यह आंशिक रूप से सच है: पूरी तरह से मुक्त संस्करण आपके लिए एक सही .xlsx फ़ाइल उत्पन्न करेगा, और सभी स्रोत कोड प्रदान किया गया है। यदि आप उन दो दान में से एक को $ 10 या अधिक दान करते हैं (जिनमें से मुझे पूरी तरह से कुछ भी नहीं मिलता है), तो आपको "बेहतर" संस्करण मिलता है जिसमें दिखाया गया है कि फॉर्मेटिंग, दिनांक आदि कैसे करें, तीसरे पक्ष के उत्पादों की लागत को देखते हुए, मुझे लगता है। एक अच्छे कारण के लिए $ 10 का दान करना इसके लायक है!
माइक गल्डहिल


23

आप GemBox.Spreadsheet पर नज़र डाल सकते हैं

उनके पास सभी सुविधाओं के साथ एक मुफ्त संस्करण है लेकिन प्रति शीट 150 पंक्तियों और 5 शीट प्रति कार्यपुस्तिका तक सीमित है, अगर यह आपकी आवश्यकताओं के भीतर है।

मुझे इसे अभी तक स्वयं उपयोग करने की आवश्यकता नहीं है, लेकिन यह दिलचस्प दिखता है।


21

सिंकफ्यूजन एसेंशियल एक्सएलएसआईओ ऐसा कर सकता है। इसका Microsoft कार्यालय पर कोई निर्भरता नहीं है और विभिन्न प्लेटफार्मों के लिए विशिष्ट समर्थन भी है।

  • ASP.NET
  • ASP.NET MVC
  • UWP
  • Xamarin
  • WPF और विंडोज फॉर्म
  • विंडोज सेवा और बैच आधारित संचालन

कोड नमूना:

//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

कुंआ,

आप असोज जैसे तीसरे पक्ष के पुस्तकालय का भी उपयोग कर सकते हैं ।

इस लाइब्रेरी का यह लाभ है कि इसे एक्सेल को आपकी मशीन पर स्थापित करने की आवश्यकता नहीं होती है जो आपके मामले में आदर्श होगी।


अधिक सटीक होने के लिए, आप अपने .NET अनुप्रयोग में Excel (XLS, XLSX) फ़ाइलों को बनाने के लिए .NET के लिए Aspose.Cells का उपयोग कर सकते हैं ।
शहजाद लतीफ

9
हाँ, यदि आप $ 999 का न्यूनतम लाइसेंस शुल्क देने का मन नहीं रखते हैं, तो आप कर सकते हैं। MikesKnowledgeBase लाइब्रेरी का प्रयास करें ... जो $ 999 इससे सस्ता है !!
माइक जिल्डहिल

17

ओपनएक्सएमएल भी एक अच्छा विकल्प है जो सर्वर पर एमएस एक्सेल को स्थापित करने से बचने में मदद करता है। माइक्रोसॉफ्ट द्वारा प्रदान किया गया ओपन एक्सएमएल एसडीके 2.0 ओपन एक्सएमएल पैकेज और अंतर्निहित ओपन एक्सएमएल स्कीमा तत्वों को एक पैकेज के भीतर हेरफेर करने के कार्य को सरल करता है। ओपन एक्सएमएल एप्लीकेशन प्रोग्रामिंग इंटरफेस (एपीआई) कई सामान्य कार्यों का विकास करता है जो डेवलपर्स ओपन एक्सएमएल पैकेज पर करते हैं।

इसे देखें वैकल्पिक कि सर्वर पर एमएस एक्सेल स्थापित करने से बचने में मदद करता है: OpenXML


17

विभिन्न Office 2003 XML पुस्तकालयों उपलब्ध छोटे एक्सेल फ़ाइलों के लिए बहुत अच्छा काम करते हैं। हालाँकि, मुझे समस्या के रूप में XML प्रारूप में सहेजी गई बड़ी कार्यपुस्तिका के विशाल आकार का पता चलता है। उदाहरण के लिए, एक कार्यपुस्तिका जिसके साथ मैं काम करता हूं, वह नए में 40MB (और निश्चित रूप से अधिक कसकर पैक की गई) XLSX प्रारूप 360MB XML फ़ाइल बन जाएगी।

जहां तक ​​मेरे शोध ने मुझे लिया है, दो वाणिज्यिक पैकेज हैं जो पुराने बाइनरी फ़ाइल स्वरूपों में आउटपुट की अनुमति देते हैं। वो हैं:

न तो सस्ते हैं (क्रमशः 500USD और 800USD, मुझे लगता है)। लेकिन दोनों ही एक्सेल के स्वतंत्र काम करते हैं।

मैं OpenOffice.org की पसंद के लिए एक्सेल आउटपुट मॉड्यूल के बारे में उत्सुक हूं। मुझे आश्चर्य है कि अगर उन्हें जावा से .Net पर पोर्ट किया जा सकता है।


यह एक .net और जावा दोनों पर काम करता है, और यह महंगा नहीं है। SmartXLS smartxls.com
liya


15

मैंने अभी हाल ही में FlexCel.NET का उपयोग किया है और इसे एक उत्कृष्ट पुस्तकालय पाया है! मैं यह नहीं कहता कि बहुत सारे सॉफ्टवेयर उत्पादों के बारे में। यहां पूरी बिक्री पिच देने का कोई मतलब नहीं है, आप उनकी वेबसाइट पर सभी सुविधाओं को पढ़ सकते हैं।

यह एक वाणिज्यिक उत्पाद है, लेकिन यदि आप इसे खरीदते हैं, तो आपको पूर्ण स्रोत मिलता है। तो मुझे लगता है कि अगर आप वास्तव में चाहते हैं तो आप इसे अपनी विधानसभा में संकलित कर सकते हैं। अन्यथा यह xcopy के लिए सिर्फ एक अतिरिक्त विधानसभा है - कोई कॉन्फ़िगरेशन या स्थापना या ऐसा कुछ भी नहीं।

मुझे नहीं लगता कि आप इसे .NET फ्रेमवर्क के रूप में तृतीय-पक्ष पुस्तकालयों के बिना ऐसा करने का कोई भी तरीका पाएंगे, जाहिर है, इसके लिए समर्थन में नहीं बनाया गया है और OLE स्वचालन सिर्फ दर्द की एक पूरी दुनिया है।


15

मैंने System.IO.StreamWriter का उपयोग करके एक्सेल ऑब्जेक्ट का उपयोग किए बिना Excel को निर्यात करने के लिए एक सरल कोड लिखा है।

नीचे वह कोड है जो डेटासेट से सभी तालिकाओं को पढ़ेगा और उन्हें एक-एक करके शीट पर लिख देगा। मैंने इस लेख से मदद ली ।

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
हालांकि लेख में कहा गया है, कि एक्सएमएल है कि एक्सेल वास्तव में एक एक्सएलएस फ़ाइल होने के बजाय पढ़ेगा, जिसका अर्थ है कि यह केवल एक्सेल में काम कर सकता है और स्प्रेडशीट पढ़ने वाले अन्य प्रोग्राम नहीं। लेकिन यह शायद समकक्ष एचटीएमएल टेबल के जवाबों से बेहतर है!
रूप

Xlsx का समर्थन करता है ? OpenXML ?
किकेनेट

14

बस तीसरे पक्ष के समाधान के लिए एक और संदर्भ जोड़ना चाहते हैं जो सीधे आपके मुद्दे को संबोधित करता है: http://www.officewriter.com

(डिस्क्लेमर: मैं सॉफ्टवार्टन्स के लिए काम करता हूं, जो कंपनी ऑफिसवर्टर बनाती है)



12

यहाँ LINQ के साथ XML करने का एक तरीका है, नमूना कोड के साथ पूरा करें:

LINQ to XML के साथ एक्सेल डेटा को तुरंत आयात और निर्यात करें

यह थोड़ा जटिल है, क्योंकि आपको नाम स्थान और उसके आगे आयात करना है, लेकिन यह आपको किसी भी बाहरी निर्भरता से बचने की अनुमति देता है।

(इसके अलावा, निश्चित रूप से, यह VB .NET है, C # नहीं, लेकिन आप हमेशा XML साहित्य का उपयोग करने के लिए VB .NET सामान को अपनी परियोजना में अलग कर सकते हैं, और C # में बाकी सब भी कर सकते हैं।)


12

कुछ 3 पार्टी घटक विक्रेता जैसे कि Infragistics या Syncfusion बहुत अच्छी Excel निर्यात क्षमताएं प्रदान करते हैं जिन्हें Microsoft Excel स्थापित करने की आवश्यकता नहीं होती है।

चूंकि ये विक्रेता उन्नत UI ग्रिड घटक भी प्रदान करते हैं, ये घटक विशेष रूप से तब उपयोगी होते हैं जब आप अपने एप्लिकेशन के उपयोगकर्ता इंटरफ़ेस में ग्रिड की वर्तमान स्थिति की नकल करने के लिए एक एक्सेल एक्सपोर्ट की शैली और लेआउट चाहते हैं।

यदि आपका निर्यात डेटा के निर्यात पर जोर देने के साथ और यूआई के बिना किसी लिंक के साथ सर्वर साइड को निष्पादित करने का इरादा रखता है, तो मैं एक मुक्त स्रोत स्रोत (जैसे ExcelLibrary) में से एक के लिए जाऊंगा।

मैं पहले उन प्रोजेक्ट्स से जुड़ा हुआ हूं जो Microsoft Office सुइट में सर्वर साइड ऑटोमेशन का उपयोग करने का प्रयास करता है। इस अनुभव के आधार पर मैं उस दृष्टिकोण के खिलाफ दृढ़ता से सिफारिश करूंगा।


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
नहीं, यह HTML को एक एक्सेल फाइल के रूप में चिह्नित करता है, बजाय एक सच्चे एक्सेल फाइल के। हाँ, एक्सेल स्वयं उस ओके को खोल देगा, लेकिन अन्य प्रोग्राम जो स्प्रेडशीट का उपभोग करते हैं - उदाहरण के लिए, माइक्रोसॉफ्ट के मुक्त एक्सेल दर्शक सहित - इसे स्वीकार नहीं करेंगे। आप यहाँ पुस्तकालयों में से एक का उपयोग करके एक वास्तविक एक्सेल फ़ाइल बनाने के लिए बेहतर काम करेंगे।
रूप

आपको स्ट्रिंग स्ट्रिंग के बजाय कंटेंट-डिस्पेंस हेडर टेक्स्ट जनरेट करने के लिए System.Net.Mime.ContentDisposition का भी उपयोग करना चाहिए - यह उन फाइलनामों के साथ सामना करेगा जिनमें रिक्त स्थान आदि सही तरीके से हैं।
रूप

12

आप इस लाइब्रेरी का उपयोग करके अच्छी तरह से स्वरूपित एक्सेल फाइल बना सकते हैं: http://officehelper.codeplex.com/documentation
नमूना के नीचे देखें:

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

C # से Excel फ़ाइल बनाने का सबसे सरल और तेज़ तरीका ओपन XML उत्पादकता टूल का उपयोग करना है। ओपन एक्सएमएल प्रोडक्टिविटी टूल ओपन एक्सएमएल एसडीके इंस्टॉलेशन के साथ आता है। टूल किसी भी एक्सेल फाइल को C # कोड में रिवर्स करता है। C # कोड का उपयोग उस फ़ाइल को फिर से बनाने के लिए किया जा सकता है।

शामिल प्रक्रिया का अवलोकन है:

  1. टूल के साथ ओपन XML एसडीके इंस्टॉल करें।
  2. वांछित लुक के साथ नवीनतम एक्सेल क्लाइंट का उपयोग करके एक एक्सेल फाइल बनाएं। नाम बताइए DesiredLook.xlsx
  3. उपकरण को खोलने के साथ DesiredLook.xlsxऔर शीर्ष के पास स्थित रिफ्लेक्ट कोड बटन पर क्लिक करें। यहां छवि विवरण दर्ज करें
  4. आपकी फ़ाइल का C # कोड टूल के राइट पेन में जेनरेट होगा। इसे अपने C # समाधान में जोड़ें और उस वांछित लुक वाली फ़ाइलों को जनरेट करें।

एक बोनस के रूप में, यह विधि किसी भी वर्ड और पावरपॉइंट फ़ाइलों के लिए काम करती है। C # डेवलपर के रूप में, फिर आप अपनी आवश्यकताओं को पूरा करने के लिए कोड में बदलाव करेंगे।

मैंने जीथब पर एक सरल डब्ल्यूपीएफ ऐप विकसित किया है जो इस उद्देश्य के लिए विंडोज पर चलेगा। एक प्लेसहोल्डर वर्ग कहा जाता है GeneratedClassजहां आप उत्पन्न कोड पेस्ट कर सकते हैं। यदि आप फ़ाइल का एक संस्करण वापस जाते हैं, तो यह इस तरह एक एक्सेल फ़ाइल उत्पन्न करेगा:

यहां छवि विवरण दर्ज करें


1
मैंने इस ओपन XML एसडीके समाधान की कोशिश नहीं की है, लेकिन वाह, मैं निश्चित रूप से इसकी जांच करूंगा। मैंने कई वर्षों तक इस तरह के उपकरणों के साथ काम किया है और इस बारे में नहीं जानता। मैंने .NET के साथ XLSX में फ़ाइलों को परिवर्तित करने के लिए अपना स्वयं का साधारण FOSS प्रकाशित किया है: github.com/TonyGravagno/NebulaXConvert
TonyG


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.