我已将excel文件的信息传递到数据表中。 我必须只选择一部分列来采取行动。但是其中四列具有相同的标题名称,因此我无法通过标题名称来引用它们。
实施例。数据|名称|客服中心|额外|额外|额外|。额外
我无法更改标题名称,因为excel文件是从程序自动生成的报告。直到其他功能,我正在选择这样的列:
DataTable dt = xls.ReadExcel(file);
dt = dt.SelectColumns(false, "Date", "Transaction ID", "Service ID", "Service",);
SelectColumns方法是:
public static DataTable SelectColumns(this DataTable dt, bool distinct, params string[] filters)
{
DataView dv = new DataView(dt);
DataTable newdt = dv.ToTable(distinct, filters);
return newdt;
}
答案 0 :(得分:1)
修改扩展方法以接受整数并过滤掉未指定的列。您必须迭代集合"从右到左",因为它在迭代时会发生变化。这也意味着您应该以正确的顺序输入params
(从左到右,意味着最小的第一个)以确保正确的过滤。其他方法是在扩展方法中订购params
集合
还要记住,列使用从零开始的索引,因此第一列为0,而不是1。
这适用于快速测试。
public static DataTable SelectColumns(this DataTable dt, params int[] filters)
{
for (int i = dt.Columns.Count - 1; i >= 0; i--)
{
DataColumn c = dt.Columns[i];
if (!filters.Contains(c.Ordinal))
{
dt.Columns.Remove(c);
}
}
return dt;
}