2010-08-23 122 views
1

的onquit事件中,我打開一個文檔流與無法加載到Word應用程序

WordApplication1.Connect; 
WordApplication1.Documents.OpenOld(FileNameOLE,EmptyParam,EmptyParam,EmptyParam, 
    EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam); 
WordApplication1.Visible:=true; 

,我想將其保存到一個流關閉後,但我得到以下錯誤。

"Cannot open file used by another process." 

怎麼辦?感謝幫助。

樣品

procedure TPatient.WordApplication1Quit(Sender: TObject); 
    var mem:TMemoryStream; 
begin 
    WordApplication1.Disconnect; 
    WordApplication1.Quit; 
    //I get filename to global widestring variable File_OLE 
    mem:=Tmemorystream.Create; 
    mem.LoadFromFile(File_OLE); -------->>>>error here 
    mem.Position:=0; 

回答

0

好像Word仍在阻止訪問文件。因此,您可能必須等待幾毫秒到幾秒,直到文件被釋放。您可以通過Sleep和/或重試保存幾次來實現此目的。

+0

使用睡眠時,退出事件不會結束,並且在您的應用程序再次喚醒時仍然有更大的機會打開文件。對於簡單的解決方案,請使用計時器。 – jachguate 2010-09-07 18:25:55

0

在示例過程中,當您要將文檔加載到TMemoryStream中時,Word仍在運行。 Word正在處理它的退出事件(去圖:P)並且還沒有關閉。

你可以做的是在退出事件上啓動一個計時器(間隔時間爲500/1000的TTimer)並在計時器事件中打開文檔。也不要調用WordApplication1.Quit,因爲您已經退出,只需斷開您的WordApplication1。

更好的解決方案是不依賴於退出事件。因爲當您在第一個代碼部分中啓動Word時,並且您從Windows資源管理器打開另一個Word文檔時,退出事件不會在您關閉應用程序打開的文檔時出現。 Word也將保持活動狀態,因爲它也託管其他文檔。

將TWordDocument添加到窗體中,並在打開文檔時,將TWordDocument連接到打開的文檔。在TWordDocument.Close事件中,您可以啓動計時器,當計時器觸發時,您可以加載文檔。更好的方法是不使用定時器,而只是將OnClose事件上的文檔保存到另一個文件(.SaveAs)並將該文件加載到內存流中。這樣你可以確定該文件不是由Word打開的。

相關問題