C# 如何排除在Excel工作表中没有数据的默认命名列,该工作表是在数据集中获取的

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.

我有一个包含多行和多列的excel工作表,我在.NET应用程序的数据集中获取它(使用C#)。当我通过一个简单的SELECT查询看到返回的数据集时,excel工作表具有我想要的必需列,并且在它们之间有一些空白列,默认情况下,这些列的名称为F1、F2、F3等等。我要做的是删除这些列,只获取所需的列。
提前感谢。

使用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工作表”包含某些列的某些子列,这些空白子列不会被删除