Имя столбца Excel, содержащее "." конвертировано в '#'

Я импортирую файл Excel и пытаюсь получить его в DataSet. Проблема в том, что если имя столбца содержит . например, если имя столбца 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;
}

1 ответ

Решение

У вас есть несколько вариантов здесь.

В ваших исходных данных вы можете положить ' перед любыми значениями, которые вы не хотите конвертировать.

Вы также можете нажать на каждый столбец в таблице 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 и обрабатывать ваш заголовок столбца как строки. В этом случае вы можете заменить имена столбцов данными в первой строке (фактические имена столбцов), а затем удалить первую строку из таблицы данных, используя ds.Tables[0].Rows.RemoveAt(0);

Другие вопросы по тегам