2012-06-04 19 views
5

Bak Bu karakola LinqToExcel ile xls olarak kaydedilir: Excel "External table is not in the expected format."Okuma xlsx

Ben de buradan tasvir aynı sorun var ama bunun yerine düz sorguları dosyayı okumak için LinqtoExcel kullanıyorum.

Bağlantı dizgisini ayarlamak için LinqToExcel eşdeğeri ne olurdu? İşte

kullanıyorum kodudur:

var excelOM = new ExcelQueryFactory(pPathArchivoOM); 
var despachosClient = from c in excelOM.Worksheet<RegistroDespachoOM>("Tabla_1") 
         where c.DESTINAT.Contains("SOMETEXT") 
         select c; 
//Identificar los despachos asociados a números de documento sin datos aún. 
foreach (RegistroDespachoOM despacho in despachosClient) 
{ ... 

Ve benim problem: foreach start "Dış tablo beklenen biçimde değil".

DÜZENLEME (benim sorunum çözüldü ama soru yanıtlanmadı): Bu görev için LinqToExcel yerine EPPlus kullanıyorum ve her şey şimdi Tamam çalışıyor.

+0

LinqToExcel, Excel 2007 dosyaları için de çalışır. Aşağıdaki cevapta açıklanan Ace veritabanı motorunu kullanmanız yeterlidir. – Paul

cevap

5

JET veritabanı altyapısı yerine ACE veritabanı motorunu kullanmanız gerekir.

Bunu, DatabaseEngine özelliğini ayarlayarak LinqToExcel ile yapabilirsiniz. İşte bir örnek olan

var excelOM = new ExcelQueryFactory(pPathArchivoOM); 
excelOM.DatabaseEngine = DatabaseEngine.Ace; 
+1

Teşekkürler! LinqToExcel 1.0 kullandığım için DatabaseEngine gibi bir özellik bulamadım. LinqToExcel 1.6'ya güncelledim ve şimdi o özellik var; ayarlayarak sorunlu dosyayı LinqToSql ile okumamı sağladı. EPPlus kullanmaya devam edeceğim çünkü daha fazla nesne yönelimli. LinqToExcel, Excel 97/2003 dosyalarını saf dışı bırakma seçeneğim olacak. – daniloquio

+0

@daniloquio LinqToExcel, Excel 2007 dosyalarını okuyabilir. Ace veritabanı motorunu kullanmanız yeterlidir. 64bit üzerindeki – Paul

+0

, uzantıyı xls olarak değiştirir veya kaldırır. Bu olmadan - aynı hata. - - - - Belgelerden: Kullanılacak veritabanı motorunu ayarlar (xlsx ile biten e-tablolar, xlsm ve xlsb, Ace veritabanı motorunu kullanmalıdır) (Eğer 64 bit çalışıyorsa, bu varsayılan olarak ACE'ye (JET, yine de işe yaramazsa), eğer çalışıyorsa 32 bu JET JET) – Artiom