Microsoft Office Excel ne peut pas accéder au fichier 'c:\inetpub\wwwroot\Timesheet\App_Data\Template.xlsx'

J’ai mon code comme suit :

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;

Maintenant, pour la ligne :

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);

Cela s’exécute directement depuis Visual Studio (F5) mais quand j’essaie d’y accéder avec IIS, cela ne fonctionne pas.
L’erreur suivante est générée :

Microsoft Office Excel ne peut pas accéder au fichier ‘c:\inetpub\wwwroot\Timesheet\App_Data\Template.xlsx’. Il y a plusieurs raisons possibles :

  • Le nom de fichier ou le chemin n’existe pas.

  • Le fichier est utilisé par un autre programme.

  • Le classeur que vous essayez de sauvegarder a le même nom qu’un classeur actuellement ouvert.

J’ai essayé les solutions de contournement suivantes :

  • Le dossier et le fichier existent, accès donné à l’utilisateur IUSR_### (utilisateur IIS) et à l’utilisateur ASPNET dans le dossier où se trouve le fichier.

  • Dans les Services de composants (DCOM), accès donné à l’utilisateur approprié.

J’ai déjà donné toutes les permissions au dossier où le modèle (.xlsx) se trouve.

Des suggestions ?


Source : Stack Overflow

Essayez ceci :

  • Créez le répertoire

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

(pour la version 32 bits d’Excel/Office sur un ordinateur Windows 64 bits) ou

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

(pour une version 32 bits d’Office sur un ordinateur Windows 32 bits ou une version 64 bits d’Office sur un ordinateur Windows 64 bits).

  • Pour le répertoire Desktop, ajoutez les permissions Contrôle total pour l’utilisateur concerné (par exemple sous Win7 & IIS 7 & DefaultAppPool, définissez les permissions pour l’utilisateur IIS AppPool\DefaultAppPool).

Publication originale avec la réponse :