-1

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

该 dll 在办公室完美运行,机器运行 Microsoft Office 2010、Windows 7 32 位和 64 位。客户端使用 Novel Workstations、Windows XP、Microsoft 2007。

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

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

在 Novel 工作站上访问 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.
4

1 回答 1

1

您需要添加ActiveX到您的使用列表并使用CoInitialize(nil);来初始化 ActiveX 组件。之所以会这样,是因为Application->Initialize会初始化组件,既然是dll,就得在加载的时候手动初始化组件,UnCoInitizlise;卸载dll的时候使用。

USES ActiveX, Windows;

INITIALIZATION
  CoInitialize(nil);
FINALIZATION
  UnCoInitialize;
于 2012-01-18T09:15:23.267 回答