簡體   English   中英

為什么OleDB忽略Excel單元格?

[英]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的單元之間,所有單元的格式都完全相同。

我真的很沮喪!!!

有什么想法嗎?

 new OleDbConnection("...TypeGuessRows=0;ImportMixedTypes=Text");

我直覺你可能遇到我以前遇到的問題

嘗試將這些參數添加到您的連接字符串中。

我在獲取其他答案和評論時遇到了麻煩。 唯一需要的設置是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM