簡體   English   中英

使用oledb從空文件中讀取 - 空字符串

[英]Reading from excel file using oledb - empty strings

我正在使用oledb從excel文件中讀取。

    DataTable sheet1 = new DataTable();
    string excelCS = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";" + "Extended Properties=\"Excel 12.0 Xml;HDR=NO;TypeGuessRows=0;ImportMixedTypes=Text\"";

    using (OleDbConnection connection = new OleDbConnection(excelCS))
    {
        connection.Open();
        string selectSql = @"SELECT * FROM [Sheet1$]";   
        using (OleDbDataAdapter adapter = new OleDbDataAdapter(selectSql, connection))
        {
            adapter.Fill(sheet1);
        }
        connection.Close();
    }

但是文件的某些單元格存在問題。

對於某些單元格,我得到一個空值而不是文本。 我試圖將一些其他文本放入這些單元格但它不起作用 - 我仍然得到空字符串。 但刪除列后再插入我的應用程序獲取正確的單元格值。 重要的是問題不在於列中的所有單元格。

這是單元格格式的問題嗎? 此excel文件將由另一個系統生成,因此我無法手動修改它。

有人有什么問題有什么不對,我該怎么辦?

在連接字符串末尾使用IMEX = 1 這將解決您的問題。

始終使用IMEX = 1是檢索混合數據列的數據的更安全的方法。 ..”

請記住,當您使用Update而不是Select ,有時使用IMEX會涉及一些錯誤。

使用此方法在c#中將Execel轉換為不帶空字符串的數據集

 public static DataSet ConvertExcelToDataTable(string FileName)  
    {
        DataSet ds = new DataSet();
        string strConn = "";

        strConn = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + FileName + ";Extended Properties=\"Excel 8.0; HDR=YES; IMEX=1;\"";
        OleDbDataAdapter da = new OleDbDataAdapter
        ("SELECT * FROM [Sheet1$]", strConn);


        da.Fill(ds);

        return ds;          
    }  

它將返回數據集。

我有這個問題。 我發現在返回空白值的單元格上,數據看起來像字符串,但其余數據看起來像數字,因此excel將字符串存儲在與數字不同的位置。 我將列格式更改為文本,並且拾取了所有數據。

此線程可能有助於更改格式: 將Excel列(或單元格)格式化為C#中的文本?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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