从excel中提取的空字段

时间:2012-11-28 12:27:45

标签: asp.net asp.net-mvc-3 excel

这是我的问题:

我正在从.NET MVC应用程序上的Excel文件中读取数据,我正在做的是从excel中读取所有数据,然后遍历每个记录,将记录中包含的数据插入到我的业务模型中。

一切都很完美。但是,我发现从excel中检索时,有时一个字段会返回一个空字符串。奇怪的是,这个字段可以包含一个简单的字符串或一个字符串,它将被视为一个数组(它可以包含构建数组的'|'字符)在某些excel文件中,当'|'时字段返回空char存在,而在其他情况下则不存在,并且此行为在整个文件中都是一致的。

还有其他字段可以接收分隔符并始终正常工作。两个字段之间的唯一区别是,工作的字符串是纯字符串,而失败的字符串是一串数字,可能为'|'将它们分开。

我试图更改分隔符(我尝试使用'#',结果相同)并专门将单元格格式化为文本而没有任何成功。

这是从excel中提取数据的方法

private DataSet queryData(OleDbConnection objConn) {
    string strConString = "SELECT * FROM [Hoja1$] WHERE NUMACCION <> ''";
    OleDbCommand objCmdSelect = new OleDbCommand(strConString, objConn);
    OleDbDataAdapter objAdapter1 = new OleDbDataAdapter();
    objAdapter1.SelectCommand = objCmdSelect;
    DataSet objDataset = new DataSet();
    objAdapter1.Fill(objDataset, "ExcelData");
    return objDataset;
}

我首先使用以下方法检查excel中的字段:

fieldsDictionary.Add("Hours", table.Columns["HOURS"].Ordinal);

之后,当循环访问DataSet时,我用以下内容提取数据:

string hourString = row.ItemArray[fieldsDictionary["Hours"]].ToString();

这些hourString在某些记录中为空。在某些Excel文件中,当记录包含“|”时,它是空的,而在其他文件中,它是空的。我还没有找到一个文件,它在两个类的记录中都返回空。

我对此很困惑。我很确定它必须与字段数据的数字性质相关,但是当我强制excel文件中的单元格为“text”时,我无法理解为什么它不能解决

任何帮助都将受到欢迎。

1 个答案:

答案 0 :(得分:0)

确定。我终于解决了这个问题。

如果Excel包含可能不同类的数据,则Excel似乎无法将整个列识别为相同的数据类型。即使您强制将单元格格式设置为工作簿上的文本,也会发生这种情况,因为当您查询数据时,它会根据收到的第一条记录将字段识别为确定类型;这就是为什么不同的文件清空不同类型的记录的原因,文件以纯文本开头清空数字值,反之亦然。

我找到了一个解决方案,只需将连接字符串更改为Excel即可。

这是我原来的连接字符串

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=pathToFile;Extended Properties="Excel 8.0;HDR=Yes;"

这是解决问题的方法

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=pathToFile;Extended Properties="Excel 8.0;HDR=Yes;IMEX=1"

参数IMEX = 1表明它必须以纯文本形式管理所有混合数据列。如果您需要编辑excel文件,这将不适合您,因为此参数也以只读模式打开它。然而,这对我的情况来说是完美的。