Чтение Excel-данных в виде строки из Excel с использованием ODBC - PullRequest
0 голосов
/ 17 октября 2018

Я пытаюсь прочитать данные Excel в C #, используя ODBC, вот мой код

 string    lstrFileName = "Sheet1";
            //string strConnString = "Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq="+path+ ";Extensions=asc,csv,tab,txt;Persist Security Info=False";
            string strConnString = "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};Dbq=E:\\T1.xlsx;Extensions=xls/xlsx;Persist Security Info=False";
            DataTable ds;
            using (OdbcConnection oConn = new OdbcConnection(strConnString))
            {
                using (OdbcCommand oCmd = new OdbcCommand())
                {
                    oCmd.Connection = oConn;

                    oCmd.CommandType = System.Data.CommandType.Text;
                    oCmd.CommandText = "select A   from [" + lstrFileName + "$]";

                    OdbcDataAdapter oAdap = new OdbcDataAdapter();
                    oAdap.SelectCommand = oCmd;

                    ds = new DataTable();
                    oAdap.Fill(ds);
                    oAdap.Dispose();



                    // ds.Dispose();
                }

            }

мой пример данных A 1 2 3 AA BB его таблица данных его чтение 1,2, 3 и две пустые строки, я могу понять, потому что первая строка является решающим типом данных, но как я могу преобразовать как String и прочитать всю строку.Любое предложение .Я уже попробовал CStr, но без помощи.

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Это частично предположение, но при чтении документа Excel в качестве базы данных адаптер должен принимать решение о типах данных и обычно выполняет довольно хорошую работу.Однако, поскольку Excel допускает смешанные типы данных (а базы данных - нет), он иногда ошибается.

Я бы рекомендовал не использовать адаптер данных, а просто читать каждое поле как тип объекта.Оттуда вы можете легко привести их к строкам (StringBuilder, ToString () и т. Д.) Или даже TryParse в поля, которые, как вы подозреваете, должны быть, игнорируя тип данных ODBC.для этого:

using (OdbcCommand oCmd = new OdbcCommand())
{
    oCmd.Connection = oConn;

    oCmd.CommandType = System.Data.CommandType.Text;
    oCmd.CommandText = "select A   from [" + lstrFileName + "$]";

    using (OdbcDataReader reader = oCmd.ExecuteReader())
    {
        object[] fields = new object[reader.FieldCount];

        while (reader.Read())
        {
            reader.GetValues(fields);

            // do something with fields
        }
    }

}
0 голосов
/ 18 октября 2018

Для предыдущего обсуждения подобной проблемы здесь, пожалуйста, проверьте следующее:

DBNull в непустой ячейке при чтении файла Excel через OleDB

В качестве обходного пути,Вы также можете отформатировать столбец как «текст» (т. е. в Excel, выберите столбец, щелкните правой кнопкой мыши «Формат ячеек ...»), хотя это может быть нецелесообразно, если вы будете обрабатывать большое количество файлов или не должны трогать файл..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...