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

时间:2012-01-17 13:19:51

标签: windows delphi excel delphi-7 novell

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

dll在办公室工作得很好,机器运行Microsoft Office 2010,Windows 7 32位和64位。客户端正在使用Novel Workstations,Windows XP,Microsoft 2007。

遇到TExcelApplication.Connect时,dll会出现断点异常;命令。

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

在新工作站上访问Microsoft Excel是否有任何限制,或者,有更好的方法来访问Excel文档吗?

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

它的主要功能是启用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.

1 个答案:

答案 0 :(得分:1)

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

USES ActiveX, Windows;

INITIALIZATION
  CoInitialize(nil);
FINALIZATION
  UnCoInitialize;