包含'。'的Excel列名 转换成 '#'

我正在导入一个Excel文件,并试图让相同的数据集。 问题是,如果列名包含. 例如,如果导入后列名是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; } 

你在这里有几个select。

在原始数据中,您可以在任何您不想转换的值之前加上'

您也可以单击Excel电子表格中的每一列,并将其数据types从常规更改为所需的任何格式。

您的第三个select是在连接string中使用IMEX=1

 if (extension == ".xls") { excelConnectionString = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1;\"", strCSVFilePath); } else { excelConnectionString = String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0 xml;HDR=YES;IMEX=1;\"", strCSVFilePath); } 

如果更改连接string后仍然有问题,则必须将HDR更改为NO ,并将标题列作为string处理。 在这种情况下,您可以使用第一行中的数据(实际列名称)replace列名称,然后使用ds.Tables[0].Rows.RemoveAt(0);从数据表中删除第一行ds.Tables[0].Rows.RemoveAt(0);