首页 文章

检查Excel工作表中是否存在列

提问于
浏览
3

我一直在使用一个程序,我导入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' .

如果你能帮助我,我会非常感激:)

2 回答

  • 0

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

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

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

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

    这个怎么样:

    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;
    }
    

相关问题