【发布时间】:2025-11-25 06:20:10
【问题描述】:
我想用表格定义验证上传的 Excel 工作表的列名。 在这里,我从数据库中获取表定义,并使用 OLEDB 从 excel 表中获取列名。
我想验证表格中所有列在 excel 列中的可用位置。在这里,我得到了两个列名(即来自 excel 和表(DB))。
这是我尝试过的代码
//for validating column names
public bool ValidateColumnNames(string filename,DataExchangeDefinition dataExchangeDefinition)
{
string extension = Path.GetExtension(filename);
string connstring = string.Empty;
try
{
switch (extension)
{
case ".xls":
connstring = string.Format(ConfigurationManager.ConnectionStrings["Excel03ConString"].ConnectionString, filename);
break;
case ".xlsx":
connstring = string.Format(ConfigurationManager.ConnectionStrings["Excel07+ConString"].ConnectionString, filename);
break;
}
using (OleDbConnection connExcel = new OleDbConnection(connstring))
{
using (OleDbCommand cmd = new OleDbCommand())
{
cmd.Connection = connExcel;
connExcel.Open();
var dtExcelSchema = connExcel.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
connExcel.Close();
string firstSheet = dtExcelSchema.Rows[0]["TABLE_NAME"].ToString();
cmd.CommandText = "SELECT top 1 * FROM [" + firstSheet + "]";
using (OleDbDataAdapter da = new OleDbDataAdapter(cmd))
{
DataTable HeaderColumns = new DataTable();
da.SelectCommand = cmd;
da.Fill(HeaderColumns);
foreach (DataColumn column in HeaderColumns.Columns)
{
//Here i want to validate the column names
dataExchangeDefinition.FieldName = column.Caption.ToString();
}
}
}
}
}
catch (Exception ex)
{
throw ex;
}
return true;
}
【问题讨论】:
-
我猜你可以通过使用EPPlus库来避免使用
OleDbConnection(即不需要安装Office)。如果您知道标头的范围,则此库可以轻松获取它们。 -
旁注:
throw ex稍后会给您带来麻烦,因为它消除了原始堆栈跟踪。堆栈跟踪将表明异常源自throw ex行,因此您不会知道它实际发生在哪里。如果您所做的只是捕捉和重新抛出,那么最好完全忽略try/catch。
标签: c# excel asp.net-mvc oledb