Borland Delphi 7 TExcelApplication.Connect适用于办公室机器,但不适用于客户端

我负责维护我的办公室(Pascal)的一些遗留代码,由于它的限制,我写了一个delphi的dll使用TExcelApplication访问Excel。

该DLL完美地在办公室工作,机器运行的是Microsoft Office 2010,Windows 7 32位和64位。 客户使用的是新型工作站,Windows XP,Microsoft 2007。

当遇到TExcelApplication.Connect时,dll会提供一个断点exception; 命令。

除了我提到的差异外,情况完全相同。

在小说工作站上访问Microsoft Excel有什么限制吗?或者,有没有更好的方法来访问Excel文档?

注意:我只想从Excel文档读取,它跨越多行,列和电子表格,源Excel文档是* .xls 2007文档。

它的主要function是针对Excel文档启用自动对帐。

这里是库代码的一个片段

library MyLibrary; uses SysUtils, Classes, Variants, Dialogs, StdCtrls, OleServer, ExcelXP, Windows; Type PString=String[254]; Var ExcelObj : TExcelApplication; Procedure XLSOPEN(THENAME:PSTRING;VAR Reslt:PSTRING); stdcall; Begin If FileExists(THENAME) Then Begin ExcelObj := TExcelApplication.Create(nil); ExcelObj.ConnectKind := ckRunningOrNew; ExcelObj.Connect; If ExcelObj=nil Then Begin Result := 'Error : EXCEL couldnt be started!'; Exit; End Else Begin Result := 'Successful'; Exit; End; End Else Begin Result := 'Error : File '+THENAME+' does not exist!'; Exit; End; End; Exports XLSOPEN Name 'XLSOpen'; Begin End. 

Solutions Collecting From Web of "Borland Delphi 7 TExcelApplication.Connect适用于办公室机器,但不适用于客户端"

您需要将ActiveX添加到您的使用列表并使用CoInitialize(nil); 初始化ActiveX组件。 原因是因为Application-> Initialize初始化组件,现在它是一个dll,你必须在加载组件时手动初始化组件,并使用UnCoInitizlise; 当卸载DLL。

 USES ActiveX, Windows; INITIALIZATION CoInitialize(nil); FINALIZATION UnCoInitialize;