【发布时间】:2017-12-21 13:18:22
【问题描述】:
我正在导入一个 excel 文件并尝试将其导入 DataSet。问题是,如果列名包含.,例如导入后列名是Sr. No.,则DataSet 中显示的列名是Sr# No#。
以下是代码:
public DataSet ConnectExcel(string filetable)
{
DataSet ds = new DataSet(TABLE_NAME);
string excelConnectionString;
string extension = Path.GetExtension(filetable);
if (extension == ".xls")
{
excelConnectionString = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR=YES\"", strCSVFilePath);
}
else
{
excelConnectionString = String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0 xml;HDR=YES;\"", strCSVFilePath);
}
System.Data.OleDb.OleDbConnection oleDBCon = new System.Data.OleDb.OleDbConnection(excelConnectionString);
try
{
if (oleDBCon.State == ConnectionState.Open)
{
//lblResult.Text = "file is in open state. Please close the file.";
}
else
{
oleDBCon.Open();
DataTable Sheets = oleDBCon.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null);
foreach (DataRow dr in Sheets.Rows)
{
string sht = dr[2].ToString().Replace("'", "");
System.Data.OleDb.OleDbDataAdapter dataAdapter = new System.Data.OleDb.OleDbDataAdapter("select * from [" + sht + "]", oleDBCon);
try
{
dataAdapter.Fill(ds);
ds.Tables[0].TableName = TABLE_NAME;
ds.AcceptChanges();
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
finally
{
dataAdapter.Dispose();
}
}
}
}
catch (Exception e) //Error
{
MessageBox.Show(e.Message);
}
finally
{
if (oleDBCon.State == ConnectionState.Open)
oleDBCon.Close();
oleDBCon.Dispose();
}
return ds;
}
【问题讨论】:
-
如果稳定了可以再替换
DataSet吗? -
您可以通过循环遍历每一列来替换数据表列名中的#
-
@satsvelke 为什么需要循环每个列?
-
@satsvelke @LeiYang 我让用户选择他们想要查看的文件,因此检查和替换
#将不起作用,因为列名实际上可能包含#和我不应该只是把它改成. -
@AdarshRavi 你可以使用
connection.GetSchema("Tables")知道真实的工作表名称。
标签: c# excel visual-studio-2013 datatable oledbdataadapter