使用oledb从excel文件读取 – 空string

我正在使用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(); } 

但是文件的某些单元存在问题。

对于某些单元格,我得到一个空值而不是文本。 我试图把一些其他的文本放入这些单元格中,但它不起作用 – 我仍然得到空string。 但删除列后,再次插入我的应用程序得到正确的单元格的值。 重要的是,该问题不在列中的所有单元格。

这是单元格格式的问题吗? 这个excel文件将由另一个系统生成,所以我将无法手动修改它。

有没有人提出什么问题,我该怎么办?

在连接string的末尾使用IMEX = 1 。 这将解决你的问题。

总是使用IMEX = 1是一种更安全的方式来检索混合数据列的数据。 ..”

请记住,有时在使用Update而不是Select使用IMEX会涉及一些错误。

使用此方法将Execel转换为无空string的数据集在c#

  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; } 

它会返回数据集。

我有这个问题。 我发现,在返回空值的单元格中,数据看起来像string,但其余的数据看起来像数字,所以excel将string存储在与数字不同的位置。 我将列格式更改为文本,所有数据都被拾取。

此线程可能会帮助您更改格式: 将Excel列(或单元格)格式化为C#中的文本?