जिस मशीन में कोड चल रहा है, उस पर एक्सेल स्थापित किए बिना मुझे C # के साथ एक एक्सेल स्प्रेडशीट कैसे बना सकते हैं?
जिस मशीन में कोड चल रहा है, उस पर एक्सेल स्थापित किए बिना मुझे C # के साथ एक एक्सेल स्प्रेडशीट कैसे बना सकते हैं?
जवाबों:
आप ExcelLibrary नामक लाइब्रेरी का उपयोग कर सकते हैं। यह एक मुक्त, खुला स्रोत पुस्तकालय है जो Google कोड पर पोस्ट किया गया है:
यह 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);
एक्सेल फाइल बनाना उतना ही आसान है। आप मैन्युअल रूप से एक्सेल फाइल भी बना सकते हैं, लेकिन उपरोक्त कार्यक्षमता वह है जिसने मुझे वास्तव में प्रभावित किया है।
यदि आप xlsx प्रारूप से खुश हैं, तो मेरे GitHub प्रोजेक्ट, EPPlus को आज़माएँ । यह ExcelPackage से स्रोत के साथ शुरू हुआ था, लेकिन आज यह कुल पुनर्लेखन है। यह पर्वतमाला, सेल स्टाइल, चार्ट, आकार, चित्र, नामित पर्वतमाला, ऑटिफ़िल्टर और कई अन्य सामानों का समर्थन करता है।
और Microsoft Office के लिए ओपन XML एसडीके 2.0 का उपयोग करने के बारे में क्या?
कुछ लाभ:
लिंक:
मैंने निम्नलिखित ओपन सोर्स प्रोजेक्ट्स को सफलता के साथ उपयोग किया है:
OOXML प्रारूपों के लिए ExcelPackage (कार्यालय 2007)
.XLS प्रारूप (Office 2003) के लिए NPOI। NPOI 2.0 (बीटा) XLSX को भी सपोर्ट करता है।
मेरे ब्लॉग पोस्ट पर एक नज़र डालें:
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();
}
संपादित करें - कुछ और लिंक:
.NET के लिए वाणिज्यिक समाधान, स्प्रेडशीटगियर यह करेगा।
आप यहां ASP.NET (C # और VB) के सजीव नमूने देख सकते हैं और यहां एक मूल्यांकन संस्करण डाउनलोड कर सकते हैं ।
अस्वीकरण: मैं स्प्रैडशीटगियर LLC का मालिक हूं
कुछ विकल्प जो मैंने उपयोग किए हैं:
यदि XLSX एक होना चाहिए: ExcelPackage एक अच्छी शुरुआत है, लेकिन जब डेवलपर ने इस पर काम करना छोड़ दिया तो उसकी मृत्यु हो गई। ExML ने वहां से उठाया और कुछ सुविधाओं को जोड़ा। ExML एक बुरा विकल्प नहीं है, मैं अभी भी कुछ उत्पादन वेबसाइटों में इसका उपयोग कर रहा हूं।
मेरी सभी नई परियोजनाओं के लिए, हालांकि, मैं अपाचे POI के .NET पोर्ट NPOI का उपयोग कर रहा हूं । NPOI 2.0 (अल्फा) XLSX को भी सपोर्ट करता है।
HTML तालिकाओं का उपयोग करने के लिए एक अत्यंत हल्का विकल्प हो सकता है। बस एक फ़ाइल में सिर, शरीर और टेबल टैग बनाएं, और इसे एक .xls एक्सटेंशन वाली फ़ाइल के रूप में सहेजें। Microsoft विशिष्ट विशेषताएँ हैं जिनका उपयोग आप फॉर्मूला सहित आउटपुट को स्टाइल करने के लिए कर सकते हैं।
मुझे एहसास है कि आप इसे वेब एप्लिकेशन में कोडिंग नहीं कर सकते हैं, लेकिन यहां HTML टेबल के माध्यम से एक्सेल फाइल की रचना का एक उदाहरण है। यदि आप एक कंसोल ऐप, डेस्कटॉप ऐप या सेवा को कोड कर रहे थे, तो इस तकनीक का उपयोग किया जा सकता था।
यदि आप 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");
आप ExcelXmlWriter का उपयोग कर सकते हैं ।
यह बढ़िया काम करता है।
आप वास्तव में C # में उपलब्ध इंटरॉप कक्षाओं की जांच करना चाहते हैं (उदाहरण के लिए Microsoft.Office.Interop.Excel
। आप कहते हैं कि कोई OLE नहीं है (जो यह नहीं है), लेकिन इंटरॉप कक्षाओं का उपयोग करना बहुत आसान है। C # दस्तावेज़ को यहां देखें (Excel के लिए इंटरॉप प्रारंभ होता है) पृष्ठ # C # पीडीएफ का 1072)।
यदि आपने उन्हें आज़माया नहीं है तो आप प्रभावित हो सकते हैं।
कृपया इस पर Microsoft के रुख से सावधान रहें :
Microsoft वर्तमान में किसी भी अप्राप्य, गैर-संवादात्मक ग्राहक अनुप्रयोग या घटक (ASP, ASP.NET, DCOM और NT सेवाओं सहित) से Microsoft Office अनुप्रयोगों के स्वचालन का समर्थन नहीं करता है, क्योंकि कार्यालय अस्थिर व्यवहार और / प्रदर्शित कर सकता है या गतिरोध जब कार्यालय इस वातावरण में चलाया जाता है।
यहाँ एक पूरी तरह से मुक्त सी # पुस्तकालय है, जो आप एक से निर्यात की सुविधा देता है है DataSet
, DataTable
या List<>
एक वास्तविक Excel 2007 .xlsx फ़ाइल में, OpenXML लाइब्रेरी का उपयोग कर:
http://mikesknowledgebase.com/pages/CSharp/ExportToExcel.htm
पूर्ण स्रोत कोड प्रदान किया गया है - नि: शुल्क - निर्देशों के साथ, और एक डेमो एप्लिकेशन।
अपने आवेदन में इस वर्ग को जोड़ने के बाद, आप कोड के सिर्फ एक लाइन में अपने डेटासेट को एक्सेल में निर्यात कर सकते हैं:
CreateExcelFile.CreateExcelDocument(myDataSet, "C:\\Sample.xlsx");
यह उससे ज्यादा सरल नहीं है ...
और इसके लिए एक्सेल को आपके सर्वर पर उपस्थित होने की भी आवश्यकता नहीं है।
आप XML स्प्रेडशीट 2003 प्रारूप का उपयोग करके अपनी फ़ाइलों को बनाने पर विचार कर सकते हैं । यह एक सरल XML प्रारूप है जिसमें एक अच्छी तरह से प्रलेखित स्कीमा का उपयोग किया गया है ।
आप GemBox.Spreadsheet पर नज़र डाल सकते हैं ।
उनके पास सभी सुविधाओं के साथ एक मुफ्त संस्करण है लेकिन प्रति शीट 150 पंक्तियों और 5 शीट प्रति कार्यपुस्तिका तक सीमित है, अगर यह आपकी आवश्यकताओं के भीतर है।
मुझे इसे अभी तक स्वयं उपयोग करने की आवश्यकता नहीं है, लेकिन यह दिलचस्प दिखता है।
सिंकफ्यूजन एसेंशियल एक्सएलएसआईओ ऐसा कर सकता है। इसका Microsoft कार्यालय पर कोई निर्भरता नहीं है और विभिन्न प्लेटफार्मों के लिए विशिष्ट समर्थन भी है।
कोड नमूना:
//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 मिलियन अमरीकी डालर से कम) तो सामुदायिक नियंत्रण कार्यक्रम के माध्यम से नियंत्रण का पूरा सूट मुफ्त में उपलब्ध है । नोट: मैं सिंकफ़्यूज़न के लिए काम करता हूँ।
कुंआ,
आप असोज जैसे तीसरे पक्ष के पुस्तकालय का भी उपयोग कर सकते हैं ।
इस लाइब्रेरी का यह लाभ है कि इसे एक्सेल को आपकी मशीन पर स्थापित करने की आवश्यकता नहीं होती है जो आपके मामले में आदर्श होगी।
ओपनएक्सएमएल भी एक अच्छा विकल्प है जो सर्वर पर एमएस एक्सेल को स्थापित करने से बचने में मदद करता है। माइक्रोसॉफ्ट द्वारा प्रदान किया गया ओपन एक्सएमएल एसडीके 2.0 ओपन एक्सएमएल पैकेज और अंतर्निहित ओपन एक्सएमएल स्कीमा तत्वों को एक पैकेज के भीतर हेरफेर करने के कार्य को सरल करता है। ओपन एक्सएमएल एप्लीकेशन प्रोग्रामिंग इंटरफेस (एपीआई) कई सामान्य कार्यों का विकास करता है जो डेवलपर्स ओपन एक्सएमएल पैकेज पर करते हैं।
इसे देखें वैकल्पिक कि सर्वर पर एमएस एक्सेल स्थापित करने से बचने में मदद करता है: OpenXML
विभिन्न Office 2003 XML पुस्तकालयों उपलब्ध छोटे एक्सेल फ़ाइलों के लिए बहुत अच्छा काम करते हैं। हालाँकि, मुझे समस्या के रूप में XML प्रारूप में सहेजी गई बड़ी कार्यपुस्तिका के विशाल आकार का पता चलता है। उदाहरण के लिए, एक कार्यपुस्तिका जिसके साथ मैं काम करता हूं, वह नए में 40MB (और निश्चित रूप से अधिक कसकर पैक की गई) XLSX प्रारूप 360MB XML फ़ाइल बन जाएगी।
जहां तक मेरे शोध ने मुझे लिया है, दो वाणिज्यिक पैकेज हैं जो पुराने बाइनरी फ़ाइल स्वरूपों में आउटपुट की अनुमति देते हैं। वो हैं:
न तो सस्ते हैं (क्रमशः 500USD और 800USD, मुझे लगता है)। लेकिन दोनों ही एक्सेल के स्वतंत्र काम करते हैं।
मैं OpenOffice.org की पसंद के लिए एक्सेल आउटपुट मॉड्यूल के बारे में उत्सुक हूं। मुझे आश्चर्य है कि अगर उन्हें जावा से .Net पर पोर्ट किया जा सकता है।
मैं XML स्प्रैडशीट बनाने के बारे में सहमत हूं, यहां C # 3 के लिए यह करने के बारे में एक उदाहरण है (VB 9 में हर कोई इसके बारे में ब्लॉग करता है: P) http://www.aaron-powell.com/linq-to-xml-to- एक्सेल
मैंने अभी हाल ही में FlexCel.NET का उपयोग किया है और इसे एक उत्कृष्ट पुस्तकालय पाया है! मैं यह नहीं कहता कि बहुत सारे सॉफ्टवेयर उत्पादों के बारे में। यहां पूरी बिक्री पिच देने का कोई मतलब नहीं है, आप उनकी वेबसाइट पर सभी सुविधाओं को पढ़ सकते हैं।
यह एक वाणिज्यिक उत्पाद है, लेकिन यदि आप इसे खरीदते हैं, तो आपको पूर्ण स्रोत मिलता है। तो मुझे लगता है कि अगर आप वास्तव में चाहते हैं तो आप इसे अपनी विधानसभा में संकलित कर सकते हैं। अन्यथा यह xcopy के लिए सिर्फ एक अतिरिक्त विधानसभा है - कोई कॉन्फ़िगरेशन या स्थापना या ऐसा कुछ भी नहीं।
मुझे नहीं लगता कि आप इसे .NET फ्रेमवर्क के रूप में तृतीय-पक्ष पुस्तकालयों के बिना ऐसा करने का कोई भी तरीका पाएंगे, जाहिर है, इसके लिए समर्थन में नहीं बनाया गया है और OLE स्वचालन सिर्फ दर्द की एक पूरी दुनिया है।
मैंने 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();
}
बस तीसरे पक्ष के समाधान के लिए एक और संदर्भ जोड़ना चाहते हैं जो सीधे आपके मुद्दे को संबोधित करता है: http://www.officewriter.com
(डिस्क्लेमर: मैं सॉफ्टवार्टन्स के लिए काम करता हूं, जो कंपनी ऑफिसवर्टर बनाती है)
यहाँ LINQ के साथ XML करने का एक तरीका है, नमूना कोड के साथ पूरा करें:
LINQ to XML के साथ एक्सेल डेटा को तुरंत आयात और निर्यात करें
यह थोड़ा जटिल है, क्योंकि आपको नाम स्थान और उसके आगे आयात करना है, लेकिन यह आपको किसी भी बाहरी निर्भरता से बचने की अनुमति देता है।
(इसके अलावा, निश्चित रूप से, यह VB .NET है, C # नहीं, लेकिन आप हमेशा XML साहित्य का उपयोग करने के लिए VB .NET सामान को अपनी परियोजना में अलग कर सकते हैं, और C # में बाकी सब भी कर सकते हैं।)
कुछ 3 पार्टी घटक विक्रेता जैसे कि Infragistics या Syncfusion बहुत अच्छी Excel निर्यात क्षमताएं प्रदान करते हैं जिन्हें Microsoft Excel स्थापित करने की आवश्यकता नहीं होती है।
चूंकि ये विक्रेता उन्नत UI ग्रिड घटक भी प्रदान करते हैं, ये घटक विशेष रूप से तब उपयोगी होते हैं जब आप अपने एप्लिकेशन के उपयोगकर्ता इंटरफ़ेस में ग्रिड की वर्तमान स्थिति की नकल करने के लिए एक एक्सेल एक्सपोर्ट की शैली और लेआउट चाहते हैं।
यदि आपका निर्यात डेटा के निर्यात पर जोर देने के साथ और यूआई के बिना किसी लिंक के साथ सर्वर साइड को निष्पादित करने का इरादा रखता है, तो मैं एक मुक्त स्रोत स्रोत (जैसे ExcelLibrary) में से एक के लिए जाऊंगा।
मैं पहले उन प्रोजेक्ट्स से जुड़ा हुआ हूं जो Microsoft Office सुइट में सर्वर साइड ऑटोमेशन का उपयोग करने का प्रयास करता है। इस अनुभव के आधार पर मैं उस दृष्टिकोण के खिलाफ दृढ़ता से सिफारिश करूंगा।
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/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};
}
}
C # से Excel फ़ाइल बनाने का सबसे सरल और तेज़ तरीका ओपन XML उत्पादकता टूल का उपयोग करना है। ओपन एक्सएमएल प्रोडक्टिविटी टूल ओपन एक्सएमएल एसडीके इंस्टॉलेशन के साथ आता है। टूल किसी भी एक्सेल फाइल को C # कोड में रिवर्स करता है। C # कोड का उपयोग उस फ़ाइल को फिर से बनाने के लिए किया जा सकता है।
शामिल प्रक्रिया का अवलोकन है:
DesiredLook.xlsx
।DesiredLook.xlsx
और शीर्ष के पास स्थित रिफ्लेक्ट कोड बटन पर क्लिक करें।
एक बोनस के रूप में, यह विधि किसी भी वर्ड और पावरपॉइंट फ़ाइलों के लिए काम करती है। C # डेवलपर के रूप में, फिर आप अपनी आवश्यकताओं को पूरा करने के लिए कोड में बदलाव करेंगे।
मैंने जीथब पर एक सरल डब्ल्यूपीएफ ऐप विकसित किया है जो इस उद्देश्य के लिए विंडोज पर चलेगा। एक प्लेसहोल्डर वर्ग कहा जाता है GeneratedClass
जहां आप उत्पन्न कोड पेस्ट कर सकते हैं। यदि आप फ़ाइल का एक संस्करण वापस जाते हैं, तो यह इस तरह एक एक्सेल फ़ाइल उत्पन्न करेगा:
सी # में कुछ उपयोगी एक्सेल स्वचालन, यू निम्नलिखित लिंक से पा सकते हैं।
http://csharp.net-informations.com/excel/csharp-excel-tutorial.htm
पर वज्रपात।
नमूने देखें कि एक्सेल फ़ाइलों को कैसे बनाया जाए।
C # और VB.NET में उदाहरण हैं
यह XSL XSLX और CSV एक्सेल फ़ाइलों का प्रबंधन करता है।
xls
याxlsx
फ़ाइल उनमें से एक होने के साथ )। यह कोई आवश्यकता नहीं है कि आपके कंप्यूटर पर एक प्रोग्राम है जो इसे पढ़ सकता है (जैसे, बाइनरी)।