繁体   English   中英

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

[英]check if a column exists in Excel sheet

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

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

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

这个怎么样:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM