我正在通过mvc网站使用linq语句导入excel表格,如下所示
var members = (from memRec in excelFile.Worksheet(sheetName)
where memRec["FIRST_NAME"] != null
select memRec).ToList();
foreach (var member in members)
{
//save data
}
这里的问题是,假设一个特定的列"出生日期"前两列的单元格格式是"DATE" and display as dd/MM/yyyy
,第三列的单元格格式是"Text" and display as dd/MM/yyyy
, excel将认为第三列没有值,因为格式不匹配。
有办法解决这个问题吗
尝试声明对象并使用预定义的数据类型,如:
var q = from memRec in excelFile.Worksheet(sheetName)
where memRec["FIRST_NAME"] != null
select new Person()
{
Date = (DateTime)memRec [“Date”],
FirstName= (string)memRec [“FirstName”],
Age= (int)memRec [“Age”],
};
我找到解决办法了。
我们的服务器是Office 2010。
更改注册表项如下
- 在Windows环境下,选择开始►运行并输入REGEDIT显示注册表编辑器
- 在注册表树中选择"HKEY_LOCAL_MACHINE►Software►Microsoft►"Office►12.0►Access Connectivity Engine►Engines.
- 双击Excel节点 在右面板中,双击TypeGuessRows条目。
- 将数值数据从8改为0
- 单击OK。
- 选择File►Exit退出注册表编辑器窗口。
现在excel不会猜测行数据类型,因为我们将值从8更改为0。