0

oleを介してExcel2003スプレッドシートを開いて更新しようとしています。ただし、「Workbooksクラスのメソッドの追加に失敗しました」というエラーが表示され、それ以上の情報はありません。

コードは単体テストで機能し、3台のサーバーで機能しますが、Webサーバーでエラーが発生して失敗します。ローカルシステムアカウントで実行されているサービスアプリから実行されています。

同じバージョンのExcelがすべてのサーバーにインストールされています(2003sp3)。問題のファイルはすべて存在し、予想される場所にあります。

スプレッドシートにはマクロはありませんが、データベースクエリはあります。スプレッドシートはすべて開くことができます。

呼び出しコードは

if VarIsEmpty(XLApp) then
begin
  XLApp := CreateOleObject('Excel.Application');
  try
    XLApp.DisplayAlerts:=  wdAlertsNone;
  except
...
  end;
  XLApp.AutomationSecurity:= msoAutomationSecurityForceDisable;
end;

fullFileName:= ExpandReportFileName( partialFilename);
if not FileExists(fullFileName) then
  raise Exception.Create('File not found: ' + fullFileName);

XLAPP.Workbooks.Add(fullFileName);  << fail here

他に何を試すことができるかについてのアイデアはありますか?

4

4 に答える 4

4

同じエラーが発生していました

xls.WorkBooks.Add(xlWBATWorksheet);

その行を次のように変更しました

xls.Application.Workbooks.Add;

今、それは働いています。最初に Workbook を取得してから、そのメソッドを呼び出そうとするかもしれません。

于 2012-01-04T13:39:16.383 に答える
1

サービスでのOfficeアプリケーションの自動化はサポートされていません

それは可能ですが、それは非常に困難であり、このような多くの問題に遭遇します。また、非常に遅くなります。

このようなExcelファイルを操作するDelphiコンポーネントを探す必要があります。(私は特にそれをお勧めしていません;それは私がグーグルで見つけた最初のものであったことに注意してください)

実行しようとしていることによっては、代わりにOLEDBを使用できる場合があります。

于 2009-12-10T02:40:40.937 に答える
1

Workbooks.Openあなたが探している方法かもしれません

Add新しい空のワークブックを作成します。ファイル名を指定すると、そのファイルが新しいファイルのテンプレートとして使用されます。ここを参照してください

Open期待どおりにファイルを開くだけです-ここを参照してください

于 2009-12-12T00:17:41.063 に答える