Delphi 6 OleContainer SaveAsDocument создает поврежденный файл в Windows 7 / Word 2010, хорошо в XP / Word 2003 - PullRequest
3 голосов
/ 11 января 2012

Я работаю над устаревшим приложением Delphi 6 (сборка 6.240, пакет обновления 2), которое отлично работает в Windows XP и Office 2000 - 2003.

Теперь наш клиент хочет иметь возможность запускать приложениев Windows 7 с Office 2010.

Кажется, что код все еще успешно создает объединенный документ Word, сохраняет его в поле BLOB в базе данных Oracle и может успешно повторно открыть документ из базы данных в Word2010.

Проблема заключается в том, что приложению необходимо создать PDF-версию документа (с использованием PDF-XChange), поэтому оно использует OleContainer.SaveAsDocument для записи документа во временный файл на диске.При попытке открыть этот документ в Word 2010 (или даже в Word 2003) открывается диалоговое окно «Преобразование файлов» для «выбора кодировки, которая делает ваш документ читабельным».Похоже, что ни один из параметров не делает документ читабельным (и даже если бы они были, проблема все равно будет существовать, поскольку это автоматизированный процесс).

OleConnection устанавливается с использованием CreateObject('Word.document.8', false) Я также пробовалдругие значения вместо 8 - 9, 10, 11 и 14 вызывают ошибку «неверная строка класса», в то время как 12 или просто «Word.document» работают, но имеют тот же эффект, что и 8, то есть сохраненный документ не может быть открыт в Word.

Итак, вопрос в том, как мне сохранить документ Word из OleContainer в Delphi 6, в Windows 7 с Word 2010, в формате, который может быть повторно открыт Word?

1 Ответ

0 голосов
/ 03 февраля 2012

Из того, что я могу сказать, OleContainer не может сохранять файлы .docx. Всегда портит их. Я обошел проблему, используя переменную OleObject контейнера, чтобы получить прямой доступ к процедурам Word. Ниже приведен пример:

OleContainer.OleObject.SaveAs(DocumentName);

OleContainer.OleObject.Saved := True;

Я вижу, что вы упомянули, что используете .doc, но, надеюсь, это все равно вам поможет.

...