2017-11-11 155 views
0

我用这个功能来读取Excel文件数据表:C#:读取Excel文件单元格的格式未能像数

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文件读取到数据表格中作为字符串的单元格,而不是检测到数字?

+0

另一个问题尝试格式化底层Excel作为文本 –

+0

你可以附加电子表格(透过Dropbox或G-驱动器或东西)?我相信你,但我从来没有见过也不能复制这个问题。 – Hambone

回答

0

我知道你已经明确要求使用Excel工作表。作为遇到完全相同问题的人,我建议您使用ClosedXML,而不是使用Oledb连接。

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

我已经回答了类似这一个在这里

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