2015-04-03 2 views
0

У меня есть приложение, которое отлично работает при сохранении как файл .doc. С тех пор я попытался получить его, поэтому программа сохранит как .doc, так и .pdf, это делается с помощью модуля WordXP.WordXP Delphi Command Failed Сохранение как PDF

procedure TDocCreator.CloseDocument(ASaveAs : string); 
var 
    LFileName : OleVariant; 
begin 
    LFileName := ASaveAs; 
    FDoc.SaveAs(LFileName, EmptyParam,EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, 
    EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam); 
    LFileName := ChangeFileExt(ASaveAs, '.pdf'); 
    FDoc.SaveAs(LFileName,PDFFileFormat,EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, 
    EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam); 
    FWordApp.NormalTemplate.Saved := true; 
    FWordApp.Quit(True); 
    FWordApp.Disconnect; 
end; 

Если я удалю второе спасение, код будет работать нормально. Исключение «EOleException Command Failed» не появляется каждый раз, когда документ сохраняется, но точка, в которой происходит разрыв, - это когда SaveAs для файла .pdf.

Примечание. У меня есть только две процедуры сохранения: SaveAs (используется выше) и SaveAs2000. Также я от машины, которая может компилировать delphi.

Если я пропустил что-либо или мне нужно что-то прояснить, я смогу ответить, однако я не смогу проверить какие-либо изменения кода до вторника.

спасибо.

Редактировать: Хорошо, что программа удалена отлаживаемой (машина, которая делает весь код, не имеет доступа к офису, так как она находится на виртуальной машине). Приложение проходит через набор шаблонов, которые получают почту, после того, как начинается процесс сохранения. Итак, я сделал 2 документа (этот процесс выполняется в цикле for). Это отлично работает. Затем я попытался сделать 5 в третьем файле, в результате чего возникла ошибка «Command Failed». Которая затем не закрывает слово и отменяет оставшийся процесс. При просмотре LFileName его содержимое было «???». Это иногда иностранные символы. Хотя ему все еще удается сделать файл .doc с правильным filenam. Это имя файла создается вне процедуры, если это имеет значение «ASaveAs». Другое дело, что файл не открывается с использованием каких-либо других приложений. Он выполняет весь процесс, используя слово приложение, которое открывается программой.

+0

Как определен PDFFileFormat? Какая версия Word установлена? –

+0

@DavidHeffernan PDFFileFormat - это константный набор 17. Word 2010, для меня, однако, я не могу гарантировать, какая версия слова будет использоваться, я думаю, что это будет 2010 год для тех, кто использует приложение, но я не уверен на 100%. – Edward

+0

Он полагается на надстройку для Office 97. Пожалуйста, узнайте, какая версия работает, когда она терпит неудачу. –

ответ

0
LFileName := ASaveAs; 
    try 
    try 
     FDoc.SaveAs(LFileName,EmptyParam, EmptyParam, EmptyParam, ...); 
    except 
     on E : Exception do 
     ShowMessage(E.ClassName + ' error creating document'); 
    end; 
    try 
     if FileExists(LFileName) then 
     begin 
     Sleep(5000); 
     LFileName := ChangeFileExt(ASaveAs, '.pdf'); 
     FDoc.SaveAs(LFileName,PDFFileFormat,EmptyParam, EmptyParam, ...; 
     end; 
    except 
     on E : Exception do 
     ShowMessage(E.ClassName + ' error creating PDF'); 
    end; 
    finally 
    FWordApp.Quit(True); 
    FWordApp.Disconnect; 
    end; 

Может быть лучше, и я до сих пор не уверен в попытке, и за исключением, но она работает без сбоев благодаря тактическим сну. Может быть, лучше и хотелось бы этого, но на данный момент это похоже на хорошее решение. Спасибо Дэвиду Хеффернану за то, что он указал, что файл, вероятно, используется.

Смежные вопросы