IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

c# et les dll excel


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    242
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 242
    Par défaut c# et les dll excel
    Bonjour,

    Je sais que plusieurs posts ont été émis à ce sujet, mais j'ai beau les lire je n'avance pas.

    Sur mon PC en XP, j'ai installé Office 2003 et visual studio 2005.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    private void button1_Click(object sender, EventArgs e)
            {
     
                    Microsoft.Office.Interop.Excel.ApplicationClass xlApp = new Microsoft.Office.Interop.Excel.ApplicationClass();
                    Microsoft.Office.Interop.Excel.Workbook xlBook = new Microsoft.Office.Interop.Excel.Workbook();
                    Microsoft.Office.Interop.Excel.Worksheet xlSheet = new Microsoft.Office.Interop.Excel.Worksheet();
     
                    if (xlApp != null)
                    {
                        Object missing = Missing.Value;
                        xlApp.Visible = false;
                        xlBook = xlApp.Workbooks.Add(missing);
                        xlSheet = (Microsoft.Office.Interop.Excel.Worksheet)xlBook.ActiveSheet;
     
                        xlSheet.Cells[1, 1] = "line 1 col 1";
                        xlSheet.Cells[1, 2] = "line 1 col 2";
     
                        xlSheet.SaveAs("Test1", missing, missing, missing, missing, missing, missing, missing,
                                   missing, missing);
     
                        xlApp.Quit();
                        xlApp = null;
                    }
     
     
            }

    C'est une appli toute simple avec juste une fenêtre et un bouton pour lancer le test d'écriture dans EXCEL.
    Le programme plante sur la ligne de création de xlBook avec le message.

    La récupération de la classe COM pour le composant avec le CLSID {00020819-0000-0000-C000-000000000046} a échoué en raison d l'erreur suivante : 80040154
    J'ai bien intégré à mon projet les 2 références

    Microsoft Office 11.0 object Library
    Microsoft Excel 11.0 object Library

    Si cela vous inspire.

    Merci.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 194

  3. #3
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    242
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 242
    Par défaut
    Merci pour ton lien, mais il ne m'a malheureusement pas fait avancer.

    Les PIA assemby sont bien présentes puisqu'Office est installé sur le poste.
    et je suis bien aller chercher les bonnes références.

    j'ai changé la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Microsoft.Office.Interop.Excel.ApplicationClass xlApp = new Microsoft.Office.Interop.Excel.ApplicationClass();
    en

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();

    rien n'y fait.

  4. #4
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Visiblement une DLL COM n'a pas été "registered" correctement (l'erreur 0x80040154 est plutôt univoque).

  5. #5
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 194
    Par défaut
    Dans le liens que j'ai donné il ne font pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Microsoft.Office.Interop.Excel.Workbook xlBook = new Microsoft.Office.Interop.Excel.Workbook();
    ps ca plante aussi chez moi donc je pense qu'il faut faire comme l'exemple donné

  6. #6
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    242
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 242
    Par défaut Ca marche mais c'est tout de même étrange
    En cherchant sur le forum j'ai trouvé que quelqu'un avait eu le même problème avec le code erreur 80040154, et s'en était sorti avec la commande

    J'ai essayé et j'ai obtenu comme réponse

    Microsoft.Office.interop.excell le point d'entrée DLLregister est introuvable, ce fichier ne peut être enregistré.
    Comme tout cela ne me disait rien, j'ai abandonné cette piste et je me suis tourné vers le code proposé par BenoitM.
    Il faut tout de même préciser que mes ennuis ont commencé depuis que j'ai eu un plantage de la machine, et que j'ai du tout réinstallé. Jusqu'à présent mon appli et mes exportations sur excel fonctionnaient parfaitement.

    J'ai donc fini par créé le code suivant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    private void button1_Click(object sender, EventArgs e)
            {
                try
                {
                    SaveFileDialog frm = new SaveFileDialog();
     
                    if (frm.ShowDialog() == DialogResult.OK)
                    {
                        Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.ApplicationClass();
     
                        Object missing = Missing.Value;
     
                        // il faut que le fichier excel existe sinon ça plante
                        // J'ouvre donc par défaut un fichier vide, créé dans le répertoire de l'appli.
     
                        Microsoft.Office.Interop.Excel.Workbook xlBook = xlApp.Workbooks.Open("c:\\Test\\DoNotDelete.xls", missing, false,
                            missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing,
                            missing);
     
     
                        Microsoft.Office.Interop.Excel.Worksheet xlSheet = (Microsoft.Office.Interop.Excel.Worksheet)xlBook.ActiveSheet;
     
                        if (xlApp != null)
                        {
     
                            xlSheet.Cells[1, 1] = "line 1 col 1";
                            xlSheet.Cells[1, 2] = "line 1 col 2";
                            // et on enregistre le fichier sous le nom saisi par l'utilisateur.
                            xlBook.SaveAs(frm.FileName, missing, missing, missing, missing, missing, XlSaveAsAccessMode.xlShared, missing, missing,
                                missing, missing, missing);
                            xlBook.Close(false, missing, missing);
     
                            xlApp.Quit();
                        }
                    }
                }
                catch (Exception e1)
                {
                    MessageBox.Show(e1.Message);
                }
            }
    qui n'a effectivement plus rien à voir avec ce qui fonctionnait avant,
    et là ça marche!

    Je vais donc mettre à jour mon application, sans chercher à savoir pourquoi ce qui marchait avant ne marche plus maintenant, il y a longtemps que je ne me pose plus de questions sur les applications microsoft.

    Une dernière précision,

    En testant mon bout de code sur plusieurs machines, j'ai obtenu une fois la réponse

    Tentative de lecture ou d'écriture de mémoire protégée.
    Cela indique souvent qu'une autre mémoire est endommagée
    Ne croyez surtout pas qu'il s'agisse de mémoire endommagée, ou de quelconque droits d'accès sur le disque. C'est tout simplement parce que sur ce poste là, il y avait encore une vieille version d'Office 97.

    Merci à tous pour le coup de main, et comprenne qui pourra.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. impression PS par dll excel
    Par wazaa dans le forum MFC
    Réponses: 3
    Dernier message: 27/04/2005, 15h00
  2. Charger les données Excel avec Forms 9i
    Par Process Linux dans le forum Forms
    Réponses: 8
    Dernier message: 29/03/2005, 14h20
  3. [CR] créer 1 setup contenant tte les dll pr pas installer CR
    Par speed034 dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 27/10/2004, 09h57
  4. Question sur les DLL
    Par Hellmout dans le forum MFC
    Réponses: 7
    Dernier message: 22/10/2004, 02h51
  5. [Executable] Intégrer les DLL ou pas?
    Par Superstivix dans le forum C++Builder
    Réponses: 3
    Dernier message: 14/06/2004, 10h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo