我有一个带有1列的excel文件,该列包含混合数据,整数和字符串。
从excel文件中读取数据后,我看到带有数据AZ-965的单元格为空。
这是我的字符串连接
return new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source="
+ excel + ";Extended Properties='Excel 12.0;HDR=YES;IMEX=1;ImportMixedTypes=Text;TypeGuessRows=0;';");
这就是我从Excel文件读取数据的方式
private static List<T> GetImportedData<T>(string sheet, OleDbConnection myConnection,
List<string> column, ImportDataView<T> view) where T : IImportableData
{
var cols = string.Join( ",", column.Select(Cast));
var formattableString = $"select {cols} from [{sheet}$]";
using (var MyCommand = new
OleDbDataAdapter(formattableString, myConnection))
{
using (var DtSet = new DataSet())
{
int nbRow = 0;
MyCommand.Fill(DtSet);
var dt = DtSet.Tables[0];
var rows = dt.AsEnumerable();
var convertedList = rows
//.AsParallel()
.Select(x => GenerateImport<T>(x, column, ref nbRow, view))
.ToList();
return convertedList;
}
}
}
private static string Cast(string arg)
{
return $"IIf(IsNull([{arg}]), '', CStr([{arg}]))";
// return $"CStr([{arg}]) as {cleanName(arg)}";
//return $"[{arg}]";
}
我检查了此link,但没有任何效果,同样的问题
答案 0 :(得分:1)
TypeGuessRows不是连接字符串属性,至少不是我所知道的。这是一个注册表项:
所以我不认为这是在做您想做的...或任何与此有关的事情。
如果您无法控制注册表或文件内容,我的唯一建议是将连接字符串(HDR=YES
)中的header属性更改为“ no”,以便它读取第一条记录。作为文本输入...然后您可以有效地删除第一行。
这不是一个很好的解决方案,但是它应该可以满足您的要求。
或者,您可以尝试使用DbDataReader
而不是使用数据适配器来读取内容:
using (OleDbCommand cmd = new OleDbCommand(formattableString, conn))
{
using (OleDbDataReader reader = cmd.ExecuteReader())
{
string column = reader.IsDBNull(0) ? null : reader.GetValue(0).ToString();
}
}
根据我对您要执行的操作的推断,数据读取器实际上还可以提供其他一些优点。