Загрузите лист Excel в DataTable, но импортируются только первые 256 символов на ячейку, - PullRequest
0 голосов
/ 21 марта 2012

У меня есть лист Excel, который я хочу загрузить в Datatable с помощью OleDb.Лист содержит многострочный текстовый столбец, содержащий до 1000 символов.

Однако, используя приведенный ниже код, в моем DataTable на одну ячейку после импорта добавляется только 256 символов для каждой ячейки после импорта.от провайдера или можно сказать, чтобы он прочитал весь столбец?

var connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\file.xlsx;Extended Properties=""Excel 12.0 Xml;HDR=YES;IMEX=1"";";
var sheetName = "Sheet1";

using (var con = new OleDbConnection(connectionString))
{
    con.Open();

    var table = new DataTable(sheetName);
    var query = "SELECT * FROM [" + sheetName + "]";
    OleDbDataAdapter adapter = new OleDbDataAdapter(query, con);
    adapter.Fill(table);
    return table;
}

Ответы [ 2 ]

3 голосов
/ 21 марта 2012

Я нашел решение.

Проблема в том, что OleDb угадывает, какой тип db выбрать. И если первые несколько строк содержат данные короче 256 символов, это применяется ко всем строкам.

Как бы то ни было, я просто переместил одну строку с большими данными в начало листа, и теперь все данные импортируются.

Вот ссылка, описывающая проблему. Существует также обходной путь с ключом реестра, но я этого не пробовал.

http://www.xtremevbtalk.com/showthread.php?t=206454

1 голос
/ 20 февраля 2015

Это исправление реестра работало для меня.

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Jet\4.0\Engines\Excel]
"TypeGuessRows"=dword:00000000

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel]
"TypeGuessRows"=dword:00000000
...