将Excel导入到C#(WPF)时为什么要replace列名中的特定字符

将Microsoft Excel文件导入C#(WPF)时,列名(列标题)中的特定字符将被replace。 例如! 它变成_.# 。 如何阻止它?

ConnectionString的:

 Provider=Microsoft.ACE.OLEDB.12.0; Data Source="+filePath+";Extended Properties="Excel 8.0;HDR=YES;CharacterSet=65001;"; 

和方法:

  public DataSet ImportExcel(string fileName) { tableList = null; DataSet ds = new DataSet(); string connectionString = GetConnectionString(fileName); using (OleDbConnection conn = new OleDbConnection(connectionString)) { conn.Open(); OleDbCommand cmd = new OleDbCommand(); cmd.Connection = conn; // Get all Sheets in Excel File DataTable dtSheet = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); tableList = new string[dtSheet.Rows.Count]; // Loop through all Sheets to get data foreach (DataRow dr in dtSheet.Rows) { string sheetName = dr["TABLE_NAME"].ToString(); tableList[dtSheet.Rows.IndexOf(dr)] = sheetName; Console.WriteLine("TABLE_NAME: " + sheetName); if (!sheetName.EndsWith("$")) continue; // Get all rows from the Sheet cmd.CommandText = "SELECT * FROM [" + sheetName + "]"; DataTable dt = new DataTable(); dt.TableName = sheetName; OleDbDataAdapter da = new OleDbDataAdapter(cmd); da.Fill(dt); rowsCount += dt.Rows.Count; ds.Tables.Add(dt); } cmd = null; conn.Close(); } return ds; } 

基本上,你只限于列名中允许使用哪些字符,这些字母,数字和字符:@#$ _请参阅这里 。 $符号和数字也不允许成为第一个字符。