2013-07-04 2 views
1

Я пытаюсь запрограммировать содержимое таблицы Excel (формат .xlsm) с помощью Microsoft.Jet.OLEDB.4.0 ** на C#.Сбой связи с OLEDB - за исключением случаев, когда Excel открыт ...?

Моя строка соединения:

Provider = Microsoft.Jet.OLEDB.4.0; Extended Properties = "Excel 8.0; HDR = YES; IMEX = 1;" "; Data Source =" C: \ Test.xlsm»

Когда я исполню мой код, он выдает исключение с указанием:

OldDbException был необработанным кодом пользователя

Внешняя таблица не в ожидаемом формате.

Однако - если я открою файл Test.xlsm в Excel и заново запустил свой код, он работает без каких-либо исключений и выполняет так, как предполагалось. Нет проблем, отлично работает.

  • Почему/Как открытие определенного файла в Excel изменяет способ доступа к нему моего кода?
  • Каков правильный способ открыть файл .xlsm с помощью поставщика OLEDB Microsoft Jet?

Дополнительная информация: Запуск Windows 7 x64/Excel 2010

+1

Это может вернуться к той же проблеме я с помощью * .xlsm Fies в качестве источников для Mailmerge .... Попробуйте сохранить ваши данные как * .xlsb и использовать это как источник .... может быть проблемой безопасности с * .xlsm файлами – MikeD

ответ

0

"Excel 8.0;" часть строки подключения относится к Excel 2003 и более ранних версий файлов (то есть расширение .xls)

Вы можете попробовать с 2007 года строку подключения Excel и использовать версию специально для .xlsm файлов:

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\test.xlsm;Extended Properties=""Excel 12.0 Macro;HDR=YES"";

(The "" является neeeded, чтобы избежать " характера)

строки соединения Excel, как правило, написаны в провайдера порядке; Источник данных; Расширенные свойства. Строка подключения, которую вы использовали, находится в другом порядке и также имеет некорректную обработку символов ". Ваша исходная строка соединения, вероятно, следует записать в виде:

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Test.xlsm;Extended Properties=""Excel 8.0;HDR=YES;IMEX=1"";

и даже тогда он не может работать с файлами .xlsm