Excel через OleDb показывает числа по-разному ... в зависимости от того, открыта ли электронная таблица? - PullRequest
2 голосов
/ 12 января 2010

Я открываю лист Excel в DataTable, используя OleDb, например:

string select = string.Format("SELECT * FROM [{0}$]", worksheetName);
using (var con = new OleDbConnection(connectionString))
using (var adapter = new OleDbDataAdapter(select, con))
{
    con.Open();
    var dt = new DataTable();
    adapter.Fill(dt);
    con.Close();
    return dt;
}

Затем я перебираю строки таблицы данных, считывая различные биты данных, например:

decimal charge;
bool isChargeReadable = 
    decimal.TryParse(row["Charge"].ToString(), out charge);

Я только что обнаружил, что мой код задыхается от ячеек с долларовыми суммами, такими как "$ 1100,00", которые не могут быть проанализированы до десятичного числа. Не удивительно ... за исключением того, что этот код отлично работал раньше, только сейчас.

Дальнейшее расследование показало, что если я запускаю этот код , пока рабочая книга открыта , он видит одну из этих ячеек как "1100". Если я запускаю его, когда рабочая книга закрыта, он видит «$ 1100,00».

Почему это происходит? Очевидно, мне придется переделать свой код, чтобы он функционировал, пока рабочая книга закрыта, но с какой стати это будет иметь значение? Я бы подумал, что это будет просто чтение сохраненной книги.

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

"Provider=Microsoft.Jet.OLEDB.4.0;
    Data Source={0};
    Extended Properties=""Excel 8.0;HDR=NO;IMEX=1"";"

... где {0} заменяется именем файла Excel, конечно.

1 Ответ

0 голосов
/ 01 декабря 2010

Я обнаружил, что мои операции с oledb работают лучше в Excel без набора IMEX = число. Возможно, ваша проблема там?

...