web-dev-qa-db-ja.com

Microsoft Office Excelはファイル「c:\ inetpub \ wwwroot \ Timesheet \ App_Data \ Template.xlsx」にアクセスできません

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

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)が存在するフォルダーに対するすべてのアクセス許可を既に付与しています

助言がありますか??

43
Shubh

これを試して:

  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. Desktopディレクトリの場合、関連するユーザーのフルコントロール権限を追加します(たとえば、Win7の場合、IIS 7&DefaultAppPoolは、ユーザーの許可を設定しますIIS AppPool\DefaultAppPool)。

元の投稿と回答:

106
Eric Bonnot

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

重要なのは、WOW64はWindows64上のWindowsを表しているということです。つまり、64ビットOS上で実行される32ビットプログラムに実際に適用されます。

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

12
Nikhil

Eric Bonnotの回答に何かを追加したいと思います:PowerPoint PIAで管理者以外のユーザーがいるIISサーバー。

このファイルにメディア(たとえば画像)が含まれている場合、pptxファイルを開くことができないことに気付きました。

「ハッキング」は、Windowsユーザー(PIAを使用するユーザー)にもsystemprofile/AppDataディレクトリーの権限を追加することでした。

お役に立てれば

1
Amaury Bauzac

私の場合、提供された提案に従って here を実行し、問題を解決しました。

手順:

  1. dcomcnfgを実行します
  2. Console Root\Component Services\Computers\My Computer\DCOM Config\Microsoft Excel Applicationに移動します
  3. 右クリックMicrosoft Excelアプリケーション
  4. 選択プロパティ
  5. Identityタブに移動します
  6. インタラクティブユーザーを選択します。

手順2で、そのパスが見つからない場合は、mmc comexp.msc /32の代わりにdcomcnfg

1
datchung

私は以前にこの問題を試みてから解決しました。

溶液:

特定のフォルダー(サブフォルダーとファイル)に完全なアクセス許可を設定し、正常に動作することを確認しました。

0
user2617875

WCFをWindowsサービスにラップしました。デスクトップフォルダーを作成することで、1台のコンピューターでは解決できましたが、別のコンピューターでは解決できませんでした。

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

の組み合わせのみ

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

私のためにそれを得ました。

この記事では、完全なソリューションを紹介しました。 Excelファイルにアクセスできません

0
Florian Moser