दिलचस्प पोस्ट
IE में Google खोज में Excel में VBA का उपयोग करना और पहले परिणाम का हाइपरलिंक लौटाएं XAML ग्रिड दृश्यता संक्रमण? पायथन में टाइम ज़ोन संक्षिप्त नाम के साथ दिनांक / समय स्ट्रिंग पार्स करना? जीएसओ सीरियललाइज़ फ़ील्ड न केवल रिक्त या रिक्त नहीं है जावा कोड बाइट को हेक्साडेसिमल में कनवर्ट करने के लिए पंडों में आकार और गिनती में अंतर क्या है? मिश्रित सामग्री को अनुमति देने के लिए क्रोम कैसे प्राप्त करें? कैसे सी में "अहस्ताक्षरित लंबे" printf? Django लगातार डेटाबेस कनेक्शन धागा संदर्भ स्विच बनाम प्रक्रिया संदर्भ स्विच PresentModalViewController की तरह pushviewcontroller एनीमेशन दिखा रहा है आप PostgreSQL में एक पठन-योग्य उपयोगकर्ता कैसे बना सकते हैं? Regex प्रदान किए जाने पर जावा में स्ट्रिंग.split () विधि वास्तव में कैसे कार्य करता है? कैसे MySQL में datetime फ़ील्ड्स में नल मूल्यों को स्टोर करने के लिए? पसंद करते समय सर्वोत्तम प्रकार की अनुक्रमण

jqgrid + ईएफ + एमवीसी: एक्सेल में कैसे निर्यात करें? आप किस विधि का सुझाव देते हैं?

मैं ईएफ 4 + एमवीसी 3 के साथ jqgrid (मानक) का उपयोग कर रहा हूँ मैं एक्सेल निर्यात को लागू करना चाहता हूं किस पद्धति से आप मुझे सुझाव देंगे?

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

मैं यह सवाल पूछता हूं क्योंकि मैं अब भी एक्सेल निर्यात को लागू करने के लिए आ रहा हूं और मुझे कई तकनीकों मिल रही हैं। कुछ एक सीएसवी निर्यात करने का सुझाव देते हैं, दूसरों का संकेत मिलता है कि इसे एक JSON उत्पादन वापस करना चाहिए और यह मुझे स्पष्ट नहीं है कि यह क्षमता jqgrid के मुफ्त संस्करण में मौजूद है या नहीं। किसी भी मामले में, मैं वाल्थर के ऑब्जेक्ट को डेटा पास करना चाहता हूं।

जेकग्रीड कोड के बारे में, ओलेग ने मुझे यह दिलचस्प जवाब मिला, लेकिन मुझे समझ में नहीं आ रहा है कि मेरी ज़रूरतों पर लागू किया जा सकता है।

दुर्भाग्य से, अब तक मुझे केवल ईएफ एमवीसी के साथ एक्सेल एक्सपोर्ट के लिए समाधान के कुछ हिस्सों को मिला, लेकिन कोई हल या पूर्ण उदाहरण नहीं …

एमवीसी तर्क के बारे में, मैं इस कोड को लागू और विकसित करने जा रहा हूं जैसा कि @ टॉमी द्वारा सुझाव दिया गया है।

कृपया क्षमा करें यदि प्रश्न मूर्ख हो सकता है, तो मैं सिर्फ एक (उत्साही) शुरुआती हूं

आपकी अनमोल मदद के लिए धन्यवाद! सादर

Solutions Collecting From Web of "jqgrid + ईएफ + एमवीसी: एक्सेल में कैसे निर्यात करें? आप किस विधि का सुझाव देते हैं?"

जैसा कि मैंने पहले लिखा था (उदाहरण के लिए यहाँ और यहां देखें) एक्सएमएल पर ग्रिड डेटा निर्यात करने का सबसे अच्छा तरीका ओपन एक्सएमएल एसडीके 2.0 का उपयोग है।

डॉ स्टीफन वाल्थर के पद से पता चलता है कि कैसे एक्सेल द्वारा पढ़ा जा सकता है जो एचटीएमएल फाइल बनाने के लिए। यह Excel फ़ाइल नहीं है और अभी भी एक्सेल प्रारूप में कनवर्ट होना चाहिए। सीएसवी के उपयोग में और भी अधिक समस्याएं हैं। स्रोत तालिका में सामग्री पर निर्भर करते हुए एक्सेल डेटा प्रकारों में स्वचालित रूपांतरण बिल्कुल गलत हो सकता है। एक प्रोजेक्ट में जिसे मैं एक ग्राहक के लिए विकसित किया था, ग्रिड में सॉफ़्टवेयर उत्पादों के बारे में जानकारी शामिल थी: उत्पाद का नाम, संस्करण, और इसी तरह। सॉफ़्टवेयर संस्करण कुछ समय (उदाहरण के लिए 1.3.1 9 63) के रूप में दिखता है और ऐसे कक्षों को गलत रूपांतरित किया जाएगा (जर्मन में एक उपयोग '।' दिनांक में विभाजक के रूप में)। परिणामस्वरूप एक में वास्तव में कठिन समस्याएं थीं सीएसवी के उपयोग में किए गए ग्रंथों में कॉमा के अंदर भी अक्सर आयात करना गलत होता है। यहां तक ​​कि जब कोई कोमा ( , ) वाले कक्षों को उद्धृत करता है और कोटा होने वाले ग्रंथों से बचते हैं तो फिर भी विशेष रूप से पहले कॉलम में गलत हो जाता है। मैं यहाँ सभी प्रयासों और त्रुटियों के पूरे इतिहास की व्याख्या नहीं करना चाहता, लेकिन सभी के बाद मैं सीएसवी और एचटीएमएल के उपयोग को छोड़ने का निर्णय लेता हूं और ओपन एक्सएमएल एसडीके 2.0 का इस्तेमाल करना शुरू कर दिया है जो एक्सल एसएक्स के साथ असली एक्सेल फाइल बनाने की अनुमति देता है । जिस तरह से मुझे सही लगता है क्योंकि किसी को सर्वर पर स्थापित किसी भी कार्यालय घटक की आवश्यकता नहीं है, कोई अतिरिक्त लाइसेंस नहीं है

केवल प्रतिबंध यह है कि एक DocumentFormat.OpenXml.dll का उपयोग करने में सक्षम होना चाहिए, इसलिए आपका सर्वर प्रोग्राम किसी भी Windows ऑपरेशन सिस्टम पर चलाना चाहिए। जैसा कि यह अच्छी तरह से ज्ञात है, एक्सएलएसएक्स फ़ाइल ज़िप फाइल है जिसमें कुछ एक्सएमएल फाइलें हैं। अगर आपको अब भी यह नहीं पता है कि मैं आपको एक्सल एसएक्स फ़ाइल का नाम बदलने के लिए ज़िफ़ फाइल और इसे निकालने की सलाह देता हूं। ओपन एक्सएमएल एसडीके 2.0 लाइब्रेरी है जो एक्सएलएसएक्स फाइल के साथ काम करता है जैसे एक्सएमएल फाइलों के साथ। इसलिए कोई अतिरिक्त कार्यालय घटकों की आवश्यकता नहीं है।

ओपन एक्सएमएल एसडीके 2.0 का उपयोग करने के लिए बहुत सारी जानकारी मिल सकती है ( यहां , यहां और यहां देखें )। कई सहायक कोड उदाहरण एक सीडी एमएसडीएन पर सीधे मिलते हैं (देखें यहां )। फिर भी ओपन एक्सएमएल एसडीके 2.0 का व्यावहारिक उपयोग पहली बार कम से कम इतना आसान नहीं है। इसलिए मैंने उस कोड के कुछ हिस्सों से एक डेमो बनाया जिसमें मैंने खुद को इस्तेमाल किया था

आप यहां से डेमो प्रोजेक्ट डाउनलोड कर सकते हैं । डेमो उत्तर से डेमो का विस्तार है और यह एक है

डेटा निर्यात करने के लिए मैं DataForExcel सहायक वर्ग का उपयोग करता DataForExcel । इसमें प्रपत्र में कन्स्ट्रक्टर है

 DataForExcel(string[] headers, DataType[] colunmTypes, List<string[]> data, string sheetName) 

या थोड़ा सरलीकृत रूप में

 DataForExcel(string[] headers, List<string[]> data, string sheetName) 

और केवल सार्वजनिक विधि

 CreateXlsxAndFillData(Stream stream) 

Excel फ़ाइल बनाने के लिए क्लास का उपयोग निम्नलिखित के जैसा हो सकता है

 var excelData = new DataForExcel ( // column Header new[]{"Col1", "Col2", "Col3"}, new[]{DataForExcel.DataType.String, DataForExcel.DataType.Integer, DataForExcel.DataType.String}, new List<string[]> { new[] {"a", "1", "c1"}, new[] {"a", "2", "c2"} }, "Test Grid"); Stream stream = new FileStream ("Test.xlsx", FileMode.Create); excelData.CreateXlsxAndFillData (stream); stream.Close(); 

एएसपी.नेट एमवीसी से डेमो में उपयोग निम्न है:

 static readonly string[] HeadersQuestions = { "Id", "Votes", "Title" }; static readonly DataForExcel.DataType[] ColunmTypesQuestions = { DataForExcel.DataType.Integer, DataForExcel.DataType.Integer, DataForExcel.DataType.String }; public ActionResult ExportAllQuestionsToExcel () { var context = new HaackOverflowEntities (); var questions = context.Questions; questions.MergeOption = MergeOption.NoTracking; // we don't want to update the data // to be able to use ToString() below which is NOT exist in the LINQ to Entity // we should include in query only the properies which we will use below var query = questions.ToList (); if (query.Count == 0) return new EmptyResult (); var data = new List<string[]> (query.Count); data.AddRange (query.Select (item => new[] { item.Id.ToString(CultureInfo.InvariantCulture), item.Votes.ToString(CultureInfo.InvariantCulture), item.Title })); return new ExcelResult (HeadersQuestions, ColunmTypesQuestions, data, "Questions.xlsx", "Questions"); } 

जहां ExcelResult रूप में परिभाषित कर रहे हैं

 public class ExcelResult : ActionResult { private readonly DataForExcel _data; private readonly string _fileName; public ExcelResult (string[] headers, List<string[]> data, string fileName, string sheetName) { _data = new DataForExcel (headers, data, sheetName); _fileName = fileName; } public ExcelResult (string[] headers, DataForExcel.DataType[] colunmTypes, List<string[]> data, string fileName, string sheetName) { _data = new DataForExcel (headers, colunmTypes, data, sheetName); _fileName = fileName; } public override void ExecuteResult (ControllerContext context) { var response = context.HttpContext.Response; response.ClearContent(); response.ClearHeaders(); response.Cache.SetMaxAge (new TimeSpan (0)); using (var stream = new MemoryStream()) { _data.CreateXlsxAndFillData (stream); //Return it to the client - strFile has been updated, so return it. response.AddHeader ("content-disposition", "attachment; filename=" + _fileName); // see http://filext.com/faq/office_mime_types.php response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; response.ContentEncoding = Encoding.UTF8; stream.WriteTo (response.OutputStream); } response.Flush(); response.Close(); } } 

कोड को पूरा करने के लिए मुझे क्लास के कोड को शामिल करना होगा DataForExcel :

 public class DataForExcel { public enum DataType { String, Integer } private readonly string[] _headers; private readonly DataType[] _colunmTypes; private readonly List<string[]> _data; private readonly string _sheetName = "Grid1"; private readonly SortedSet<string> _os = new SortedSet<string> (); private string[] _sharedStrings; private static string ConvertIntToColumnHeader(int index) { var sb = new StringBuilder (); while (index > 0) { if (index <= 'Z' - 'A') // index=0 -> 'A', 25 -> 'Z' break; sb.Append (ConvertIntToColumnHeader (index / ('Z' - 'A' + 1) - 1)); index = index % ('Z' - 'A' + 1); } sb.Append ((char)('A' + index)); return sb.ToString (); } private static Row CreateRow(UInt32 index, IList<string> data) { var r = new Row { RowIndex = index }; for (var i = 0; i < data.Count; i++) r.Append (new OpenXmlElement[] { CreateTextCell (ConvertIntToColumnHeader (i), index, data[i]) }); return r; } private Row CreateRowWithSharedStrings(UInt32 index, IList<string> data) { var r = new Row { RowIndex = index }; for (var i = 0; i < data.Count; i++) r.Append (new OpenXmlElement[] { CreateSharedTextCell (ConvertIntToColumnHeader (i), index, data[i]) }); return r; } private Row CreateRowWithSharedStrings(UInt32 index, IList<string> data, IList<DataType> colunmTypes) { var r = new Row { RowIndex = index }; for (var i = 0; i < data.Count; i++) if (colunmTypes != null && i < colunmTypes.Count && colunmTypes[i] == DataType.Integer) r.Append (new OpenXmlElement[] { CreateNumberCell (ConvertIntToColumnHeader (i), index, data[i]) }); else r.Append (new OpenXmlElement[] { CreateSharedTextCell (ConvertIntToColumnHeader (i), index, data[i]) }); return r; } private static Cell CreateTextCell(string header, UInt32 index, string text) { // create Cell with InlineString as a child, which has Text as a child return new Cell (new InlineString (new Text { Text = text })) { // Cell properties DataType = CellValues.InlineString, CellReference = header + index }; } private Cell CreateSharedTextCell(string header, UInt32 index, string text) { for (var i=0; i<_sharedStrings.Length; i++) { if (String.Compare (_sharedStrings[i], text, StringComparison.Ordinal) == 0) { return new Cell (new CellValue { Text = i.ToString (CultureInfo.InvariantCulture) }) { // Cell properties DataType = CellValues.SharedString, CellReference = header + index }; } } // create Cell with InlineString as a child, which has Text as a child throw new InstanceNotFoundException(); } private static Cell CreateNumberCell(string header, UInt32 index, string numberAsString) { // create Cell with CellValue as a child, which has Text as a child return new Cell (new CellValue { Text = numberAsString }) { // Cell properties CellReference = header + index }; } private void FillSharedStringTable(IEnumerable<string> data) { foreach (var item in data) _os.Add (item); } private void FillSharedStringTable(IList<string> data, IList<DataType> colunmTypes) { for (var i = 0; i < data.Count; i++) if (colunmTypes == null || i >= colunmTypes.Count || colunmTypes[i] == DataType.String) _os.Add (data[i]); } public DataForExcel(string[] headers, List<string[]> data, string sheetName) { _headers = headers; _data = data; _sheetName = sheetName; } public DataForExcel(string[] headers, DataType[] colunmTypes, List<string[]> data, string sheetName) { _headers = headers; _colunmTypes = colunmTypes; _data = data; _sheetName = sheetName; } private void FillSpreadsheetDocument(SpreadsheetDocument spreadsheetDocument) { // create and fill SheetData var sheetData = new SheetData (); // first row is the header sheetData.AppendChild (CreateRow (1, _headers)); //const UInt32 iAutoFilter = 2; // skip next row (number 2) for the AutoFilter //var i = iAutoFilter + 1; UInt32 i = 2; // first of all collect all different strings in OrderedSet<string> _os foreach (var dataRow in _data) if (_colunmTypes != null) FillSharedStringTable (dataRow, _colunmTypes); else FillSharedStringTable (dataRow); _sharedStrings = _os.ToArray (); foreach (var dataRow in _data) sheetData.AppendChild (_colunmTypes != null ? CreateRowWithSharedStrings (i++, dataRow, _colunmTypes) : CreateRowWithSharedStrings (i++, dataRow)); var sst = new SharedStringTable (); foreach (var text in _os) sst.AppendChild (new SharedStringItem (new Text (text))); // add empty workbook and worksheet to the SpreadsheetDocument var workbookPart = spreadsheetDocument.AddWorkbookPart (); var worksheetPart = workbookPart.AddNewPart<WorksheetPart> (); var shareStringPart = workbookPart.AddNewPart<SharedStringTablePart> (); shareStringPart.SharedStringTable = sst; shareStringPart.SharedStringTable.Save (); // add sheet data to Worksheet worksheetPart.Worksheet = new Worksheet (sheetData); worksheetPart.Worksheet.Save (); // fill workbook with the Worksheet spreadsheetDocument.WorkbookPart.Workbook = new Workbook ( new FileVersion { ApplicationName = "Microsoft Office Excel" }, new Sheets ( new Sheet { Name = _sheetName, SheetId = (UInt32Value)1U, // generate the id for sheet Id = workbookPart.GetIdOfPart (worksheetPart) } ) ); spreadsheetDocument.WorkbookPart.Workbook.Save (); spreadsheetDocument.Close (); } public void CreateXlsxAndFillData(Stream stream) { // Create workbook document using (var spreadsheetDocument = SpreadsheetDocument.Create (stream, SpreadsheetDocumentType.Workbook)) { FillSpreadsheetDocument (spreadsheetDocument); } } } 

उपरोक्त कोड सीधे नई एक्सएलएसएक्स फ़ाइल बनाते हैं। आप String और Integer रूप में अधिक डेटा प्रकारों का समर्थन करने के लिए कोड का विस्तार कर सकते हैं जो मैंने कोड में उपयोग किया था।

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

नवीनीकृत : उत्तर में अद्यतन कोड शामिल है जो Excel को अधिक सेल स्वरूपण के साथ प्रलेखित करने की अनुमति देता है।

मैंने स्टीफन के पोस्ट को देखा और यह नरक के रूप में पुराना है, जिसे बीटीड गलत नहीं करता। यदि आपको कस्टम स्वरूपण, हेडर और शैलियों की आवश्यकता नहीं है, तो मुझे लगता है कि सीएसवी का प्रयोग करें क्योंकि यह बहुत सरल है
इससे भी महत्वपूर्ण बात, मत सोचो कि एमवीसी साइट से एक्सल एक्सपोर्ट एक्सचेंज है, जो आंतरिक रूप से डेटा पहुंच के लिए ईएफ का उपयोग करता है, यह कहना मुश्किल है कि रूरल ऑन रेल साइट जो कि सक्रियरेकॉर्ड का उपयोग करता है मेरे लिए यह स्वतंत्र चिंता है, निर्यात को अंतर्निहित प्रौद्योगिकियों (कम से कम सीधे नहीं) के बारे में कुछ भी नहीं होना चाहिए, केवल आपके डेटा की संरचना, ये सभी।
कोडप्लेक्स पुस्तकालयों के लिए खोज करें जो Excel पढ़ने / लिखने और निर्यात करने की अनुमति देता है, इन दिनों उनमें से बहुत सारे हैं, कई सचमुच अच्छे समाधान जो पूरे विश्व में हजारों डेवलपर्स द्वारा नियमित रूप से रखरखाव और जांचते हैं। यदि मैं आप थे तो मैं स्टीफन समाधान का उपयोग नहीं करूंगा क्योंकि ऐसा लगता है कि वह कभी-कभी इसे नोटपैड में टाइप कर लेता है और फिर पोस्ट में चिपकाता है – कोई यूनिट परीक्षण नहीं, कोई विस्तार योग्यता नहीं + यह वीबी में है, इसलिए यह समझना भी मुश्किल है, लेकिन वो मैं ही हुं। आशा है कि यह मदद और शुभकामनाएँ