我正在尝试使用OpenXML和LoadfromDataTable创建Excel工作表。如果有更好的话,我没有和那个功能结婚。我试图排除数据表列,以便它们不会显示在Excel工作表中。例如,我有一个数据表,其中包含列“ID”,“名称”和“地址”。
ID Name Address
1 Name1 So SO Street
2 Name2 Do Do Street
我要做的是创建一个只有列名称和地址以及排除ID的新数据表。
我有一个linq查询,它获取了我希望在新数据表中看到的列列表,如下所示:
var columns = dt1.Columns.Cast<DataColumn>().Where(c => c.ColumnName != "ID").ToList();
我正在尝试使用该列表来创建一个新的数据表,只是列表中的那些列。
答案 0 :(得分:0)
您可以在数据表中使用选择几列。选择
var result = from a in new DataContext().DataColumn
where a.ColumnName != "ID"
select new {a.NotForExcel, a.ExcelColumn1, a.ExcelColumn2 };
var ExcelList = result.AsEnumerable()
.Select(o => new DataColumn {
Column1 = o.ExcelColumn1,
Column2 = o.ExcelColumn2
}).ToList();
答案 1 :(得分:0)
通过创建已定义DataTable
的新DataView
,有一种简单的方法可以做到这一点。要显示示例,请创建table1
:
DataTable table1 = new DataTable();
table1.Columns.Add("ID");
table1.Columns.Add("Value1");
table1.Columns.Add("Value2");
table1.Rows.Add(new object[] { 0, "zero", "nothing" });
table1.Rows.Add(new object[] { 1, "one", "single" });
现在,您需要通过过滤table2
列来指定新table1
中要包含的列。在我们的示例中,我们需要除&#34; ID&#34;:
string[] columns = table1.Columns.OfType<DataColumn>()
.Where(c => c.ColumnName != "ID")
.Select(c => c.ColumnName).ToArray();
使用此列,您可以创建新的table2
:
DataTable table2 = new DataView(table1).ToTable(false, columns);
结果table2
看起来像
Value1 | Value2
-------|--------
zero | nothing
one | single