【问题标题】:Embed Excel file in Delphi 5在 Delphi 5 中嵌入 Excel 文件
【发布时间】:2010-11-22 12:56:45
【问题描述】:

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

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

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

谢谢!

【问题讨论】:

  • 我不确定你在问什么。你能澄清你的问题吗?您现在是否通过从 .exe 中提取资源然后使用 CreateOleObject 和 Open 调用在 Excel 中打开它来工作?如果是这样,你为什么要做出改变。
  • 我从程序中添加数据,据说是在用户与工作表交互之前,但我真的不知道如何将资源传递给其他对象。谢谢!

标签: delphi excel embed


【解决方案1】:

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

【讨论】:

  • 非常感谢!我也在考虑先保存它,但我想不出办法来做到这一点,即使我已经看到了使用 Streams 的示例。无论如何,谢谢!
【解决方案2】:

我很确定它不会起作用。您必须将文件保存在临时文件夹中,对其进行更改,然后做任何您想做的事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-29
    • 1970-01-01
    • 2011-02-28
    相关资源
    最近更新 更多