2009-02-18 16 views
13

मुझे स्ट्रीम से एक्सेल फ़ाइल पढ़ने का एक तरीका चाहिए। यह चीजों को करने के ADO.NET तरीके से काम नहीं कर रहा है।स्ट्रीम से एक्सेल फ़ाइल पढ़ें

परिदृश्य यह है कि कोई उपयोगकर्ता फ़ाइल अपलोड के माध्यम से फ़ाइल अपलोड करता है और मुझे फ़ाइल से कुछ मान पढ़ने और डेटाबेस में आयात करने की आवश्यकता होती है।

कई कारणों से मैं फ़ाइल को डिस्क में सहेज नहीं सकता, और ऐसा करने का कोई कारण नहीं है।

तो, किसी को फ़ाइल अपलोड स्ट्रीम से एक्सेल फ़ाइल पढ़ने का तरीका पता है?

+0

इस अतः समाधान पर एक नज़र डालें http://stackoverflow.com/a/13978464/1242061 – escist

उत्तर

0

Infragistics में excel component है जो स्ट्रीम से एक्सेल फ़ाइल पढ़ सकता है।

मैं इसे यहां एक प्रोजेक्ट में उपयोग कर रहा हूं और यह अच्छी तरह से काम करता है।

इसके अलावा ओपन सोर्स myXls component को आसानी से संशोधित करने के लिए संशोधित किया जा सकता है। XlsDocument contstructor केवल फ़ाइल नाम द्वारा दी गई फ़ाइल से लोड करने का समर्थन करता है, लेकिन यह फ़ाइलस्ट्रीम बनाने और फिर स्ट्रीम पढ़ने के द्वारा काम करता है, इसलिए धाराओं से लोडिंग का समर्थन करने के लिए इसे बदलना छोटा होना चाहिए।

संपादित करें: मुझे लगता है कि आपको एक समाधान मिला है, लेकिन मैं सिर्फ यह ध्यान रखना चाहता था कि मैंने घटक के लिए स्रोत कोड अपडेट किया है ताकि अब वह सीधे स्ट्रीम से एक्सेल फ़ाइल पढ़ सके। :-)

12

ऐसा लगता है कि मुझे समस्या की भावना मिली है।

http://www.codeplex.com/ExcelDataReader

इस पुस्तकालय अच्छी तरह से काम करने के लिए लगता है और यह एक धारा एक्सेल फाइल पढ़ने में लग जाते हैं।

ExcelDataReader reader = new ExcelDataReader(ExcelFileUpload.PostedFile.InputStream); 
+1

वर्तमान वाक्यविन्यास प्रतीत होता है: IExcelDataReader पाठक = नया ExcelReaderFactory.CreateOpenXmlReader (ExcelFileUpload.PostedFile.InputStream); या 97-2003 प्रारूप फ़ाइलों के लिए IExcelDataReader रीडर = नया ExcelReaderFactory.CreateBinaryReader (ExcelFileUpload.PostedFile।आगत प्रवाह); – StuartQ

4

SpreadsheetGear यह कर सकते हैं:

SpreadsheetGear.IWorkbook workbook = SpreadsheetGear.Factory.GetWorkbookSet().Workbooks.OpenFromStream(stream); 

आप free evaluation साथ खुद के लिए यह कोशिश कर सकते हैं।

अस्वीकरण: मैं खुद SpreadsheetGear LLC

+2

+1 मुझे अभी यह करने की ज़रूरत है और यह देखकर प्रसन्नता हुई कि एसएसजी ऐसा कर सकता है क्योंकि मुझे पहले से ही लाइसेंस मिला है - मुझे कोई गड़बड़ बचाता है! –

3

यह EPPlus के साथ आसानी से किया जा सकता है।

//the excel sheet as byte array (as example from a FileUpload Control) 
byte[] bin = FileUpload1.FileBytes; 

//gen the byte array into the memorystream 
using (MemoryStream ms = new MemoryStream(bin)) 
using (ExcelPackage package = new ExcelPackage(ms)) 
{ 
    //get the first sheet from the excel file 
    ExcelWorksheet sheet = package.Workbook.Worksheets[1]; 

    //loop all rows in the sheet 
    for (int i = sheet.Dimension.Start.Row; i <= sheet.Dimension.End.Row; i++) 
    { 
     //loop all columns in a row 
     for (int j = sheet.Dimension.Start.Column; j <= sheet.Dimension.End.Column; j++) 
     { 
      //do something with the current cell value 
      string currentCellValue = sheet.Cells[i, j].Value.ToString(); 
     } 
    } 
} 
0

मैं ClosedXML nuget पैकेज का उपयोग धारा से एक्सेल सामग्री पढ़ने के लिए। इसमें XLWorkbook कक्षा में एक कन्स्ट्रक्टर अधिभार है जो एक्सेल फ़ाइल (उर्फ वर्कबुक) को इंगित करने वाली धारा लेता है।

अपने कोड फ़ाइल के शीर्ष पर

आयातित नाम स्थान:

using ClosedXML.Excel; 

स्रोत कोड:

var stream = /*obtain the stream from your source*/; 
if (stream.Length != 0) 
{ 
    //handle the stream here 
    using (XLWorkbook excelWorkbook = new XLWorkbook(stream)) 
    { 
     var name = excelWorkbook.Worksheet(1).Name; 
     //do more things whatever you like as you now have a handle to the entire workbook. 
     var firstRow = excelWorkbook.Worksheet(1).Row(1); 
    } 
} 
संबंधित मुद्दे