[英]Why is OleDB ignoring Excel cells?
設置如下:
我有一個具有非常簡單頁面的Excel電子表格。 看起來像這樣:
我使用以下連接字符串訪問此文件:
string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR=NO\";", fn)
我訪問文件的功能如下:
try
{
string select = string.Format("SELECT * FROM [{0}$]", tab.PageName);
OleDbDataAdapter adapter = new OleDbDataAdapter(select, con);
DataSet ds = new DataSet();
adapter.Fill(ds, tab.PageName);
// DEBUG: Let's just see what it is getting...
for (int x = 0; x < 13; x++)
{
for (int y = 0; y < 3; y++)
{
Console.Write(ds.Tables[0].Rows[x][y].ToString() + "\t");
}
Console.WriteLine("");
}
}
catch
{ ... }
題
為什么代碼不讀取某些單元格? 請注意,C5處有文本“ Profit”。 我可以將B5讀為“ Revenue”。 我可以將C6讀取為整數值。 但是利潤似乎消失了。
標頭信息並不是什么大問題,但是整個真實數據塊都拒絕讀取。 而是即使單元格包含真實,有效,可用的數據,它也會返回DBNull。 在可讀取的單元和返回DBNull的單元之間,所有單元的格式都完全相同。
我真的很沮喪!!!
有什么想法嗎?
我在獲取其他答案和評論時遇到了麻煩。 唯一需要的設置是IMEX=1
但必須在擴展屬性中將其嵌套在單引號中,因此,以下是一個確切如何格式化附加IMEX設置的示例:
connection.ConnectionString =
@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\somepath\somefile.xls;Extended Properties='Excel 8.0;IMEX=1';";
if (ObjFile.Extension == ".xls")
conn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + srcFilePath + ";" + "Extended Properties='Excel 8.0;HDR=YES;'";
if (ObjFile.Extension == ".xlsx")
conn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + srcFilePath + ";" + "Extended Properties='Excel 12.0 Xml;HDR=YES;IMEX=1';";
if (ObjFile.Extension == ".xlsm")
conn = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + srcFilePath + ";Extended Properties='Excel 12.0 Macro;HDR=No;IMEX=1';";
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.