C# 如何排除在Excel工作表中没有数据的默认命名列,该工作表是在数据集中获取的
我有一个包含多行和多列的excel工作表,我在.NET应用程序的数据集中获取它(使用C#)。当我通过一个简单的SELECT查询看到返回的数据集时,excel工作表具有我想要的必需列,并且在它们之间有一些空白列,默认情况下,这些列的名称为F1、F2、F3等等。我要做的是删除这些列,只获取所需的列。C# 如何排除在Excel工作表中没有数据的默认命名列,该工作表是在数据集中获取的,c#,asp.net,sql-server-2008,C#,Asp.net,Sql Server 2008,我有一个包含多行和多列的excel工作表,我在.NET应用程序的数据集中获取它(使用C#)。当我通过一个简单的SELECT查询看到返回的数据集时,excel工作表具有我想要的必需列,并且在它们之间有一些空白列,默认情况下,这些列的名称为F1、F2、F3等等。我要做的是删除这些列,只获取所需的列。 提前感谢。使用DataTable和DataView进行尝试: DataTable oldTable = dataSet.Tables[0]; DataTable newTable = oldTable.
提前感谢。使用DataTable和DataView进行尝试:
DataTable oldTable = dataSet.Tables[0];
DataTable newTable = oldTable.DefaultView.ToTable(false, "Only columns you want", "Only columns you want");
对于所有列名称,您可以尝试以下操作:
for (int col = dataTable.Columns.Count - 1; col >= 0; col--)
{
bool removeColumn = true;
foreach (DataRow row in dataTable.Rows)
{
if (!row.IsNull(col))
{
removeColumn = false;
break;
}
}
if (removeColumn)
dataTable.Columns.RemoveAt(col);
}
或更短的LinQ版本:
for (var col = dataTable.Columns.Count - 1; col >= 0; col--)
{
bool removeColumn = dataTable.Rows.Cast<DataRow>().All(row => row.IsNull(col));
if (removeColumn)
dataTable.Columns.RemoveAt(col);
}
for(var col=dataTable.Columns.Count-1;col>=0;col--)
{
bool removeColumn=dataTable.Rows.Cast().All(row=>row.IsNull(col));
如果(删除列)
dataTable.Columns.RemoveAt(col);
}
@Yeronimo
您对动态列的回答很好。。。非常感谢你,先生
还有一些相关的文章可能会有所帮助
我无法直接写入列名,因为我必须在代码的后面部分动态处理它们。然后尝试以下操作:它很接近,但无法准确解决我正在尝试的问题,因为列名不是空的,但默认有一些值,例如Emp ID、Emp Name、F1、F2、Salary、F4、Acc No。我需要删除F1、F2和F4。而且每次我上传一个新的excel文件时,这些列都是动态的。你有没有设法让它工作?我试过了,它对我很有效。是的,它很好用,但后来我陷入了另一个问题。“我的excel工作表”包含某些列的某些子列,这些空白子列不会被删除