我真的希望您能帮到我。到目前为止,已花费了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;
`
非常感谢你。
史蒂夫
在我看来,这比需要的要复杂。我会这样写:
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] 删除。
我来说两句