Vous devez inclure le fichier en tant que ressource. Disons que vous avez un blah.xls
Créer un fichier blah.rc
avec le contenu suivant
blah RCDATA blah.xls
compiler avec le compilateur de ressources en blah.res
incorporer le fichier RES dans le fichier exécutable
{$R 'blah.res'}
dans votre code d'application, extrayez le fichier et exécutez-le avec ce code
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;
vous devrez ajouter ShellAPI dans votre clause uses
peut-être vous aurez besoin de cette fonction GetTempDir
function GetTempDir: string;
var
Buffer: array[0..MAX_PATH] of char;
begin
GetTempPath(SizeOf(Buffer) - 1, Buffer);
result := StrPas(Buffer);
end;
appeler la fonction comme celui-ci
extractAndRun('blah','blah.xls');
Je suis pas sûr de ce que vous demandez. Pouvez-vous clarifier votre question? Le faites-vous fonctionner maintenant en extrayant la ressource du fichier .exe et en utilisant CreateOleObject et Open appels pour l'ouvrir dans Excel? Si oui, pourquoi voulez-vous faire un changement? – RobertFrank
J'ajoute des données du programme, supposément, avant que l'utilisateur n'interagisse avec la feuille, mais je ne savais pas vraiment comment passer la ressource à d'autres objets. Merci! –