Проблема форматирования ячейки Excel

Я использую OleDB DataReader для получения данных из моих файлов Excel (но эта проблема происходит в DataTable. Заливка также). Вещь состоит в том, что у меня есть столбец, который должен возвращаемые строки. Все в порядке и работает, но недавно, проблема подошла, потому что ячейки столбца имели различные форматы. Некоторые были в числах и других в тексте. Когда я проверил использование dataReader. GetSchema () это показало, что рассматриваемый столбец был выведен как система типов. Строка. Проблема с этим состояла в том, что все нетекстовые ячейки были сразу установлены в NULL.

Есть ли способ предложить читателю, чтобы тот столбец просто проанализировал столбцы как Систему. Объект вместо того, чтобы вывести его как Систему. Строка и выводящий все нестроковые ячейки?

Строка подключения, которую я использую:

представьте connString в виде строки = "Provider=Microsoft. Струя. OLEDB.4.0"; + "Источник данных =" + filePath +""; + "Расширенный Properties=Excel 8.0";;

и код:

using ( OleDbConnection connection = new OleDbConnection( connString ) )
{
    connection.Open();
    foreach ( string worksheetName in worksheetNames )
    {
        using ( OleDbCommand command = 
            new OleDbCommand( "SELECT * FROM [" + worksheetName + "]", connection ) )
        {
            TEntity entity;
            using ( OleDbDataReader dataReader = command.ExecuteReader() )
            {
                while ( dataReader.Read() )
                {
                    entity = GetDataFromDataTable( dataReader );

                    if ( entity != null )
                    {
                        entityList.Add( entity );
                    }
                }
            }
        }
    }
    connection.Close();
}
6
задан AMissico 25 June 2010 в 00:47
поделиться

2 ответа

Вам нужно добавить IMEX или MAXSCANROWS в строку подключения.

MAXSCANROWS - количество строк, которые необходимо просканировать для определения типа данных каждого столбца. Тип данных определяется с учетом максимального количества найденных видов данных. Если встречаются данные, которые не соответствуют типу данных, угаданному для столбца, тип данных будет возвращен как значение NULL.

Для драйвера Microsoft Excel можно ввести число от 1 до 16 для сканируемых строк. По умолчанию значение равно 8; если оно установлено в 0, то сканируются все строки. (Число за пределами лимита приведет к ошибке.)

Кроме того, проверьте [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel] расположенный реестр REG_DWORD "TypeGuessRows". Это ключ к тому, чтобы не позволить Excel использовать только первые 8 строк для угадывания типа данных столбцов. Установите это значение на 0, чтобы сканировать все строки. Это может снизить производительность.

7
ответ дан 10 December 2019 в 02:42
поделиться

Две вещи, которые приходят на ум:

  1. Что такое «TEntity». Ограничен ли он строками или другим типом?

  2. Какой тип списка является entityList. Является ли это универсальным, или это список (TEntity), или какой-то другой тип?

2
ответ дан 10 December 2019 в 02:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: