我正在使用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文件将由另一个系统生成,因此我无法手动修改它。
有人有什么问题有什么不对,我该怎么办?
答案 0 :(得分:1)
在连接字符串末尾使用IMEX = 1
。这将解决您的问题。
始终使用IMEX = 1是检索混合数据数据的更安全的方法 列。 ..“
请注意,在您使用Update
而不是Select
时,有时使用IMEX会涉及一些错误。
答案 1 :(得分:1)
使用此方法在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;
}
它将返回数据集。
答案 2 :(得分:0)
我有这个问题。我发现在返回空白值的单元格上,数据看起来像字符串,但其余数据看起来像数字,因此excel将字符串存储在与数字不同的位置。我将列格式更改为文本,并且拾取了所有数据。
此主题可能有助于更改格式:Format an Excel column (or cell) as Text in C#?