C#:读取Excel文件失败,单元格格式看起来像数字

时间:2017-11-11 08:44:37

标签: c# excel string datatable numbers

我使用此函数将excel文件读取为datatable:

public static DataTable exceldata(string filePath)
    {
        try
        {
            DataTable dtexcel = new DataTable();
            bool hasHeaders = false;
            string HDR = hasHeaders ? "Yes" : "No";
            string strConn;
            if (filePath.Substring(filePath.LastIndexOf('.')).ToLower() == ".xlsx")
                strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ";Extended Properties=\"Excel 12.0;IMEX=1;HDR=YES;TypeGuessRows=0;ImportMixedTypes=Text\"";
            else
                strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties=\"Excel 8.0;IMEX=1;HDR=YES;TypeGuessRows=0;ImportMixedTypes=Text\"";
            OleDbConnection conn = new OleDbConnection(strConn);
            conn.Open();
            DataTable schemaTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
            DataRow schemaRow = schemaTable.Rows[0];
            string sheet = schemaRow["TABLE_NAME"].ToString();
            if (!sheet.EndsWith("_"))
            {
                string query = "SELECT  * FROM [" + sheet + "]";
                OleDbDataAdapter daexcel = new OleDbDataAdapter(query, conn);
                dtexcel.Locale = CultureInfo.CurrentCulture;
                daexcel.Fill(dtexcel);
            }
            conn.Close();
            return dtexcel;
        }
        catch (Exception ex)
        {
            return null;
        }
    }

我的麻烦是:当Excel文件有一些格式看起来像数字的单元格(例如:301 / 1,181 / 3 ....)时,数据表在该单元格中返回空值。
如何将Excel文件读取为数据表,将单元格作为字符串,而不是检测到数字?

1 个答案:

答案 0 :(得分:0)

我知道你特意要求使用excel表。作为遇到完全相同问题的人,我建议您使用ClosedXML而不是使用Oledb连接。

封闭的XML读取速度更快,并且可以非常轻松地获取整个工作表或单元格的内容。

我已经回答了另一个与此类似的问题

https://stackoverflow.com/a/47235686/6729097