2012-02-02 11 views
6

Jest podobne pytanie tutaj In Memory OleDbConnection to Excel File, ale na to pytanie udzielono odpowiedzi, unikając go całkowicie, robiąc to w inny sposób.Czy mogę odczytać pliki Excel za pomocą sterownika ACD OleDbConnection Excel z niewidocznego pliku System.IO.Stream zamiast pliku?

Oto niektóre przykładowy kod, który wykorzystuje OleDbConnection uzyskać dostęp do pliku Excel z dysku:

static void Main(string[] args) 
{ 
    String filePathToExcelFile = "c:\\excelfile.xls"; 
    Boolean hasHeaders = true; 

    String connectionString = String.Format(
     "Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};" + 
     "Extended Properties=\"Excel 12.0;HDR={1};IMEX=2\"", 
     filePathToExcelFile, hasHeaders ? "Yes" : "No"); 

    using(OleDbConnection conn = new OleDbConnection(connectionString)) 
    using (OleDbCommand command = new OleDbCommand("SELECT * FROM [Sheet1$]", 
     conn)) 
    { 
     conn.Open(); 
     OleDbDataReader datareader = command.ExecuteReader(); 

     while(datareader.Read()) 
     { 
      Object[] values = new object[datareader.FieldCount]; 
      datareader.GetValues(values); 

      Console.WriteLine(String.Join(",", values)); 
     } 
    } 
} 

Chciałbym wyciągnąć plik Excel z nie-możliwy do przeszukania System.IO.Stream, a nie trwałe plik na dysku .

Pytanie dzieli się na dwie części: a) Czy mogę "wskazać" OleDbConnection na System.IO.Stream? b) Jeśli tak, czy może to być strumień tylko do przodu, a nie jeden, który można zobaczyć?

FYI: jeśli chcesz uruchomić ten fragment kodu, musisz zainstalować Microsoft Access Database Engine 2010 Redistributable. A jeśli zainstalujesz 64-bitową wersję, musisz ustawić projekt na x64 i na odwrót.

+0

I wątpię, że będziesz w stanie to zrobić pod przymusem nie możliwy do przeszukania. Pliki Excel, zarówno skonfiskowane pliki binarne .xls (jak pokazałeś), jak i zorganizowany plik XML .xlsx [(OOXML)] (http://en.wikipedia.org/wiki/Office_Open_XML), mają informacje w zdecydowanie nie- format seryjny. To znaczy. nie jest możliwe przetwarzanie pliku programu Excel po kolei. –

+0

Sprawdź następującą odpowiedź: http://stackoverflow.com/questions/908712/in-memory-oledbconnection-to-excel-file –

Odpowiedz

0

Sprawdź to, czy to pomaga: http://epplus.codeplex.com/

również przykładowy kod:

string fileName = System.Windows.Forms.Application.StartupPath + "\\Resources\\SUPPLIERDECISIONKEYLIST.xlsx"; 
using (var pck = new OfficeOpenXml.ExcelPackage()) 
{ 
using (var stream = File.OpenRead(fileName)) 
{ 
pck.Load(stream); 
} 
var ws = pck.Workbook.Worksheets[SheetNo]; 
Powiązane problemy