web-dev-qa-db-ja.com

Windows Server 2008x64上でのExcel2007の自動化

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

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

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

サービスを開始できません。 System.Runtime.InteropServices.COMException(0x800A03EC):Microsoft OfficeExcelはファイル 'c:\ temp\test.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();
25
Chris Richner

解決策は本当に簡単です。 msdnフォーラムスレッドは見つけることができます ここ

簡単に言うと、ここにソリューションを投稿します。クレジットはH Ogawaに送られます。

この解決策は...

・Windows 2008 Server x64

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

C:\ Windows\SysWOW64\config\systemprofile\Desktop

・Windows 2008 Server x86

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

C:\ Windows\System32\config\systemprofile\Desktop

... dcomcnfg.exeの代わりに。

この操作により、私のシステムのオフィスオートメーションの問題が解消されました。

Excelでファイルを開くには、systemprofileフォルダーにデスクトップフォルダーが必要なようです。

Windows2008から消え、Windows2003にフォルダがあり、このエラーの原因だと思います。

31
Chris Richner

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

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

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

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

ジョン。

7
Jonx

Quit()を呼び出すだけでは、リソースを解放するのに十分ではないことがよくあります。追加してみてください:-

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

quit()ステートメントとそれをnullに設定する間。

2

ExcelをWindowsServer 2007 64ビットで動作させるには、上記のエラーよりも多くのエラーを処理する必要があります。 私が解決した手順 これに丸2日間取り組んだ後を参照してください!

1
Borgon

Apacheを使用している場合は、MS Wordを正しく機能させるために(他の回答で概説されているすべてのものとともに)次の手順に従う必要がある場合もあります。

以下は、表示する必要のある2つのダイアログを示すスクリーンショットです。 enter image description here

Apacheの場合:

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

マイクロソフトワード:

Dcomcnfg.exe->コンソールルート->コンポーネントサービス->コンピューター->マイコンピューター-> DCOM構成-> Microsoftアプリケーションの検索->右クリック(プロパティ)-> IDタブを起動します

** MS Wordが見つからない場合は、インストールしているOfficeのバージョンに応じて、正しいDCOM構成(64ビットと32ビット)を起動していることを確認してください。

ここには2つのオプションがあります。ローカルシステムアカウントを使用するようにApacheを設定し、チェックボックスをオンにしてデスクトップの操作を許可することができます。これを行う場合は、MS WordのIdentityInteractive Userに設定する必要があります。

それ以外の場合は、図に示すように、両方を同じユーザー(理想的にはログインしているユーザー)に設定する必要があります。

1
A.O.