質問

Microsoft サポート ベースの記事には、オフィス製品の UI の自動化はサポートされていないと記載されているのはよく知っています。のようだ Windows Server 2008 x64 および Excel 2007 指定されたステートメントを強制します。

NT サービス (ローカル システム アカウント) の OnStart メソッドで次のコードを実行しています。コンソール アプリケーションで同じコードを実行するときに Excel が自動化されるだけです。

提供されたコードには 2 つの部分があります。最初の部分では Excel が起動し、新しいワークブックが作成され、指定されたファイル名で保存されます。2 番目の部分では、Excel の新しいインスタンスが起動され、指定されたファイルが開きます。オープン操作は次の例外で終了します。

サービスを開始できません。System.Runtime.InteropServices.COMException (0x800A03EC):Microsoft Office Excel はファイル 'c: emp est.xls' にアクセスできません。考えられる理由はいくつかあります。

• ファイル名またはパスが存在しません。• ファイルが別のプログラムで使用されている。? 保存しようとしているワークブックの名前は、現在開いているワークブックと同じです。

自動化された Excel は起動してファイルをディスクに書き込むことができたのに、既存のファイルを「開くだけ」と要求されたときに失敗するのはなぜですか?

System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
// launch excel and create/save a new work book
Microsoft.Office.Interop.Excel.ApplicationClass excel = new       Microsoft.Office.Interop.Excel.ApplicationClass();
excel.UserLibraryPath, excel.Interactive));
//            
string filename = "c:\\temp\\test.xls";
if(System.IO.File.Exists(filename)) System.IO.File.Delete(filename);
//
excel.Workbooks.Add(System.Reflection.Missing.Value);
excel.Save(filename);
excel.Quit();
excel = null;
// lauch new instance of excel and open saved file
excel = new Microsoft.Office.Interop.Excel.ApplicationClass();
try
{
    Microsoft.Office.Interop.Excel.Workbook book = excel.Workbooks.Open(filename,
                System.Reflection.Missing.Value,
                System.Reflection.Missing.Value,
                System.Reflection.Missing.Value,
                System.Reflection.Missing.Value,
                System.Reflection.Missing.Value,
                true,
                System.Reflection.Missing.Value,
                System.Reflection.Missing.Value,
                false,
                false,
                System.Reflection.Missing.Value,
                false,
                System.Reflection.Missing.Value,
                System.Reflection.Missing.Value);
     book.Close(false, System.Reflection.Missing.Value, System.Reflection.Missing.Value);
      book = null;
  }
  finally
  {
      excel.Quit();
      excel = null;
  }
  //
  GC.Collect();
役に立ちましたか?

解決

のソリューションは、本当に簡単です。 MSDNフォーラムのスレッドは見つけることができますここ

の私はここに解決策を掲載しています長い話を短くするようにするには、クレジットは、をH小川

に行きます

このソリューションは...

・Windows 2008のServer x64で

このフォルダを作成してください。

C:\ WINDOWS \ SYSWOW64 \ CONFIG \ systemprofile \デスクトップ

・Windows 2008のサーバーのx86

このフォルダを作成してください。

C:\ WINDOWS \ System32に\ CONFIG \ systemprofile \デスクトップ

...ではなくDCOMCNFG.EXEのます。

この操作は私のシステムでは、オフィスオートメーションの問題を奪います。

デスクトップフォルダは、Excelでファイルを開くためにsystemprofileフォルダに必要であると考えられる。

これはWindows2008から消え、Windows2003のは、フォルダを持っていました そして私はそれがこのエラーの原因となると考えています。

他のヒント

また、ソースに記載されているように、デスクトップ フォルダーに正しい権限を設定する必要があります。これは、Windows 2008-64ビットおよびOffice 2010 32ビットで機能しました。

  1. ディレクトリ「C:\Windows\SysWOW64\config\systemprofile\Desktop」(64ビットWindowsの場合)または「C:\Windows\System32\config\systemprofile\Desktop」(32ビットWindowsの場合)を作成します。

  2. ユーザー「Network Services (Service Réseau)」に、作成したフォルダーに対する次の権限を割り当てます。

読み取りと実行、フォルダーの内容の一覧表示、読み取り

ジョン。

私はかなり頻繁に)(終了呼び出すと、リソースを解放するのに十分でないことを発見しました。追加してみてください: -

System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);

終了()文の間に、ヌルに設定する。

は1つがあなたがエクセルは、Windows Server 2007の64ビット版に取り組んで取得するために貫通して作業する必要がありますことを言及した以外にも、多くのエラーがあります。 Windows Server 2008の64の<のhref = "http://hopschwiiz.blogspot.com/2011/02/automating-excel-2007-on-windows-server.html" のrel = "nofollowを" タイトル= "自動化Excel 2007のを参照してください。 「ビット>の手順では、私は2つの完全な日のためにこれに取り組ん後に働いた!

Apacheを使用している場合、あなたはまた、MS Wordが(他の回答に概説すべてのものと一緒に)正しく動作して取得するこれらの手順を実行する必要があるかもしれません。

以下は、起動する必要があります2つのダイアログを示すスクリーンショットは以下のとおりです。 ここに画像の説明を入力します

Apacheの場合:

サービス - > Apache->右クリック(プロパティ) - > [ログオン]タブ

MS Wordのます:

起動dcomcnfg.exe->コンソールRoot->コンポーネントサービス - > Computers->マイコンピュータ - > DCOM CONFIG->検索マイクロソフト応用 - >右クリック(プロパティ) - > [識別]タブ

あなたがMS Wordを見つけることができない場合は、

**、あなたがインストールされているオフィスのバージョンに応じて、正しいDCOMの構成(32ビット対64ビット)を起動していることを確認します。

ここでは2つのオプションがあり、あなたは、Apacheは、のローカルシステムアカウントのを使用して、デスクトップとの対話を許可する]チェックボックスをチェックするように設定することができます。あなたがこれを行うなら、あなたはのインタラクティブユーザーのにMS Wordののアイデンティティを設定する必要があります。

そうでなければ、あなたは写真に示すように、同一のユーザ(ログインしている理想的には、ユーザ)の両方を設定する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top