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

时间:2013-07-23 20:22:57

标签: c# sql excel

我一直在使用我导入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 :(得分:1)

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 :(得分:0)

这个怎么样:

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