Delphi XE7使用EmptyParam通过OLE Auto打开Word2010文档

史蒂夫·F

我真的希望您能帮到我。到目前为止,已花费了2天。我尝试通过在System.variants单元中执行以下命令进行调试,但看不到解决方案。

我正在尝试让Delphi XE7通过OLE自动化在Word 2010中打开一个.doc文件。

我为Word2010.pas文件中给出的Open()函数设置了16个参数,该参数是从MSWORD.OLB类型库派生并由.. \ OCX \ Servers下的Delphi XE7提供的,然后调用它并获得EVariantBadVarTypeError异常,消息:“无效的变量类型”。

我已经严格遵守参数规范(我认为),无法解决问题所在。

Word2010.pas在序言中有一行:// SYS_KIND:SYS_WIN32指示(我认为)此单元适用于32位大小写,因此我在32位Win目标下进行编译。

这是代码段:

`...
uses
Word2010,
Vcl.OleServer,
System.Win.ComObj,
Winapi.OLE2,
System.variants,
Winapi.ActiveX
...

procedure TDocPDF.ExOpenDocument(sDocFile :string);
var
    WordApp : _ApplicationDisp;
    DocumentTemplate  : _DocumentDisp;
    DocsCollection    : DocumentsDisp;
    vTemplate : OleVariant;
    vVisible : OleVariant;
    vOpenFormat : OleVariant;
    vConfirmConversions,
    vReadOnly ,
    vAddToRecentFiles,
    vPasswordDocument,
    vPasswordTemplate,
    vRevert,
    vWritePasswordDocument,
    vWritePasswordTemplate ,
    vEncoding : OleVariant;
    vOpenAndRepair : OleVariant;
    vDocumentDirection : OleVariant;
    vNoEncodingDialogue : OleVariant;
    vXMLTransform : OleVariant;

begin
// load a copy of Word 2010:
CoInitialize(nil);
WordApp := (CoWordApplication.Create as _ApplicationDisp);
WordApp.Visible := bVisible;
DocsCollection := WordApp.Documents as DocumentsDisp;

// set up the parameters for the .Open command:
vTemplate := sDocFile ;
vVisible := False;
vConfirmConversions:=false;
vReadOnly :=False;
vAddToRecentFiles:=False;
vPasswordDocument:=EmptyParam;
vPasswordTemplate :=EmptyParam;
vRevert:=False;
vWritePasswordDocument:=EmptyParam;
vWritePasswordTemplate:=EmptyParam;
vOpenFormat:=wdOpenFormatAuto;
vEncoding:=EmptyParam;
vOpenAndRepair:=EmptyParam;
vNoEncodingDialogue:=EmptyParam;
vDocumentDirection:=EmptyParam;
vXMLTransform:=EmptyParam;

try
   DocumentTemplate := DocsCollection.Open(vTemplate,
      vConfirmConversions,
      vReadOnly,
      vAddToRecentFiles,
      vPasswordDocument,
      vPasswordTemplate,
      vRevert,
      vWritePasswordDocument,
      vWritePasswordTemplate,
      vOpenFormat,
      vEncoding,
      vVisible,
      vOpenAndRepair,
      vDocumentDirection,
      vNoEncodingDialogue,
      vXMLTransform) as _DocumentDisp;
except on e: exception do begin
   Application.MessageBox(PChar('Problem':'+E.message),                             PChar('ExOpenDocument'), MB_OK);
end;
end;

`

非常感谢你。

史蒂夫

大卫·赫弗南(David Heffernan)

在我看来,这比需要的要复杂。我会这样写:

var
  App: WordApplication;
  Docs: Documents;
  Doc: WordDocument;
....
App := CoWordApplication.Create;
App.Visible := True;
Docs := App.Documents;
Doc := Docs.Open( 'C:\desktop\temp.docx', EmptyParam, EmptyParam, EmptyParam, 
  EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, 
  EmptyParam, EmptyParam);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章