Почему OleDB игнорирует ячейки Excel? - PullRequest
2 голосов
/ 15 сентября 2011

Вот настройки:

У меня есть таблица Excel с очень простой страницей. Это выглядит так: Image redacted, of course

Я использую следующую строку подключения для доступа к этому файлу:

string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR=NO\";", fn)

Моя функция для доступа к файлу выглядит так:

try
{
    string select = string.Format("SELECT * FROM [{0}$]", tab.PageName);
    OleDbDataAdapter adapter = new OleDbDataAdapter(select, con);
    DataSet ds = new DataSet();

    adapter.Fill(ds, tab.PageName);


    // DEBUG: Let's just see what it is getting...
    for (int x = 0; x < 13; x++)
    {
        for (int y = 0; y < 3; y++)
        {
            Console.Write(ds.Tables[0].Rows[x][y].ToString() + "\t");
        }
        Console.WriteLine("");
    }
} 
catch
{ ... }

ВОПРОС

Почему код НЕ читает некоторые ячейки? Обратите внимание, что на C5 есть текст «Прибыль». Я могу читать B5 просто отлично, как «Доход». Я могу читать C6 просто отлично, как целочисленное значение. Но прибыль, кажется, исчезает.

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

Я действительно в замешательстве !!!

Есть мысли?

Ответы [ 2 ]

2 голосов
/ 15 сентября 2011
 new OleDbConnection("...TypeGuessRows=0;ImportMixedTypes=Text");

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

Попробуйте добавить эти параметры в строку подключения.

0 голосов
/ 13 июня 2014

У меня были проблемы с получением другого ответа + комментария к работе.Единственным необходимым параметром был IMEX=1, но он должен быть вложен в одинарные кавычки в расширенных свойствах, поэтому вот пример того, как именно отформатировать дополнительный параметр IMEX:

connection.ConnectionString = 
  @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\somepath\somefile.xls;Extended Properties='Excel 8.0;IMEX=1';";
...