日期:2014-05-17  浏览次数:20424 次

网站导入Excel,数据字段不固定,无法读取。
 利用Aspose.Cells控件 读取 Excel 表格 遇到一个问题。

正常上传表格格式
姓名、身份证号、月薪、房租、电视费

测试阶段,客户上传的表格格式有可能是:

身份证号、房租、月薪、姓名、电视费

表格内部列完全打乱。

以前做的是利用下标来做区分
读取姓名 代码为: dt.Rows[i][0].ToString();
身份证号 代码为:dt.Rows[i][1].ToString();
...., 这种方法完全可以正常读取入库。

但现在想 利用
dt.Rows[i]["姓名"].ToString();方式读取姓名行中数据 会出现错误。


列“姓名”不属于表 。 
说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 

异常详细信息: System.ArgumentException: 列“姓名”不属于表 。


excel 数据 Aspose.Cells

------解决方案--------------------
当然,列头只对最上面一行有效

你需要先循环读取
Dictionary<string, int> dict = new Dictionary<string, int>();
for (int i = 0; i <= 4; i++)
{
    dict.Add(dt.Rows[0][i].ToString(), i);
}

匹配列头,然后根据这个去读取数据:
dt.Rows[i][dict["姓名"]].ToString();
------解决方案--------------------
利用dt.Rows[i]["姓名"].ToString();这种方式读取,有时候存在空格或Tab键也没看到,既然Excel自己整理的,你应该有一个格式以及你的表相对应.或者你先把Excel全部导入数据库再做整理