Вставить файл Excel в Delphi 5 - PullRequest
0 голосов
/ 22 ноября 2010

Я пытаюсь встроить файл Excel в мое приложение Delphi 5, чтобы избежать случайного удаления пользователем файла.

Используя встроенный файл, я создаю его на диске с помощью диалогового окна «Сохранить»,а затем откройте его методом Excel := CreateOleObject('Excel.Application');.Я видел примеры того, как загрузить ресурс, используя THandles, но мне кажется, что он не работает с Excel.WorkBooks.Open(EmbeddedExcelFile);.

Вам приходилось делать что-то подобное раньше?Как бы вы это сделали?

Спасибо!

Ответы [ 2 ]

5 голосов
/ 22 ноября 2010

Вы должны включить файл в качестве ресурса.Допустим, у вас есть blah.xls

Создайте файл blah.rc со следующим содержимым

blah RCDATA blah.xls

скомпилируйте его с помощью компилятора ресурсов в blah.res

и вставьтеФайл RES в исполняемом файле

{$R 'blah.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');
1 голос
/ 22 ноября 2010

Я почти уверен, что это не сработает. Вы должны сохранить файл во временной папке, изменить его, а затем делать все, что вы хотите.

...