2012-02-02 13 views
6

Burada benzer bir soru var In Memory OleDbConnection to Excel File ama, bu soru tamamen başka bir şekilde yaparak bunu kaçınarak yanıtlandı.Excel dosyalarını OleDbConnection Excel ACE Sürücüsünü bir dosya yerine, aranmaz bir System.IO.Stream kullanarak okuyabilir miyim?

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)); 
     } 
    } 
} 

Ben diskte OLMAYAN seekable System.IO.Stream değil bir kalıcı dosyayı Excel dosyasını çekin istiyorum: Burada

diskten bir Excel dosyasına erişmek için bir OleDbConnection kullanan bazı örnek kod .

Soru iki bölüme ayrılıyor, a) OleDbConnection'ı bir System.IO.Stream öğesine "işaretleyebilir miyim"? b) Eğer öyleyse bu, aranabilir olandan ziyade sadece ileriye doğru bir akım olabilir mi?

FYI: Bu kod snippet'ini çalıştırmak isterseniz, Microsoft Access Database Engine 2010 Redistributable'u yüklemeniz gerekir. Ve eğer 64 bit'i kurarsanız, projeyi x64 ve tam tersini hedeflemeniz gerekir.

+0

ederim olmayan aranabilir kısıtı altında bunu yapmak mümkün olurdu şüphesiz. Excel dosyaları (göstermiş olduğunuz gibi) .xls (xx) (xx) (xx) (xx) (xx) (xx) (xx) (xx) (xx) (xx) (xx) (xx) (xx) (xx) (xx) (xx) (xx) (xx) (xx) (=) seri biçim. Yani Bir Excel dosyasını tamamen ardışık olarak işlemek mümkün değildir. –

+0

Aşağıdaki yanıtı kontrol edin: http://stackoverflow.com/questions/908712/in-memory-oledbconnection-to-excel-file –

cevap

0

Kontrol bu eğer yardımcı olur: http://epplus.codeplex.com/ da

örnek 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];