Delphi 从程序资源中读取Word文件(*.dot)

Delphi 从程序资源中读取Word文件(*.dot),delphi,ms-word,ole,Delphi,Ms Word,Ole,有一套Word模板(文件*.dot)和一个小程序,可以根据这些模板创建新文件。它的工作很好,但目标是使所有的exe文件。 我认为解决方案是将模板文件移动到程序资源中。但我不知道,那么我将如何从参考资料中阅读它们。请告诉我怎么做。 也许你可以给我另一个解决方案 现在,我的代码是: procedure TfmMain.CreateDocument0; var TempleateFileName: string; WordApp, Document: OleVariant; proced

有一套Word模板(文件*.dot)和一个小程序,可以根据这些模板创建新文件。它的工作很好,但目标是使所有的exe文件。 我认为解决方案是将模板文件移动到程序资源中。但我不知道,那么我将如何从参考资料中阅读它们。请告诉我怎么做。 也许你可以给我另一个解决方案

现在,我的代码是:

procedure TfmMain.CreateDocument0;
var
  TempleateFileName: string;
  WordApp, Document: OleVariant;

  procedure FillBookmark(BookmarkName, bText: string);
  var
    Range: OleVariant;
  begin
    if Document.Bookmarks.Exists(BookmarkName) then
    begin
      Range := Document.Bookmarks.Item(BookmarkName).Range;
      Range.Text := bText;
    end;
  end;
begin
  TempleateFileName := ExtractFilePath(Application.ExeName)+'Templates\0.dot';
  try
    WordApp := GetActiveOleObject('Word.Application');
  except
    try
      WordApp := CreateOleObject('Word.Application');
    except
      on E: Exception do
      begin
        MessageBox(Self.Handle, PChar(E.Message), PChar(fmMain.Caption), MB_OK+MB_ICONERROR);
        Exit;
      end;
    end;
  end;

  try
    Document := WordApp.Documents.Add(TempleateFileName, False);

    FillBookmark('ObjectType', edt0ObjectType.Text);
    ...

    WordApp.Visible := True;
    WordApp.Activate;
  finally
    WordApp := Unassigned;
  end;
end;
也就是说,我应该改变这一行:
Document:=WordApp.Documents.Add(templatefilename,False)


不是从文件中读取,而是从程序资源中读取。

Word无法从内存中打开文档。它不仅没有这样的特性,还必须记住Word是在一个单独的过程中执行的。它无法看到进程中的内存,即使它能够从内存中打开文档


如果您将文档放入链接的资源中,则需要先将其解压缩到文件中,然后再请求Word打开它们。

Word无法从内存中打开文档。它不仅没有这样的特性,还必须记住Word是在一个单独的过程中执行的。它无法看到进程中的内存,即使它能够从内存中打开文档


如果您确实将文档放入链接的资源中,那么在要求Word打开它们之前,您需要将它们解压缩到文件中。

两个步骤。1.将文件作为已编译资源添加到可执行文件中。2.在运行时提取文件并将其保存到磁盘。此时,Excel能够读取文件,您可以像以前一样继续。是的,David,我考虑过这一点,但这种变体有一些限制。如果不能找到其他的解决方案,请使用它。如果不强制将文件存储在HDD/SSD上,请考虑使用RAM磁盘。或者考虑将文件存储在*.RTF格式中,并将其馈送到TrEdHETIT.OT:关于<代码> MeaseBox(Self.Handle,PChar(E.Mead),PChar(FMGE.CAPATION),MbOKO+MbION EngRebug);<代码>-在
句柄之前的
自我
是多余的,但不会造成伤害。但通常情况下,您不应该在
TfrmMain
的方法中引用
frmMain
。而
MB_OK+MB_ICONERROR
最好是
MB_OK或MB_ICONERROR
,因为您想要组合位掩码。1.将文件作为已编译资源添加到可执行文件中。2.在运行时提取文件并将其保存到磁盘。此时,Excel能够读取文件,您可以像以前一样继续。是的,David,我考虑过这一点,但这种变体有一些限制。如果不能找到其他的解决方案,请使用它。如果不强制将文件存储在HDD/SSD上,请考虑使用RAM磁盘。或者考虑将文件存储在*.RTF格式中,并将其馈送到TrEdHETIT.OT:关于<代码> MeaseBox(Self.Handle,PChar(E.Mead),PChar(FMGE.CAPATION),MbOKO+MbION EngRebug);<代码>-在
句柄之前的
自我
是多余的,但不会造成伤害。但通常情况下,您不应该在
TfrmMain
的方法中引用
frmMain
,而
MB_OK+MB_ICONERROR
最好是
MB_OK或MB_ICONERROR
,因为您想要组合位掩码,但在.NET中。@Victoria Word没有这样做。它是一个用于处理Office OpenXML文档的库。这里的问题是关于Word自动化,但在.NET中,@Victoria Word并没有这样做。它是一个用于处理Office OpenXML文档的库。这里的问题是关于文字自动化。