Delphi XE6. У меня есть приложение для текстовых фрагментов, которые хранятся в локальной базе данных (DB DB). Некоторые фрагменты могут быть прямым текстом, другие могут включать форматирование. Если фрагменты включают форматирование, фрагменты представляют собой формат MS Word.Delphi - Использование OLE вызывает ошибку в Word
Пользователь может просматривать фрагменты двумя способами, в мое приложение, или позвонив по телефону MS-Word, и имеющий фрагмент кода загружается там автоматически, - ЭТО ЖЕ SNIPPET ..
Проблема: Если фрагмент кода загружается в TOLEContainer в моем приложении, он отлично отображается без проблем ... Если фрагмент будет выведен в MSWord, я получаю сообщение об ошибке ...
«Извините, мы не можем открыть, потому что мы обнаружили проблему с ее содержанием ». Я нажимаю «ОК», а затем «Word нашел нечитаемый контент». Вы хотите восстановить содержимое этого документа? ... «Я клик в порядке, и все выглядит нормально.
Мой общий поток обработки для «икру от MS WORD» является ...
// FN is a temp file name
FileStream := TFileStream.Create(FN, fmCreate);
BlobStream := dm_text.tEntries.CreateBlobStream(dm_text.tEntries.FieldByName('ANSWER_FMT'), bmRead);
FileStream.CopyFrom(BlobStream, BlobStream.Size);
BlobStream.Free;
FileStream.Free;
// Now open default association, which will be Word
ShellExecute(Handle, 'open', PWideChar(FN), nil, nil, SW_SHOWNORMAL);
Этот поток практически идентичен для просмотра места В ... кроме нескольких команд для TOleContainer.
OleWord.Enabled := True;
FileStream := TFileStream.Create(FN, fmCreate);
BlobStream := tEntries.CreateBlobStream(tEntries.FieldByName('ANSWER_FMT'), bmRead);
FileStream.CopyFrom(BlobStream, BlobStream.Size);
BlobStream.Free;
FileStream.Free;
OleWord.LoadFromFile(FN);
OleWord.DoVerb(ovInPlaceActivate);
Любые идеи, почему это происходит? Это происходит в MULTIPLE версиях MSWord.
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ: Обе программы просматривают одни и те же данные, вытаскиваемые из одной и той же строки/столбца в моей БД. Я создаю файл TEMP, а затем загружаю либо через TOleContainer, который загружает его, либо через ShellExecute, что дает ошибку. Однако, если я вручную загружаю файл TEMP для контейнера OLE в MSWord, я получаю ту же ошибку.
So - возможности ... 1). Мои данные повреждены, т. Е. Как я спасую это неправильно ... но Word может исправить это. 2). У меня есть настройка так или иначе, что OLEContainer не показывает ошибку, но Word делает.
Я добавил дополнительную информацию в вопрос ... но да, загрузка этого через Ole Automation может «скрыть» ошибку. по какой-то причине – user1009073
Как разместить двоичный файл (т.е. файл * .docx) – user1009073
Какой метод вы используете для сохранения файла. OleContainer.SaveToFile или OleContainer.SaveToDocument или что-то еще? –