我正在尝试使用Excel工作表上载一些组织数据。Excel工作表有多个列和行,但列的位置每次上载时都会发生变化。如果列位置每次都保持不变,我可以设法读取Excel文件,但不确定如果列位置不一致,如何动态读取和Map字段。
我有一个Excel类似于此,列名称总是保持不变,但列的位置是不一致的每一次单次上传:
|OrgName | OrgNumber| OrgLevel| OrgState | OrgText| OrgCode| OrgStatus |
| ABC | 123 | 5 | NY | ABC1 | N/A | Active |
| XYZ | 456 | 6 | WA | XYZ1 | N/A | N/A |
| ASD | 789 | 8 | MA | ASD1 | 4566 | Active |
| JKL | 852 | 7 | IL | JKL1 | 7418 | Active |
样本代码:
DataSet dataSet = excelStream(files);
DataTable tbl = dataSet.Tables[0];
List<Model> Listmodel = new List<Model>();
for (int i = 1; i<tbl.Rows.Count; i++)
{
Model model = new Model();
model.OrgName = tbl.Rows[i][0].ToString();
model.OrgNumber = tbl.Rows[i][1].ToString();
model.OrgLevel = tbl.Rows[i][2].ToString();
model.OrgState = tbl.Rows[i][3].ToString();
model.OrgText = tbl.Rows[i][4].ToString();
model.OrgCode = tbl.Rows[i][5].ToString();
model.OrgStatus = tbl.Rows[i][7].ToString();
Listmodel.Add(model);
}
现在我需要动态读取数据来Map字段。有人能帮我吗?
2条答案
按热度按时间djp7away1#
要动态读取Excel文件并将列Map到字段,可以使用以下方法:
首先,需要读取Excel文件的第一行,其中包含列名。可以使用DataTable.Rows属性完成此操作。
然后,您可以创建一个字典,将列名Map到列索引,这样您就可以查找给定列名的列索引。
接下来,可以迭代DataTable的行,并使用字典查找每个字段的列索引。然后,可以使用这些列索引从DataTable读取值并填充模型对象。
下面是一个如何实现这一点的示例:
这种方法允许您动态读取Excel文件,而不管列的位置如何
lsmd5eda2#
您可以将Excel导出为CSV,它将始终从A1开始Map列,这样您就可以迭代CSV文件,并且不会出现动态Map问题