【问题标题】:check if a column exists in Excel sheet检查Excel工作表中是否存在列
【发布时间】:2013-07-23 20:22:56
【问题描述】:

我一直在使用一个程序,在该程序中我导入了 2 个 excel 文件,而这些 excel 文件具有不同的列名。因此,用户可能会导入错误的 excel 文件(具有其他列名)而我的问题是我正在使用 OledbDataAdapter 从 excel 中读取数据,所以我必须指定每列的名称,所以当用户导入错误的文件时程序停止工作(因为程序找不到正确的列来获取数据)。

好的,我的问题是,有没有办法检查特定 Excel 表中是否存在列? 因此,如果用户导入的文件中不存在该列,我将能够做一些事情......

这是我的代码的一部分:

OleDbCommand command1 = new OleDbCommand(
    @"SELECT DISTINCT serie FROM [Sheet1$] 
      WHERE serie =@MercEnInventario AND serie IS NOT NULL", connection);
command1.Parameters.Add(new OleDbParameter("MercEnInventario", MercInv));
string serieN = Convert.ToString(command1.ExecuteScalar());
readerOle = command1.ExecuteReader();
readerOle.Close();

当我尝试为字符串“serieN”赋值时出现 OleDbException,因为用户导入的 Excel 文件中不存在列名“serie”。

如果你能帮助我,我将不胜感激:)

【问题讨论】:

  • 你能把它放在try-catch 类型的循环中吗?这样,当错误发生时,您将被定向到错误处理程序。丑陋但有效。
  • 当 excel 文件可能“关闭”时,这是我使用“select *”的一个地方......你可以从 [Sheet1$] 中执行“select *”。 ...把它放在 IDataReader 中......然后在第一行之后中断......并创建一个已知列名的集合。Excel 文件是如此善变......我讨厌查询它们。

标签: c# sql excel


【解决方案1】:

OleDbConnection 具有GetOleDbSchemaTable 命令,允许您仅检索列列表。一个示例代码是

DataTable myColumns = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, new object[] { null, null, "Sheet1$", null });

这将返回一个 DataTable,其中填充了列信息(名称、类型等)。然后,您可以循环通过检查“COLUMN_NAME”列的行集合,例如

foreach (DataRow dtRow in myColumns.Rows)
{
   if (dtRow["COLUMN_NAME"].ToString() == "serieN") // Do your stuff here ....
}

【讨论】:

    【解决方案2】:

    这个怎么样:

    public bool FieldExists(OleDbConnection connection, string tabName, string fieldName)
    {
      var adapter = new OleDbDataAdapter(string.Format("SELECT * FROM [{0}]", tabName), connection);
      var ds = new DataSet();
      adapter.Fill(ds, tabName);
    
      foreach (var item in ds.Tables[tabName].Rows[0].ItemArray)
      {
        if (item.ToString() == fieldName)
          return true;
      }
      return false;
    }
    

    【讨论】:

    • 感谢您的回答,但我之前找到了更清楚的答案,但还是 tnx
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-08
    • 1970-01-01
    • 1970-01-01
    • 2011-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多