Je viens de créer une application simple et hébergé dans IIS6.0 . En code, je ne fais qu'instancier des objets Excel.
using Excel = Microsoft.Office.Interop.Excel.Application;
namespace TestHosting
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Excel excelObj=new Microsoft.Office.Interop.Excel.Application();
}
}
}
Sa me donnant l'erreur suivante
"Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} failed due to the following error: 80070005 Access is denied." (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)).
Configuration du système:
Windows Server 2008, édition entreprise avec 64 bits. service pack 2
J'ai essayé avec de nombreuses solutions possibles trouvées sur Internet, mais aucune d'entre elles n'a fonctionné pour moi.
Certaines solutions que j'ai essayées sont ci-dessous
1) création d'une application de bureau sous le chemin "C:\Windows\SysWOW64\config\systemprofile" 2) définition de l'autorisation/du contrôle total pour Microsfot.EXcelApplicaiton dans DCOMCNFG 3) Suppression de toutes les instances Excel dans le gestionnaire de tâches
S'il vous plaît, aidez-moi à cet égard, ceci est juste un exemple d'application, mais dans mon application d'origine, il s'agit principalement de lire et d'écrire des données depuis/vers Excel.
Mieux vaut passer à Open XML ou vous pouvez configurer comme ci-dessous
Com + Configuration
3. Modifiez les paramètres de sécurité de l'application Microsoft Excel dans DCOM Config.
Panneau de configuration -> Outils d'administration -> Services de composants -> Ordinateurs -> MonOrdinateur -> Configuration DCOM -> Application Microsoft Excel.
Faites un clic droit pour obtenir la boîte de dialogue des propriétés. Accédez à l'onglet Sécurité et personnalisez les autorisations.
Voir les articles ici: Erreur lors de la création d'un objet Excel , Manipulations Excel dans WCF avec COM
Parfois, vous créez un nouveau pool d'applications et ne pouvez pas le résoudre via DCOMCNFG. Ensuite, il y a une autre méthode à faire:
Définissez le Identity (nom de modèle) du pool d'applications sur LocalSystem.
Je ne connais pas la cause première, mais cela résout mon problème une fois.
Trop tard pour répondre. Mais, si cela aide quelqu'un qui est toujours confronté au problème. J'ai fait réparer ça par:
→ Définissez le site sur un pool dédié au lieu d'un partagé.
→ Activer le support d'application 32 bits.
→ Définissez l'identité du pool d'applications sur LocalSystem.
donner l'autorisation de lecture/écriture à l'utilisateur IIS ou au groupe d'utilisateurs
Démarrer -> exécuter -> inetmgr
activer l'authentification ASP.NET pour votre site Web par défaut
3 . Pour 64 bits (x64), créez ce dossier: C:\Windows\SysWOW64\config\systemprofile\Desktop
Pour 32 bits (x86), créez ce dossier: C:\Windows\System32\config\systemprofile\Desktop
Le service Windows, s'il est exécuté sous le profil système, a besoin du dossier Bureau. Ce dossier a été créé automatiquement sur XP et les versions antérieures de Windows Server, mais pas sur Vista et Windows 2008 Server.
la solution qui a fonctionné pour moi consiste à changer d'utilisateur sous lequel le pool d'applications est démarré (ApplicationPoolIdentity n'a évidemment pas assez de droits pour accéder à l'objet COM).
Bonne chance!
essayez de faire ce qui suit:
vous pouvez trouver plus de détails ici
Avez-vous Excel installé sur le serveur? Les interfaces d'interopérabilité que vous utilisez sont utilisées pour automatiser Excel, ce qui nécessite que l'application Excel y soit installée. Chaque cycle de demande de page lancera potentiellement une instance distincte d'Excel.exe. Je déconseille fortement de faire cela dans le cadre d'une application Web.
Pourquoi veux-tu faire cela? Si vous souhaitez générer des documents Excel, il existe bien de meilleures façons de le faire, y compris OpenXML, comme mentionné ailleurs dans ce fil de discussion. Veuillez ne pas utiliser Excel sur le serveur!
Lien vers le téléchargement du SDK OpenXML: http://www.Microsoft.com/en-us/download/details.aspx?id=5124
Je viens de créer une application simple
Quel est le processeur cible de l'application? Je devine qu'il s'agit de x86
- donc définissez-le sur x64
ou anycpu
.
Je pense que le problème que vous rencontrez est dû à un processus 64 bits essayant d'accéder à une DLL 32 bits.
En outre, si vous ne pouvez pas modifier le processeur cible, vous pouvez essayer d'activer les applications 32 bits à partir des paramètres de pools d'applications dans IIS.
Personnellement, j'ai exécuté ces étapes exactes:
* Installez les assemblages Interop: vous pouvez installer depuis le site Web de Microsoft https://www.Microsoft.com/en-us/download/details.aspx?id=3508&tduid= (09cd06700e5e2553aa540650ec905f71) (256380) (2459594) TnL5HPStwNw-yuTjfb1FeDiXvvZxhh.RQ) ()
* Vérifier la version des assemblages: vérifie la version des assemblages sur les machines de développement et de production. Les assemblys seront dans le GAC, dans veuves 7, ce dossier est% windir%\Assembly.
* Créer un dossier du bureau: le service utilise le dossier du bureau sous systemprofile. Vous devrez donc créer ce dossier. Sinon, voici l’emplacement du dossier: Pour les applications 64 bits: C:\Windows\SysWOW64\config\systemprofile\Desktop Pour les applications 32 bits: C:\Windows\System32\config\systemprofile\Desktop
* Ajouter les autorisations utilisateur DCOM:
--- lancez la fenêtre d’exécution et tapez 'dcomcnfg'.
--- Développez Services de composants -> Ordinateurs -> Poste de travail -> Configuration DCOM.
--- Recherchez l’application Microsoft Excel. Faites un clic droit dessus et sélectionnez les propriétés, puis sélectionnez l'onglet Sécurité.
--- Sélectionnez le bouton radio Personnaliser sous 'Autorisations de lancement et d'activation' et 'Autorisation d'accès', puis cliquez sur le bouton Modifier pour que les deux ajoutent des utilisateurs comme suit.
--------- Cliquez sur le bouton Ajouter et donnez aux utilisateurs 'IIS_IUSRS' et 'NETWORK SERVICE' et donnez leur tous les privilèges.
--- Allez dans l'onglet Identité et sélectionnez l'option "L'utilisateur interactif".
--- Cliquez sur Appliquer, puis sur OK.
utilisez NPOI pour lire et écrire Excel .. c'est une source libre et ouverte
par exemple
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
//.....
private void button1_Click(object sender, EventArgs e)
{
HSSFWorkbook hssfwb;
using (FileStream file = new FileStream(@"c:\test.xls", FileMode.Open, FileAccess.Read))
{
hssfwb= new HSSFWorkbook(file);
}
ISheet sheet = hssfwb.GetSheet("Arkusz1");
for (int row = 0; row <= sheet.LastRowNum; row++)
{
if (sheet.GetRow(row) != null) //null is when the row only contains empty cells
{
MessageBox.Show(string.Format("Row {0} = {1}", row, sheet.GetRow(row).GetCell(0).StringCellValue));
}
}
}
voir cette question Stackoverflow
En utilisant ce lien, nous pouvons résoudre le problème 'Accès refusé' pour Excel, objets Word . C'est un lien vraiment utile
Cela ressemble à un problème de permission. Je suggère d'exécuter processMonitor pour déterminer les autorisations nécessaires.
Je suis tombé sur cette question il y a deux jours, j'ai passé deux jours complets. J'ai donc constaté que je devais donner l'accès au groupe d'utilisateurs IUSR à l'adresse DCOMCNFG -> Propriétés de mon ordinateur -> Sécurité com - - Lancement et activation Autorisations -> Modifier les valeurs par défaut et donner tous les droits à IUSR.
j'espère que ça va aider quelqu'un ....
Utilisez ceci
<system.web>
<identity impersonate="true"
userName="User Name"
password="Password" />
`enter code here`</system.web>
-tony-