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

Delphi Discussion :

[Delphi 5]+[Excel] EOleException


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de MelkInarian
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Par défaut [Delphi 5]+[Excel] EOleException
    Mes hommages Mesdames, mes respects Messieurs!
    Dans mon appli:
    - je connecte
    - j'ouvre un classeur Excel (avec readonly à false)
    - Je colle le contenu d'une variable enregistrement dans une plage de cellules (x colonnes et 1 ligne)
    - Je sauvegarde le classeur
    - Je ferme le classeur
    - je déconnecte

    J'ai un message d'erreur:
    Le projet MonProjet à provoqué une classe d'Exception EOleException avec le message "Impossible d'accéder au document en lecture seule 'MonDoc.Xls'. Processus ...

    Lorsque je relance l'appli, puisque je n'ai pas pu terminer correctement (la connexion à excel est toujours en cours et le classeur est ouvert mais invisible) j'ai un autre message d'erreur:
    Le projet MonProjet à provoqué une classe d'Exception EOleException avec le message "Erreur Ole 800A03EC'. Processus ...

    et d'autres fois:
    Le projet MonProjet à provoqué une classe d'Exception EOleException avec le message "Erreur Ole 800AC472'. Processus ...

    Maintenant voici mes questions:
    1) Pour pouvoir créer un gestionnaire d'Exceptions convenable, quelqu'un pourrait-il me donner la commande de lecture du message d'erreur
    Exception.Message ne semble pas fonctionner dans le cas des Exceptions Ole?

    2) Y a t il un moyen (par itérations ou autre) d'affecter les champs d'un enregistrement à des cellules?

    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
     
      Try
        ExcelApplication1.Connect;                        // Connection à Excel
              MonClasseur:=ExcelApplication1.Workbooks.Open(FBaseT, False, False, EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
                EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,0);
        ExcelApplication1.Visible[0]:=False;         // Excel est invisible
        MaFeuille:=MonClasseur.Worksheets[1] as _worksheet;
       ...
        MaFeuille.Range[Ann,Ann].Value := Af.Numr;  // A: N° d'affaire
        MaFeuille.Range[Bnn,Bnn].Value := Af.Libl;  // B: Libellé
        MaFeuille.Range[Cnn,Cnn].Value := Af.Adrs;  // C: Adresse
        MaFeuille.Range[Dnn,Dnn].Value := Af.Comm;  // D: Commune
        MaFeuille.Range[Enn,Enn].Value := Af.Inse;  // E: INSEE
        MaFeuille.Range[Fnn,Fnn].Value := Af.ChAf;  // F: Chargé d'affaires
        MaFeuille.Range[Gnn,Gnn].Value := Af.DMEO;  // G: Date de DMEO
        MaFeuille.Range[Hnn,Hnn].Value := Af.PMEO;  // H: Date de PMEO
       ...
        MonClasseur.SaveAs(FBaseT,
              EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
              xlNoChange,EmptyParam,EmptyParam,EmptyParam,EmptyParam,0);
              Info.Panels[1].Text := 'L''affaire n°' + NumAff.Text +
               ' a été enregistrée dans le fichier ' + FBaseT +
               ' à la ligne: ' + IntToStr(NumLig);
      except
              on EOleException do begin
                Info.Panels[1].Text := EOleException.ClassName;
               { If Exception.message = 'Erreur OLE 800AC472' then begin
                  MonClasseur.Close(Unassigned,Unassigned,Unassigned,1);
                  ExcelApplication1.Disconnect;                 // Déconnexion d'Excel
                  ExcelApplication1.Quit;                       // Fermeture d'Excel
                end;
                }
              end;
       end;
    Merci

  2. #2
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par MelkInarian
    1) Pour pouvoir créer un gestionnaire d'Exceptions convenable, quelqu'un pourrait-il me donner la commande de lecture du message d'erreur
    Exception.Message ne semble pas fonctionner dans le cas des Exceptions Ole?
    Tu peux peut être t'inspirer de ceci http://delphi.developpez.com/faq/?pa...s#esterreurwmi

  3. #3
    Membre éprouvé
    Inscrit en
    Janvier 2003
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Janvier 2003
    Messages : 110
    Par défaut
    Voit le code du traitement de l'exception, je pense que tu oublies la déclaration de la variable "E :".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
      try
      .
      .
      .
      except
        on E : EOleException do //il faut que tu affectes une variable à ton exception
        begin
          //ton traitement de l'exception
        end;
      end;

  4. #4
    Membre éprouvé
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Par défaut
    Salut

    Je vois que tu sauves ton documents avec

    Attention,

    Si tu ouvres ton classeur avec un nom, il faut faire un Save pour le sauver sous le meme nom, ou un SaveAs pour le sauver sous un autre nom.
    Si tu ouvres ton classeur sans nom, le SaveAs ne pose pas de problème.

    Là, visiblement, tu ouvres avec un certain nom, et tu fais un SaveAs avec le même nom -> l'erreur que tu as est normale.
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  5. #5
    Membre éclairé Avatar de MelkInarian
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Par défaut
    Effectivement je tente de sauver avec SaveAs, mais c'est un essai. En effet, avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonClasseur.Save(0);      // Enregistre le fichier Base
    J'avais aussi un problème (qui ne s'est pas résolu d'ailleurs) de sauvegarde qui ne s'effectuait tout simplement pas.
    J'ai donc tenté plusieurs solutions voir ci dessous, mais aucune ne fonctionne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     MonClasseur.SaveAs(FBaseT,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,xlNoChange,EmptyParam,EmptyParam,EmptyParam, EmptyParam,0);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonClasseur.Close(False,FBaseT,Unassigned,0);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonClasseur.SaveCopyAs(FBaseT,0);
    Si j'essaie de sauvegarder ce classeur, rien à faire par contre si je copie les données dans un autre classeur, il se sauvegarde bien avec SaveAs.
    Et comme sous Excel on peut bien "enregistrer sous" en gardant le même nom de classeur il suffit de valider dans la boite de dialogue qui s'ouvre.
    Dans le cas de mon appli, j'ai pris le soins de rajouter:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ExcelApplication1.DisplayAlerts[0] := False;  // pas de message d'alerte
    ... //mon code
    ExcelApplication1.DisplayAlerts[0] := True;   // messages d'alerte rétablis
    Je vais maintenant tester avec les infos données par Laurent Dardenne pour mon Gestionnaire d'Exceptions, cela me permettra peut-être de comprendre où j'ai fais la boulette.

  6. #6
    Membre éclairé Avatar de MelkInarian
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Par défaut
    Citation Envoyé par pinson
    Voit le code du traitement de l'exception, je pense que tu oublies la déclaration de la variable "E :".
    Bien sûr, tu as raison Pinson, j'ai oublié le E:
    Merci
    Je n'ai plus quà continuer pour trouver LA BOULETTE qui m'empêche de sauvegarder!
    à+
    J'ai beau me creuser les méninges, je ne trouve pas ce qui empêche l'écriture sur disque du fichier modifié.
    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
     Try
        ExcelApplication1.Connect;                        // Connection à Excel
              MonClasseur:=ExcelApplication1.Workbooks.Open(FBaseT, False, False, EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
                EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,0);
        ExcelApplication1.Visible[0]:=False;         // Excel est invisible
        MaFeuille:=MonClasseur.Worksheets[1] as _worksheet;
       ...
        MaFeuille.Range[Ann,Ann].Value := Af.Numr;  // A: N° d'affaire
        MaFeuille.Range[Bnn,Bnn].Value := Af.Libl;  // B: Libellé
        MaFeuille.Range[Cnn,Cnn].Value := Af.Adrs;  // C: Adresse
        MaFeuille.Range[Dnn,Dnn].Value := Af.Comm;  // D: Commune
        MaFeuille.Range[Enn,Enn].Value := Af.Inse;  // E: INSEE
        MaFeuille.Range[Fnn,Fnn].Value := Af.ChAf;  // F: Chargé d'affaires
        MaFeuille.Range[Gnn,Gnn].Value := Af.DMEO;  // G: Date de DMEO
        MaFeuille.Range[Hnn,Hnn].Value := Af.PMEO;  // H: Date de PMEO
       ...
        MonClasseur.Save(0);                        // Enregistre le fichier Base
        Sleep(3000);                                // attend 3000 ms pour laisser du temps à Excel (au cas où...
         IF not MonClasseur.Saved[0] then
                MonClasseur.Save(0);           // Enregistre le fichier Base ( encore au cas où... mais en débug cette instruction n'est jamais exécutée
     
        ExcelApplication1.Disconnect;                 // Déconnexion d'Excel
        ExcelApplication1.DisplayAlerts[0] := True;   // messages d'alerte rétablis
        ExcelApplication1.Quit;                       // Fermeture d'Excel
     
      except
       on E : EOleException do // exception
          begin
             ...
          end;
       end;
    Quelqu'un voit-il ce qui cloche?

    Merci

  7. #7
    Membre éclairé Avatar de MelkInarian
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Par défaut
    J'ai beau me creuser les méninges, je ne trouve pas ce qui empêche l'écriture sur disque du fichier modifié.

    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
     Try
        ExcelApplication1.Connect;                        // Connection à Excel
              MonClasseur:=ExcelApplication1.Workbooks.Open(FBaseT, False, False, EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
                EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,0);
        ExcelApplication1.Visible[0]:=False;         // Excel est invisible
        MaFeuille:=MonClasseur.Worksheets[1] as _worksheet;
       ...
        MaFeuille.Range[Ann,Ann].Value := Af.Numr;  // A: N° d'affaire
        MaFeuille.Range[Bnn,Bnn].Value := Af.Libl;  // B: Libellé
        MaFeuille.Range[Cnn,Cnn].Value := Af.Adrs;  // C: Adresse
        MaFeuille.Range[Dnn,Dnn].Value := Af.Comm;  // D: Commune
        MaFeuille.Range[Enn,Enn].Value := Af.Inse;  // E: INSEE
        MaFeuille.Range[Fnn,Fnn].Value := Af.ChAf;  // F: Chargé d'affaires
        MaFeuille.Range[Gnn,Gnn].Value := Af.DMEO;  // G: Date de DMEO
        MaFeuille.Range[Hnn,Hnn].Value := Af.PMEO;  // H: Date de PMEO
       ...
        MonClasseur.Save(0);                        // Enregistre le fichier Base
        Sleep(3000);                                // attend 3000 ms pour laisser du temps à Excel (au cas où...
         IF not MonClasseur.Saved[0] then
                MonClasseur.Save(0);           // Enregistre le fichier Base ( encore au cas où... mais en débug cette instruction n'est jamais exécutée
     
        ExcelApplication1.Disconnect;                 // Déconnexion d'Excel
        ExcelApplication1.DisplayAlerts[0] := True;   // messages d'alerte rétablis
        ExcelApplication1.Quit;                       // Fermeture d'Excel
     
      except
       on E : EOleException do // exception
          begin
             ...
          end;
       end;
    Quelqu'un voit-il ce qui cloche?

    Merci

  8. #8
    Membre éprouvé
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ExcelApplication.Disconnect
    est à effectuer complétement à la fin non ?
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

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

Discussions similaires

  1. delphi 3 - excel
    Par wilfried_42 dans le forum Delphi
    Réponses: 5
    Dernier message: 19/11/2006, 03h15
  2. Delphi et Excel
    Par defluc dans le forum Delphi
    Réponses: 1
    Dernier message: 04/09/2006, 17h19
  3. Réponses: 6
    Dernier message: 28/07/2006, 10h07
  4. Delphi et Excel : Lenteur sur un Insert
    Par defluc dans le forum Delphi
    Réponses: 1
    Dernier message: 30/05/2006, 07h49
  5. [win32] delphi importation excel
    Par pier dans le forum Bases de données
    Réponses: 2
    Dernier message: 09/09/2005, 15h27

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