52

私は次のように私のコードを持っています:-

Microsoft.Office.Interop.Excel.Application oXL = null;
Microsoft.Office.Interop.Excel.Sheets sheets;
Application excel = new Microsoft.Office.Interop.Excel.Application();


excel.Workbooks.Add(System.Reflection.Missing.Value);

/*
    * Here is the complete detail's about Workbook.Open()
    * 
    *  Excel.Workbooks.Open(String Filename, Object UpdateLinks, Object ReadOnly, Object Format, 
    *  Object Password, Object WriteResPassword, Object IgnoreReadOnlyRecommended, Object Origin,
    *  Object Delimiter, Object Editable, Object Notify, Object Converter, Object AddToMru, Object Local, Object CorruptLoad)
    */

Workbook workbook = excel.Workbooks.Open(
    System.Web.HttpContext.Current.Server.MapPath("~/App_Data/Template.xlsx"),
    Missing.Value, true, Missing.Value, Missing.Value,
    Missing.Value, Missing.Value, Missing.Value,
    Missing.Value, Missing.Value, Missing.Value,
    Missing.Value, Missing.Value, Missing.Value,
    Missing.Value);
sheets = workbook.Worksheets;

今行のために:-

workbook = excel.Workbooks.Open(
    System.Web.HttpContext.Current.Server.MapPath("~/App_Data/Template.xlsx"),
    Missing.Value, true, Missing.Value, Missing.Value,
    Missing.Value, Missing.Value, Missing.Value,
    Missing.Value, Missing.Value, Missing.Value,
    Missing.Value, Missing.Value, Missing.Value,
    Missing.Value);

Visual Studio (F5) から直接実行されますが、IIS でアクセスしようとすると機能しません。次のようにエラーをスローします:-

Microsoft Office Excel は、ファイル 'c:\inetpub\wwwroot\Timesheet\App_Data\Template.xlsx' にアクセスできません。いくつか
の理由が考えられます。 • ファイル名またはパスが存在しない。
? ファイルが別のプログラムによって使用されています。
? 保存しようとしているブックは、現在開いているブックと同じ名前です。

私は次のように回避策を試しました:-

  • フォルダーとファイルが存在し、ファイルがあるフォルダー内の IUSR_### (IIS ユーザー) と ASPNET ユーザーにアクセス権を付与します。
    • コンポーネント サービス (DCOM) で、適切なユーザーにアクセス権を与えます。

テンプレート (.xlsx) が存在するフォルダーにすべてのアクセス許可を既に与えています。

助言がありますか??

4

7 に答える 7

122

これを試して:

  1. ディレクトリを作成する

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

(64 ビット Windows コンピューター上の 32 ビット バージョンの Excel/Office の場合) または

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

(32 ビット Windows コンピューター上の 32 ビット バージョンの Office、または 64 ビット Windows コンピューター上の 64 ビット バージョンの Office の場合)。

  1. デスクトップディレクトリの場合、関連するユーザーのフル コントロール アクセス許可を追加します(たとえば、Win7 & IIS 7 & DefaultAppPool では、ユーザーIIS AppPool\DefaultAppPoolのアクセス許可を設定します)。

回答付きの元の投稿:

于 2011-09-12T11:12:51.883 に答える
17

私の代わりに、 c:\windows\syswow64\config\systemprofile\desktop ディレクトリを追加しても機能しなかったことに注意してください。

ポイントは、WOW64 は Windows on Windows64 の略であり、実際には 64 ビット OS で実行される 32 ビット プログラムに適用されることを意味します。

64 ビットの Excel がインストールされているため、適切なディレクトリは c:\windows\system32\config\systemprofile\desktop であることが判明しました。

于 2014-07-04T15:28:30.623 に答える
0

WCF を Windows サービスにラップしました。デスクトップフォルダーを作成すると、あるマシンでは解決しましたが、別のマシンでは解決しませんでした。

最終的に私の問題は、Windows サービスがマシンのアクティブなユーザーの下で実行されなかったことです。マシン上でアクティブなユーザーの下でサービスを実行するように構成することで、これまでのところこの問題は解決しました。

の組み合わせのみ

  • 既存のデスクトップ フォルダ
  • 実際のユーザー アカウントで実行されるサービス

それは私のために働いた。

この記事は完全な解決策に私を導きました:Excelファイルにアクセスできません

于 2015-05-05T06:54:57.713 に答える
-1

これは機能します

エクセル.exe /セーフ

これは実行されず、通常の Excel の起動と同じエラーが発生します

エクセル.exe /オートメーション

これは、ANY ネットワーク ファイルのすべての MS Office 2007 アプリでも発生します。ローカル ファイル アクセスは問題ありません。

于 2012-12-31T19:32:42.967 に答える