我正在使用OleDB DataReader从我的excel文件中获取数据(但在DataTable.Fill中也出现此问题)。问题是我有一个应该返回字符串的列。一切都很好,但最近,一个问题出现了,因为该列的单元格具有不同的格式。有些是在数字和其他文字。当我使用dataReader.GetSchema()进行检查时,它显示有问题的列被推断为类型System.String。与此问题是,所有非文本单元立即设置为空。Excel单元格格式问题
有没有一种方法可以向读者建议该列应该将列解析为System.Object,而不是将其推断为System.String并转储所有非字符串单元格?
我使用的连接字符串是:
串CONNSTRING = “提供商= Microsoft.Jet.OLEDB.4.0;” + “Data Source =”+ filePath +“;” + “扩展属性= Excel 8.0;”;
而且代码:浮现在脑海
using (OleDbConnection connection = new OleDbConnection(connString))
{
connection.Open();
foreach (string worksheetName in worksheetNames)
{
using (OleDbCommand command =
new OleDbCommand("SELECT * FROM [" + worksheetName + "]", connection))
{
TEntity entity;
using (OleDbDataReader dataReader = command.ExecuteReader())
{
while (dataReader.Read())
{
entity = GetDataFromDataTable(dataReader);
if (entity != null)
{
entityList.Add(entity);
}
}
}
}
}
connection.Close();
}
谢谢。 IMEX工作。 – Jonn 2010-06-21 22:34:29
仅供参考:使用Microsoft.Jet.OLEDB.4.0提供程序时将忽略MaxScanRows = 0;它仍然只扫描前8行。 Microsoft.ACE.OLEDB.12.0提供程序似乎不会遇到同样的问题。请参阅[KB](http://support.microsoft.com/default.aspx?scid=kb;en-us;257819)中_Rows到Scan_的部分 – codechurn 2012-02-09 01:37:42