Excel 包含“.”的列名转换成 '#'
Excel column name containing '.' converted to '#'
我正在导入一个 excel 文件并尝试将其导入数据集中。问题是,如果列名称包含 .
,例如,如果列名称在导入后为 Sr. No.
,则数据集中显示的列名称为 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;
}
这里有几个选项。
在您的原始数据中,您可以在任何您不想转换的值前放置一个 '
。
您还可以单击 excel 电子表格中的每一列,并将其数据类型从常规更改为您想要的任何格式。
您的第三个选择是在您的连接字符串中使用 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);
}
如果在更改连接字符串后仍有问题,您将不得不将 HDR
更改为 NO
并将 header 列也视为字符串。在这种情况下,您可以将列名替换为第一行中的数据(实际列名),然后使用 ds.Tables[0].Rows.RemoveAt(0);
从数据 table 中删除第一行
我正在导入一个 excel 文件并尝试将其导入数据集中。问题是,如果列名称包含 .
,例如,如果列名称在导入后为 Sr. No.
,则数据集中显示的列名称为 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;
}
这里有几个选项。
在您的原始数据中,您可以在任何您不想转换的值前放置一个 '
。
您还可以单击 excel 电子表格中的每一列,并将其数据类型从常规更改为您想要的任何格式。
您的第三个选择是在您的连接字符串中使用 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);
}
如果在更改连接字符串后仍有问题,您将不得不将 HDR
更改为 NO
并将 header 列也视为字符串。在这种情况下,您可以将列名替换为第一行中的数据(实际列名),然后使用 ds.Tables[0].Rows.RemoveAt(0);