2010-12-10 36 views
23

méthode Microsoft.Office.Interop.Excel.WorkbookClass.SaveAs() fonctionne bien sur Windows Server 2003 et sur XP, mais pas sur le serveur de Windows 2008. Je copiais comme il est donné tous les dll et les autorisationsSystem.Runtime.InteropServices.COMException (0x800A03EC)

Je également essayé toutes les solutions données sur le net, tels que les paramètres de la culture et l'autorisation DCOM.

Obtenir l'erreur suivante:

System.Runtime.InteropServices.COMException (0x800A03EC): Exception from HRESULT: 0x800A03EC

à

Microsoft.Office.Interop.Excel.WorkbookClass.SaveAs(Object Filename, Object FileFormat, Object Password, Object WriteResPassword, Object ReadOnlyRecommended, Object CreateBackup, XlSaveAsAccessMode AccessMode, Object ConflictResolution, Object AddToMru, Object TextCodepage, Object TextVisualLayout, Object Local)

S'il vous plaît aider ..!

+0

"Le code suivant ..." - quel code? Je pense que vous avez oublié de poster votre code. –

+0

Salut Edited mon Qn ..! –

Répondre

42

La réponse trouvée ....... !!!!!!!

Officiellement, Microsoft Office 2003 Interop n'est pas pris en charge sur Windows Server 2008 par Microsoft.

Mais après beaucoup de permutations & combinaisons avec le code et la recherche, nous sommes tombés sur une solution qui fonctionne pour notre scénario.

La solution consiste à combler la différence entre la manière dont Windows 2003 et 2008 conserve sa structure de dossiers, car Office Interop dépend du dossier de bureau pour l'ouverture/la sauvegarde intermédiaire de fichiers. Le système 2003 héberge le dossier de bureau sous systemprofile qui est absent en 2008.

Donc quand nous créons ce dossier sur 2008 sous la hiérarchie respective comme indiqué ci-dessous; le bureau Interop est capable de sauvegarder le fichier au besoin. Ce dossier de bureau doit être créé sous

C: \ Windows \ System32 \ config \ systemprofile

ET

C: \ Windows \ SysWOW64 \ config \ systemprofile

Cela a fonctionné pour moi ...

ne plus vérifier si .NET 1.1 est installé car il est nécessaire par Interop et ot pré-installé par Windows Server 2008

Ou vous pouvez aussi utiliser la méthode SaveCopyas() ist il suffit de prendre onargument comme chaîne de nom de fichier)

Merci Guys ..!

+0

Je viens d'utiliser SaveCopyas() au lieu de SaveAs() et ajouté l'emprunt d'identité dans web.config et son fonctionnement! –

+1

Comment avez-vous utilisé SaveCopyAs() au lieu de SaveAs() lorsque les méthodes ont des paramètres différents, par exemple le format de sauvegarde? – Muflix

+0

J'ai créé les dossiers de bureau et cela fonctionne à nouveau parfaitement. Merci donc de correspondre, je n'aurais jamais trouvé le problème moi-même – benshabatnoam

4

googling révèle que potentiellement vous avez un fichier corrompu:

http://bitterolives.blogspot.com/2009/03/excel-interop-comexception-hresult.html

et que vous pouvez dire exceller pour l'ouvrir de toute façon avec le paramètre CorruptLoad, avec quelque chose comme ...

Workbook workbook = excelApplicationObject.Workbooks.Open(path, CorruptLoad: true); 
+0

J'ai eu ce même problème. Les données étaient garbage dans le fichier Excel. Ouverture du manuel dans Excel et supprimé les mauvaises données tout a fonctionné. J'ai aussi essayé avec le CorruptLoad. Cela a fonctionné –

2

Je voyais la même erreur lorsque j'essayais de sauvegarder un fichier Excel. Le code fonctionnait correctement lorsque j'utilisais MS Office 2003, mais après la mise à niveau vers MS Office 2007, j'ai commencé à voir cela. Cela arriverait chaque fois que j'essayerais de sauvegarder un fichier Excel sur un serveur ou un partage distant. Ma solution, quoique rudimentaire, a bien fonctionné. J'ai juste eu le programme enregistrer le fichier localement, comme le lecteur C: \ de l'utilisateur. Ensuite, utilisez le fichier "System.IO.File".Copier (File, Destination, Overwrite) "méthode pour déplacer le fichier sur le serveur.Vous pouvez ensuite supprimer le fichier sur le lecteur C: \

Fonctionne bien, et simple.Mais certes pas l'approche la plus élégante

Hope this helps! j'avais une tonne de mal à trouver des solutions sur le web jusqu'à ce que cette idée surgit dans ma tête.

0

Pour tous ceux qui connaissent encore ce problème, je viens de passer 2 jours traquer Je trouvais la même erreur quand il n'y avait pas de lignes dans l'ensemble de données Cela semble évident, mais le message d'erreur est très obscur, d'où 2 jours

+0

Vous n'avez pas résolu , droite? – daniele3004

+0

@ daniele3004 Si je me souviens bien, le problème était que je recevais zéro nombre de lignes. J'ai donc ajouté la vérification de 'numberOfRows> 0' et le problème a été corrigé. – trailmax

1

Il est un problème d'autorisation lorsque IIS est en cours d'exécution j'ai eu ce problème et je l'ai résolu de cette manière

Je suis allé sur les dossiers

C: \ Windows \ System32 \ config \ SystemProfile

et

C: \ Windows \ SysWOW64 \ config \ SystemProfile

sont des dossiers système protégés, ils ont généralement le verrou.

Clic-droit-> Sécurité de la carte-> Cliquez sur Édition-> Ajouter un utilisateur "Autenticadet User" et attribuez des permissions.

A ce point tout est résolu, si vous avez encore des problèmes essayer de donner toutes les autorisations à « Tout le monde »

5

Essayez ceci comme cela a fonctionné pour moi ...

  1. Cliquez sur « Démarrer » -> "Exécuter" et entrez "dcomcnfg"
  2. Cela fera apparaître la fenêtre des services de composants, développez sur "Console Root" -> "Ordinateurs" -> "DCOM Config"
  3. Rechercher "Microsoft Excel application" dans le liste des composants.
  4. Cliquez avec le bouton droit sur l'entrée et sélectionnez "Propriétés"
  5. Accédez à l'onglet "Identité" dans la boîte de dialogue des propriétés.
  6. Sélectionnez "L'utilisateur interactif".

avec la permission de Last paragraph mentioned in here