簡體   English   中英

使用ODBC從Excel中將Excel數據讀取為字符串

[英]Read excel Data as string from Excel using ODBC

我正在嘗試使用ODBC將Excel數據讀取到C#中,這是我的代碼

 string    lstrFileName = "Sheet1";
            //string strConnString = "Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq="+path+ ";Extensions=asc,csv,tab,txt;Persist Security Info=False";
            string strConnString = "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};Dbq=E:\\T1.xlsx;Extensions=xls/xlsx;Persist Security Info=False";
            DataTable ds;
            using (OdbcConnection oConn = new OdbcConnection(strConnString))
            {
                using (OdbcCommand oCmd = new OdbcCommand())
                {
                    oCmd.Connection = oConn;

                    oCmd.CommandType = System.Data.CommandType.Text;
                    oCmd.CommandText = "select A   from [" + lstrFileName + "$]";

                    OdbcDataAdapter oAdap = new OdbcDataAdapter();
                    oAdap.SelectCommand = oCmd;

                    ds = new DataTable();
                    oAdap.Fill(ds);
                    oAdap.Dispose();



                    // ds.Dispose();
                }

            }

我的樣本數據A 1 2 3 AA BB其數據表的讀取1,2,3和兩個空白行,我可以理解,因為第一行決定了數據類型,但是我如何轉換為字符串並讀取所有行。 任何建議。 我已經嘗試過CStr,但沒有幫助。

對於此處類似問題的先前討論,請檢查以下內容:

通過OleDB讀取Excel文件時非空單元格中的DBNull

作為一種解決方法,您也可以將列設置為“文本”格式(即在Excel中,選擇列,右鍵單擊“設置單元格格式...”),盡管如果要處理大量文件或必須不要碰文件。

這部分是推測,但是當將Excel文檔作為數據庫讀取時,適配器必須對數據類型做出判斷,並且通常做得很好。 但是,由於Excel允許使用混合數據類型(而數據庫不允許),因此有時會出錯。

我的建議是不要使用數據適配器,而應將每個字段作為對象類型讀取。 從那里,您可以輕松地將它們轉換為字符串(StringBuilder,ToString()等),甚至可以將TryParse轉換為您懷疑它們應為字段的字段,而無需考慮ODBC數據類型。

這樣的事情將是一個樣板:

using (OdbcCommand oCmd = new OdbcCommand())
{
    oCmd.Connection = oConn;

    oCmd.CommandType = System.Data.CommandType.Text;
    oCmd.CommandText = "select A   from [" + lstrFileName + "$]";

    using (OdbcDataReader reader = oCmd.ExecuteReader())
    {
        object[] fields = new object[reader.FieldCount];

        while (reader.Read())
        {
            reader.GetValues(fields);

            // do something with fields
        }
    }

}

暫無
暫無

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

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