2012-06-04 113 views
5

看看這個帖子:Excel "External table is not in the expected format."閱讀XLSX保存爲XLS與LinqToExcel

我在這個職位描述了同樣的問題,但我使用LinqtoExcel讀取該文件,而不是簡單的查詢。

將LinqToExcel等效於設置連接字符串作爲該帖子的答案的建議是什麼?

這裏是我使用的代碼:

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) 
{ ... 

而且我的問題是:「外部表不在預期的格式」在foreach開始。

編輯(我的問題已解決,但問題仍未解答):我正在使用EPPlus而不是LinqToExcel完成此任務,現在所有工作都正常。

+0

LinqToExcel適用於Excel 2007中的文件。您只需要使用Ace數據庫引擎,這在下面的答案中進行了解釋。 – Paul

回答

5

您將需要使用ACE數據庫引擎而不是JET數據庫引擎。

您可以通過設置DatabaseEngine屬性對LinqToExcel執行此操作。這裏有一個例子

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

謝謝!我沒有發現任何像DatabaseEngine這樣的屬性,因爲我使用的是LinqToExcel 1.0。我更新了LinqToExcel 1.6,現在那個房產就在那裏;設置它允許我用LinqToSql讀取有問題的文件。我會繼續使用EPPlus,因爲它更加面向對象。 LinqToExcel將是我選擇純粹的Excel 97/2003文件。 – daniloquio

+0

@daniloquio LinqToExcel仍然可以讀取Excel 2007文件。你只需要使用Ace數據庫引擎。在64bit上的 – Paul

+0

將擴展名更改爲xls或只是將其刪除。沒有這個 - 同樣的錯誤。 - 從文檔:設置數據庫引擎使用(以xlsx,xlsm和xlsb結尾的電子表格必須使用Ace數據庫引擎)(如果運行64位,這默認爲ACE(JET無法工作),如果運行32位這個退役給JET) – Artiom