2010-11-22 70 views
0

我想嵌入一個Excel文件到我的Delphi 5應用程序,所以我可以避免我的用戶只是意外刪除文件。在Delphi 5中嵌入Excel文件

使用嵌入文件,我使用保存對話框在磁盤上創建它,然後用Excel := CreateOleObject('Excel.Application');方法打開它。我見過如何使用THandles加載資源的例子,但我似乎沒有得到它與Excel.WorkBooks.Open(EmbeddedExcelFile);的工作。

你有沒有做過這樣的事情?你會怎麼做?

謝謝!

+1

我不確定你在問什麼。你能澄清你的問題嗎?現在通過從.exe中提取資源,然後使用CreateOleObject和Open調用在Excel中打開它,它現在能夠工作嗎?如果是這樣,你爲什麼想要改變。 – RobertFrank 2010-11-22 13:41:11

+0

我從程序中添加數據,據說在用戶與表單交互之前,我並不知道如何將資源傳遞給其他對象。謝謝! – 2010-11-22 15:02:36

回答

5

您必須將該文件包含爲資源。假設你有一個blah.xls

與以下內容創建blah.rc文件

blah RCDATA blah.xls 

與資源編譯器編譯成blah.res

嵌入可執行

{$R 'blah.res'} 

內的RES文件在您的應用程序代碼中,提取文件並使用此代碼運行它

procedure ExtractAndRun(resourceID:string; resourceFn:string); 
var 
    resourceStream: TResourceStream; 
    fileStream: TFileStream; 
    tempPath: string; 
    fullFileName: string; 

begin 
    tempPath:=GetTempDir; 
    FullFilename:=TempPath+'\'+resourceFN; 
    if not FileExists(FullFilename) then 
    begin 
    resourceStream := TResourceStream.Create(hInstance, resourceID, RT_RCDATA); 
    try 
     fileStream := TFileStream.Create(FullFilename, fmCreate); 
     try 
     fileStream.CopyFrom(resourceStream, 0); 
     finally 
     fileStream.Free; 
     end; 
    finally 
     resourceStream.Free; 
    end; 
    end; 
    ShellExecute(0,'open', pchar(FullFilename), nil, nil, SW_SHOWNORMAL); 
end; 

你就必須添加在ShellAPI的用途的條款

也許你會需要這個GetTempDir功能

function GetTempDir: string; 
var 
    Buffer: array[0..MAX_PATH] of char; 
begin 
    GetTempPath(SizeOf(Buffer) - 1, Buffer); 
    result := StrPas(Buffer); 
end; 

調用函數,這樣

extractAndRun('blah','blah.xls'); 
+0

非常感謝!我也在考慮先保存它,但我想不出一種辦法,儘管我已經看到了使用Streams的例子。無論如何,謝謝! – 2010-11-22 15:01:13

1

我很確定它不會工作。你必須將文件保存在一個臨時文件夾中,修改它,然後做任何你想要的。