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

我一直在用一个程序,我导入2个Excel文件,这些Excel文件有不同的列名..所以这可能是用户导入错误的Excel文件(与其他列名)的可能性,我的问题是我正在使用OledbDataAdapter从excel读取数据,所以我必须指定每个列的名称,所以当用户导入错误的文件时,程序停止工作(因为程序无法find正确的列来获取数据)。

好吧,所以我的问题是,有没有办法检查一个列是否存在于特定的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(); 

当我尝试赋予string“serieN”的值时,我得到了一个OleDbException,因为列名“serie”在用户导入的excel文件中不存在。

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

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

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

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

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