![](/img/trans.png)
[英]The Microsoft jet database engine could not find object while reading dbf file
[英]Reading an XLS file with the Microsoft Jet Engine
我想允許我的應用程序從XLS
文件導入數據。 我已經使用CSV
文件和XML
文件進行了此操作,但是想為用戶打開作用域。 我在加載文件時遇到麻煩。 我們將文件( XLS
, CSV
, XML
)加載到數據集中,然后從那里進行處理。 XLS
的加載代碼如下
FileInfo fi = new FileInfo(filename);
//create and open a connection with the supplied string
OleDbConnection objOleDBConn;
objOleDBConn = new OleDbConnection(string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'", fi.FullName));
objOleDBConn.Open();
DataTable dt = objOleDBConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
if (dt == null || dt.Rows.Count == 0)
{
return;
}
string sheet = dt.Rows[0]["TABLE_NAME"].ToString();
//then read the data as usual.
OleDbDataAdapter objOleDBDa;
objOleDBDa = new OleDbDataAdapter(string.Format("select * from [{0}]",sheet), objOleDBConn);
objOleDBDa.Fill(data);
objOleDBConn.Close();
這樣我的數據就可以加載了,但是它似乎設置了各列的數據類型,這對我的其中一列是個問題。 這是一個字段,我們選擇接受False
, True
, Yes
, No
, Y
和N
有一些代碼可以稍后將其轉換為布爾值。 這在CSV
文件(連接字符串不同的文件)中工作正常,但在XLS
,如果前10行說FALSE
或TRUE
,然后說第11行說YES
,那么我只會得到一個空條目。 我猜想它會讀取前幾個條目並基於此確定數據類型?
問題:是否有辦法關閉根據前幾個條目標識列的數據類型的機制?
這個問題與Excel中的OLEDB-provider和Excel讀取ASP.NET中的 單元格值截斷非常相似:如果列具有不同的數據格式,則無法讀取數據在這些其他問題中似乎討論了幾個可行的解決方案。
有一個注冊表設置可以告訴Jet提供程序要讀取多少行才能推斷出列的數據類型。 我相信它默認為8。 它是:
HKLM\Software\Microsoft\Office\12.0\Access Connectivity Engine\Engines\Excel\TypeGuessRows
(如適用,請更改版本)。 在您的情況下,它推斷出布爾值,因此將忽略字符串值“ yes”。
技巧是將標頭行作為要從中推斷數據類型的行,以便將所有列都讀取為字符串。 然后,如果需要,您將能夠解析代碼以更正數據類型,而不會丟失值-用於此HDR = No
objOleDBConn = new OleDbConnection(string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR=No;IMEX=1'", fi.FullName));
試試我通過堆棧溢出發布的OleDBAdapter Excel QA 。
我用一個全為TRUE或FALSE填充工作表列,然后隨機輸入幾個“是”或“否”值,它工作得很好...
在“調試”模式下運行,然后在填充數據集可視化器后單擊以查看結果。 或者,將其添加到輸出代碼的末尾
// DataSet:
Object row11Col3 = ds.Tables["xlsImport"].Rows[11][3];
string rowElevenColumn3 = row11Col3.ToString();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.