Excel через OleDb показывает числа по-разному… в зависимости от того, открыта ли электронная таблица?

2

Я открываю рабочий лист 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;
}

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

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, конечно.

Теги:
excel
ado.net
oledb

1 ответ

0

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

  • 0
    Вы видели строку подключения, которую я включил?
  • 0
    О, я имел в виду без IMEX. У меня было время дьявола делать что-то с oledb, чтобы преуспеть, пока я не убрал флаг IMEX =. Опечатка.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню