web-dev-qa-db-fra.com

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

Il est exécuté directement à partir du studio visuel (F5) mais lorsque j'essaie d'y accéder avec IIS cela ne fonctionnera pas. Lance une erreur comme suit: -

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 d'accès n'existe pas.
• Le fichier est utilisé par un autre programme.
• Le classeur que vous essayez d'enregistrer porte le même nom qu'un classeur actuellement ouvert.

J'ai essayé le travail autour comme: -

  • Le dossier et le fichier existent, donnant accès à l'IUSR _ ### (utilisateur IIS) et à l'utilisateur ASPNET dans le dossier où se trouve le fichier.
    • Aux services de composants (DCOM), accès à l'utilisateur approprié.

J'ai déjà donné toutes les autorisations sur le dossier où le modèle (.xlsx) existe

Aucune suggestion??

43
Shubh

Essaye ça:

  1. 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).

  1. Pour le répertoire Desktop , ajoutez Autorisations de contrôle total pour l'utilisateur concerné ( par exemple dans Win7 & IIS 7 & DefaultAppPool définir les autorisations pour l'utilisateur IIS AppPool\DefaultAppPool ).

Message d'origine avec réponse:

106
Eric Bonnot

Permettez-moi de noter qu'à ma place, l'ajout du répertoire c:\windows\syswow64\config\systemprofile\desktop n'a pas fonctionné.

Le fait est que WOW64 signifie Windows sur Windows64, ce qui signifie qu'il s'applique en fait aux programmes 32 bits exécutés sur le système d'exploitation 64 bits.

Comme j'ai installé Excel 64 bits, le répertoire approprié s'est avéré être le c:\windows\system32\config\systemprofile\desktop

12
Nikhil

Je voudrais ajouter quelque chose à la réponse d'Eric Bonnot: La réponse a fonctionné partiellement pendant que je travaillais sur un serveur IIS avec un utilisateur non administrateur avec le PowerPoint PIA .

J'ai remarqué que je ne pouvais pas ouvrir un fichier pptx si celui-ci contenait un média (image par exemple).

Le "hack" devait ajouter également les droits de l'utilisateur Windows (celui utilisant le PIA) sur les répertoires systemprofile/AppData.

J'espère que cela t'aides

1
Amaury Bauzac

Dans mon cas, j'ai suivi les suggestions fournies ici et résolu le problème.

Pas:

  1. Exécutez dcomcnfg
  2. Accédez à Racine de la console\Services de composants\Ordinateurs\Poste de travail\Configuration DCOM\Application Microsoft Excel
  3. Clic droit Application Microsoft Excel
  4. Sélectionnez Propriétés
  5. Accédez à l'onglet Identité
  6. Sélectionnez L'utilisateur interactif.

À l'étape 2, si vous ne trouvez pas ce chemin, essayez d'exécuter mmc comexp.msc /32 au lieu de dcomcnfg.

1
datchung

J'étais précédemment tenter ce problème puis j'ai résolu.

Solution:

J'ai mis l'autorisation complète sur un dossier particulier (sous-dossier et fichiers) et vérifié que cela fonctionnait bien.

0
user2617875

J'ai encapsulé mon WCF dans un service Windows. La création des dossiers de bureau l'a résolu pour moi sur une machine, mais pas sur une autre.

Mon problème à la fin était que mon service Windows ne fonctionnait pas sous un utilisateur actif de la machine. Configurer le service pour qu'il s'exécute sous un utilisateur actif sur la machine a résolu ce problème pour moi jusqu'à présent.

Seule la combinaison de

  • Dossier de bureau existant
  • Service exécuté sous un vrai compte utilisateur

je l'ai fait fonctionner pour moi.

Cet article m'a conduit à la solution complète: Impossible d'accéder au fichier Excel

0
Florian Moser