Topic: Ошибка при выполнении приложения-сервера, ProgID: "Excel.Application"

Данная ошибка возникает при попытке импорта или экспорта таблицы в Excel.
Переустановка Office ничего не дала.
Трехнедельные танцы с бубнами по найденным в инете идеям в виде внесения изменений в реестр, изменения прав доступа к объектам и тому подобное, успехов не принесли.
Более того, оказывается сама microsoft открещивается от своего офиса в вопросах автоматизации: https://support.microsoft.com/ru-ru/hel … -of-office
Т.е. она говорит, что при использовании механизма OLE обращение к Office может сработать, а может и нет.
Прямо как у меня - на некоторых ПК все работает нормально, а на одном - возникает ошибка.
Кстати, к Ворду тоже обращение не проходит.
Для эксперимента повторил модуль экспорта на Delphi (создание файла Excel).
Запустил два раза - создание файлов прошло нормально, а третий раз - ошибка приложения-сервера.
И теперь всегда только ошибка возникает.
Вообще - фантастика! Как будто где-то пробка smile
...
Как рекомендует Microsoft, надо работать с Excel без OLE.
На эту тему нашел готовый модуль для Delphi: http://www.delphisources.ru/pages/faq/b … t_ole.html
Поскольку сам я не силен в Delphi, просьба  проверить работу этого кода и если работает включить его в MVD.

Re: Ошибка при выполнении приложения-сервера, ProgID: "Excel.Application"

Ну да, может неверно названо.
У меня проблема в том, что независимо от того, установлен Excel на ПК или нет, детектирование наличия Excel средствами MVD или Delphi  всегда дает положительный результат.
Т.е. Result := (CLSIDFromProgID('Excel.Application', CLSID) = S_OK);  всегда возвращает ОК.
А вот дальше механизм OLE не срабатывает.
Спотыкается на CreateOleObject('Excel.Application');
Причем, это самое OLE не работает и для Ворда.
...
Но, проблема оказалась еще шире.
У меня есть кнопка, которая открывает файл, указанный в соотв. поле файла.
Т.е. есть такая команда: OpenFile(Form1.DBFile_1.Text);
Эта команда открывает файл документа программой, который ассоциирован с данным расширением файла.
Так вот оказывается, если у меня установлена ассоциация расширения .doc с, например, LibreOffice, то файл открывается нормально.
Но, если .doc ассоциирован с Вордом, то открытия файла не происходит.
Но и никакой ошибки не появляется.
При этом, сам Ворд и Excel работают нормально и  как положено открывают файлы из проводника.
Вообще ничего не понимаю.
Может у кого есть идеи?

Re: Ошибка при выполнении приложения-сервера, ProgID: "Excel.Application"

Да, наверно, проблему можно решить чисткой реестра от офиса.
Но, я о другом - существующие в MVD (Delphi) средства работы с офисом через OLE не рекомендуются самим Microsoft.
И как доказательство обоснованности их опасений - проблемы на моем ПК.
Я сам разрабатываю программу для работы нескольких пользователей и имею возможность попытаться пофиксить на своем ПК проблемы реестра windows.
Но, если такие же проблемы будут у тех, кто будет пользоваться моей программой, то это станет неразрешимой проблемой.
Хотелось бы иметь в MVD такое решение экспорта-импорта в Excel, которое было бы независимо от OLE, если его Microsoft не рекомендует.
Сейчас же я не могу добиться того, чтобы MVD(Delphi) проверяло бы реальную работоспособность OLE механизма на конкретном ПК и если есть какие-то проблемы с этим, то хотя бы сообщало об этом, а не зависала бы на длительный срок с последующим выпаданием в исключение.

Re: Ошибка при выполнении приложения-сервера, ProgID: "Excel.Application"

Try не спасает.
На коде CreateOleObject Delphi зависает на две минуты (засекал), а потом выдает свое исключение.
Поймать его своей обработкой ошибки заключив этот код в Try не получается.
Да и ждать появления обработки в течение двух минут не лучший вариант.

Re: Ошибка при выполнении приложения-сервера, ProgID: "Excel.Application"

Почему просто не использовать отчеты для експорта данных в Excel или OpenOffice?

Dmitry.

Re: Ошибка при выполнении приложения-сервера, ProgID: "Excel.Application"

Отчеты не получается использовать для экспорта напрямую в Excel по той же причине - они общаются с Excel через OLE.
Попытка экспорта из отчета в Excel дает ту же ошибку.
...
Однако, если делать экспорт отчета в Open Document Spreadsheet (т.е. в файл .ods) и, при этом, ассоциировать расширение ods с Excel, то после диалога сохранения файла успешно открывается Excel и в нем корректно отражены все данные.
Т.е. проблема экспорта в Excel действительно может быть решена с помощью отчетов.
...
Подскажите, пожалуйста, как передать данные с формы из таблицы в отчет без его отображения (чтобы был выбран экспорт в Open Document Spreadsheet) и  сразу открылся диалог сохранения ods файла, а потом открылся Excel?
...
И есть ли еще какой-то альтернативный способ импорта данных из xls и xlsx файлов, который бы не использовал Excel?

Re: Ошибка при выполнении приложения-сервера, ProgID: "Excel.Application"

mikhail_a wrote:

Подскажите, пожалуйста, как передать данные с формы из таблицы в отчет без его отображения (чтобы был выбран экспорт в Open Document Spreadsheet) и  сразу открылся диалог сохранения ods файла, а потом открылся Excel?


В настройках кнопки выберитк OpenOffice (ods)

procedure Form1_bReport_OnAfterClick (Sender: string);
begin
    OpenFile(Form1.frxODSExport1.FileName); // в данном свойстве будет имя ods файла
end;

begin
    Form1.frxODSExport1.OpenAfterExport := False;
end.
Dmitry.

8 (edited by mikhail_a 2019-07-26 15:33:51)

Re: Ошибка при выполнении приложения-сервера, ProgID: "Excel.Application"

Удалось решить проблему с экспортом в Excel.
Оказывается причиной проблем был китайский WPS Office.
Это самый сильный конкурент Microsoft Office.
Видимо при инсталляции он себя где-то прописывает и в результате подменяет собой Excel.
На втором ПК у нас стоит WPS2019 и при экспорте в Excel открывается именно WPS2019.
Т.е. у WPS2019 полностью совпадает с Excel способ общения по OLE.
А у меня стоял WPS2016, который я установил после деинсталляции WPS2019 (он мне не очень понравился и я откатился на версию 2016).
Стоило мне деинсталлировать WPS2016, как сразу стал нормально работать экспорт в Excel.
Безобразие китайское...
Но, осталось наследие в отношении Ворда - не открываются файлы doc командой OpenFile, если ассоциация таких файлов связана с Word.
Никаких ошибок не выпадает. Просто ничего не происходит когда кликаешь по кнопке, которая должна открыть файл doc.
Если же ассоциировать файлы doc с LibreOffice - то они нормально открываются Либроофисом.
Есть ли у кого-нибудь идеи как заставить OpenFile открывать файлы именно Вордом?

Re: Ошибка при выполнении приложения-сервера, ProgID: "Excel.Application"

Оба предложенных варианта открытия файлов с помощью ворда работают.
Однако, файл договора может быть не только в ворде, но и в pdf или, вообще, в картинке.
Т.е. надо определять расширение файла перед открытием и либо открывать файл универсальной командой OpenFile (Filename) либо (если doc или docx) открывать командой OpenFile(Filename, 'winword').
Существует ли функция для определения расширения файла?
Или надо разбирать текстовое название файла, чтобы понять его расширение?

Re: Ошибка при выполнении приложения-сервера, ProgID: "Excel.Application"

ExtractFileExt()
Dmitry.