Проблема с чтением файла Excel с C#, проблема ACE - PullRequest
0 голосов
/ 09 июля 2020

Я прочитал много информации об этой проблеме.
И есть много вопросов в SO по этому поводу, но проблема все еще остается, и она заключается в следующем:

Я понимаю, что это connection string предназначен для более старых версий Office:

string oldCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" 
              + path + ";" + "Extended Properties='Excel 8.0;HDR=NO;IMEX=1;'";

, и я знаю, что существует connection string для более новых версий Office:

string nweCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" 
              + path + ";Extended Properties=Excel 12.0;";

Однако, когда я использую connection string для новых версий с ACE , у меня появляется следующая ошибка:

The 'Microsoft.ACE. Поставщик OLEDB.12.0 'не зарегистрирован на локальном компьютере.

В других вопросах я также читал, что сначала нужно установить ACE , и все будет работать нормально.

  • У меня не установлен драйвер ACE , ни на других компьютерах, которые должны использовать это приложение, есть ли способ читать файлы Excel с помощью JET для Office 2016 или 365 ( все, что выше 2003 ).

  • Я не могу установить ACE в каждом из моих клиентов, чтобы иметь возможность работать с моим приложением, это вообще непрактично.

Есть ли способ сделать это?

1 Ответ

1 голос
/ 09 июля 2020

Мне приходилось решать ту же самую проблему много лет go. Я добавил в свою конфигурацию обе строки подключения. Когда приложение используется впервые, я проверяю с одним драйвером ACE (так как он новее). Если это не поможет, я вернусь к Jet. Сохраните рабочую строку подключения в AppConfig (вы также можете сохранить значения в config). Поэтому в следующий раз, когда вы запустите приложение, оно сначала проверит конфигурацию приложения и будет использовать эту строку подключения на этом компьютере.

Вот шаги, которые я выполнил:

  1. Когда приложение запущен / используется в первый раз на машине, попробуйте получить рабочую строку подключения из AppConfig.
  2. Поскольку она не будет доступна, вы сверите список возможных строк подключения.
  3. Start с драйвером ACE. Успешно, сохраните его в AppConfig.
  4. Если ACE не удалось, проверьте с помощью следующего драйвера (Jet). В случае успеха сохраните эту строку как рабочую строку подключения.
  5. В следующий раз, когда вы запустите приложение, проверьте рабочую строку подключения и продолжите ее. Таким образом, вы не будете проверять оба драйвера снова и снова.

Примечание. Когда вы обновляете настройки в файле AppConfig, они не обновляются напрямую до исходного файла. Копия файла создается для этого пользователя под C: \ Users .... Когда вы пытаетесь загрузить значения из AppConfig, эти два "объединяются" и используются. Это автоматически обрабатывается в C#.

Исходя из вышеизложенного, если вам когда-либо придется сбросить выбор, вы должны удалить файл конфигурации в папке пользователя выше, и это должно запустить процесс снова с шага 1.

...