25

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

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

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

サービスを開始できません。System.Runtime.InteropServices.COMException (0x800A03EC): Microsoft Office Excel はファイル '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();
4

5 に答える 5

31

解決策は本当に簡単です。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フォルダ内にDesktopフォルダが必要なようです。

Windows2008からは消え、Windows2003にはフォルダがあり、それが原因ではないかと思います。

于 2009-07-07T07:39:16.733 に答える
7

また、ソースに記載されているように、デスクトップ フォルダーに正しい権限を設定する必要があります。これは、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)」に、作成したフォルダに対する次の権限を割り当てます。

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

ジョン。

于 2010-12-06T03:13:24.223 に答える
2

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

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

Quit() ステートメントと null への設定の間。

于 2009-05-14T16:46:05.220 に答える
1

Excel を Windows Server 2007 64 ビット上で動作させるために対処する必要があるエラーは、上記以外にも多数あります。これに丸 2 日間取り組んだ後の手順をご覧ください。

于 2011-04-15T20:56:15.480 に答える