Question

Je suis bien au courant de l'article de base de support Microsoft indiquant qu'il est pas pris en charge pour automatiser les produits de bureau UI moins. Il semble que Windows Server 2008 x64 et Excel 2007 appliquer la déclaration donnée.

Je suis en cours d'exécution le code suivant dans un service NT (compte système local) Méthode OnStart. Tout ce qu'il fait est l'automatisation Excel la façon dont il fonctionne lorsque vous exécutez le même code dans une application console.

Le code fourni comporte deux parties. La première partie lance Excel, crée un nouveau livre de travail et il enregistre au nom du fichier donné. La deuxième partie lance une nouvelle instance d'Excel et ouvre le fichier donné. La fin de l'opération ouverte à cette exception:

Service ne peut pas être démarré. System.Runtime.InteropServices.COMException (0x800A03EC): le fichier ne peut pas accéder à Microsoft Office Excel 'c: \ temp \ test.xls'. Il y a plusieurs raisons possibles:

• Le nom du fichier ou le chemin n'existe pas. • Le fichier est utilisé par un autre programme. • Le classeur que vous essayez d'enregistrer le même nom comme un classeur ouvert.

Pourquoi l'excel automatisé capable de lancer et d'écrire des fichiers sur le disque, mais échoue quand il est demandé « juste « pour ouvrir un fichier existant?

System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
// launch excel and create/save a new work book
Microsoft.Office.Interop.Excel.ApplicationClass excel = new       Microsoft.Office.Interop.Excel.ApplicationClass();
excel.UserLibraryPath, excel.Interactive));
//            
string filename = "c:\\temp\\test.xls";
if(System.IO.File.Exists(filename)) System.IO.File.Delete(filename);
//
excel.Workbooks.Add(System.Reflection.Missing.Value);
excel.Save(filename);
excel.Quit();
excel = null;
// lauch new instance of excel and open saved file
excel = new Microsoft.Office.Interop.Excel.ApplicationClass();
try
{
    Microsoft.Office.Interop.Excel.Workbook book = excel.Workbooks.Open(filename,
                System.Reflection.Missing.Value,
                System.Reflection.Missing.Value,
                System.Reflection.Missing.Value,
                System.Reflection.Missing.Value,
                System.Reflection.Missing.Value,
                true,
                System.Reflection.Missing.Value,
                System.Reflection.Missing.Value,
                false,
                false,
                System.Reflection.Missing.Value,
                false,
                System.Reflection.Missing.Value,
                System.Reflection.Missing.Value);
     book.Close(false, System.Reflection.Missing.Value, System.Reflection.Missing.Value);
      book = null;
  }
  finally
  {
      excel.Quit();
      excel = null;
  }
  //
  GC.Collect();
Était-ce utile?

La solution

La solution est très simple. Le fil forum msdn se trouve

Pour faire une longue histoire courte, je signale ici la solution, le crédit va à H Ogawa

Cette solution est ...

· Windows 2008 Server x64

S'il vous plaît faire de ce dossier.

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

· Windows 2008 Server x86

S'il vous plaît faire de ce dossier.

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

... au lieu de dcomcnfg.exe.

Cette opération a emporté des problèmes de bureautique dans mon système.

Un dossier de bureau semble être nécessaire dans le dossier systemprofile d'ouvrir le fichier par Excel.

Il disparaît de Windows2008, Windows2003 avait le dossier, et je pense que provoque cette erreur.

Autres conseils

En outre, comme indiqué dans la source, vous devez définir les droits appropriés pour le dossier de bureau. Cela a fonctionné pour moi sous Windows 2008-64bits et Office 2010 32bits.

  1. Créer un répertoire "C: \ Windows \ SysWOW64 \ config \ systemprofile \ Desktop" (pour Windows 64 bits) ou "C: \ Windows \ System32 \ config \ systemprofile \ Desktop" (pour Windows 32 bits)

  2. Assigner utilisateur "Services réseau (Réseau Service)" les droits suivants pour le dossier créé:

Lecture et exécution, liste le contenu du dossier, Lecture

John.

Je l'ai assez souvent trouvé que l'appel Quit () ne suffit pas de libérer les ressources. Essayez d'ajouter: -

System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);

entre l'instruction quit () et le mettre à null.

Il y a beaucoup plus d'erreurs que celui mentionné que vous aurez besoin de travailler à travers afin de faire fonctionner Excel sur Windows Server 2007 64 bits. Voir les étapes que j'élaborées après avoir travaillé sur ce pendant deux jours!

Si vous utilisez Apache, vous pourriez aussi avoir besoin de suivre ces étapes pour faire fonctionner correctement MS Word (ainsi que tout décrit dans d'autres réponses):

Voici une capture d'écran montrant les deux boîtes de dialogue dont vous aurez besoin pour faire apparaître: entrer image description ici

Pour Apache:

Services-> apache-> Clic droit (Propriétés) -> onglet Connexion

MS Word:

Lancement dcomcnfg.exe-> Console Root-> Composant Services-> Ordinateurs-> Mon Computer-> Config- DCOM> Trouver Microsoft Application-> Clic droit (Propriétés) -> Onglet Identité

** si vous ne trouvez pas la MS Word, assurez-vous que vous lancez la configuration correcte DCOM (64 bits vs 32 bits) selon la version d'Office que vous avez installé.

Il y a deux options, vous pouvez définir Apache à utiliser Compte système local et cochez la case pour permettre une interaction de bureau. Si vous faites cela, vous devez définir le Identité pour MS Word à Interactive utilisateur .

Dans le cas contraire, vous devez définir à la fois au même utilisateur (idéalement l'utilisateur qui est connecté) comme indiqué dans l'image.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top