Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在delphi5中嵌入Excel文件_Delphi_Excel_Embed - Fatal编程技术网

在delphi5中嵌入Excel文件

在delphi5中嵌入Excel文件,delphi,excel,embed,Delphi,Excel,Embed,我正在尝试将一个Excel文件嵌入到我的Delphi5应用程序中,这样我就可以避免我的用户只是意外删除该文件 使用嵌入的文件,我用一个保存对话框在磁盘上创建它,然后用Excel:=CreateOleObject('Excel.Application')打开它方法。我已经看到了关于如何使用THandles加载资源的示例,但我似乎没有让它与Excel.WorkBooks.Open(EmbeddedExcelFile)一起工作 你以前做过这样的事吗?你会怎么做 谢谢 我很肯定它不会起作用。你必须将文件

我正在尝试将一个Excel文件嵌入到我的Delphi5应用程序中,这样我就可以避免我的用户只是意外删除该文件

使用嵌入的文件,我用一个保存对话框在磁盘上创建它,然后用
Excel:=CreateOleObject('Excel.Application')打开它方法。我已经看到了关于如何使用THandles加载资源的示例,但我似乎没有让它与
Excel.WorkBooks.Open(EmbeddedExcelFile)一起工作

你以前做过这样的事吗?你会怎么做


谢谢

我很肯定它不会起作用。你必须将文件保存在临时文件夹中,修改它,然后做任何你想做的事情。

我确信它不会工作。您必须将文件保存在临时文件夹中,对其进行更改,然后执行任何您想执行的操作。

您必须将该文件作为资源包含在内。假设你有一个
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;
您必须在uses子句中添加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');

您必须将该文件作为资源包含在内。假设你有一个
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;
您必须在uses子句中添加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');

我不知道你在问什么。你能澄清你的问题吗?通过从.exe中提取资源,然后使用CreateOleObject和Open调用在Excel中打开它,现在是否可以正常工作?如果是这样,为什么要进行更改。我从程序中添加数据,假设是在用户与工作表交互之前,但我真的不知道如何将资源传递给其他对象。谢谢我不知道你在问什么。你能澄清你的问题吗?通过从.exe中提取资源,然后使用CreateOleObject和Open调用在Excel中打开它,现在是否可以正常工作?如果是这样,为什么要进行更改。我从程序中添加数据,假设是在用户与工作表交互之前,但我真的不知道如何将资源传递给其他对象。谢谢非常感谢你!我也在考虑先保存它,但我想不出一种方法来实现它,尽管我已经看到了使用流的例子。无论如何,谢谢!非常感谢你!我也在考虑先保存它,但我想不出一种方法来实现它,尽管我已经看到了使用流的例子。无论如何,谢谢!