Précédent   Forum du club des développeurs et IT Pro > Environnements de développement > Delphi > Langage
Langage Tout ce qui concerne le langage (POO, syntaxe, message d'erreur...)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 08/01/2013, 09h57   #1
seremei
Candidat au titre de Membre du Club
 
Homme
Développeur delphi junior
Inscription : février 2012
Messages : 39
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Indre et Loire (Centre)

Informations professionnelles :
Activité : Développeur delphi junior
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2012
Messages : 39
Points : 11
Points : 11
Par défaut Impossible de fermer un classeur Excel

Bonjour,

Je dois pour mon travail traiter un fichier Excel. Mais déjà dès le début je tombe sur une problème que je n'arrive pas à traiter. Lorsque je souhaite fermer un classeur Excel que j'ai ouvert je me retrouve avec un (ou plusieurs) messages d'erreur.

Voici mon code :
Code :
1
2
3
4
5
6
7
8
9
10
ExcelApplication:= CreateOleObject('Excel.Application');
  try
    Classeurs:= ExcelApplication.Workbooks;
    ClasseurA3Conseil:= Classeurs.Open(EditNomFichierExcel.Text);
    ExcelApplication.Visible:= True;
  finally
    Classeurs.Close(False, emptyparam,emptyparam,0);
    ExcelApplication.Quit;
    ExcelApplication:= unassigned;
  end;
A priori cela devrai fonctionner, non ?
Lorsque j'exécute j'ai le message d'erreur suivant :
"Le projet Import à provoqué une classe d'exception EOLESysError avec le message 'Nombre de paramètres non valide'. Processus stoppé."
quand je valide il point sur la ligne
Code :
Classeurs.Close(False, emptyparam,emptyparam,0);
Le close sans argument fonctionne mais normalement je ne dois pas afficher excel puisque je dois seulement récupérer les valeurs dans les cells. Et je souhaite ne pas sauvegarder à la fermeture. J'ai cherché sur le site et le forum je ne vois pas de solution, même avec les réponses sur le forum à des problèmes similaires je me retrouve avec des erreurs.

Quelqu'un aurais une solution ?
seremei est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2013, 10h56   #2
seremei
Candidat au titre de Membre du Club
 
Homme
Développeur delphi junior
Inscription : février 2012
Messages : 39
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Indre et Loire (Centre)

Informations professionnelles :
Activité : Développeur delphi junior
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2012
Messages : 39
Points : 11
Points : 11
J'ai finalement réussi à trouver une solution.

Code :
1
2
3
4
5
6
7
8
9
10
11
ExcelApplication:= CreateOleObject('Excel.Application');
  try
    // on ouvre le fichier choisi par l'utilisateur
    Classeur:= ExcelApplication.Workbooks.Open(EditNomFichierExcel.Text, unassigned, True);
    //traitement effectué à venir
  finally
    Classeur.Close(False, 0); // fermeture du classeur
    ExcelApplication.Quit; // fermeture de l'application
    ExcelApplication:= unassigned; // libération de la mémoire
    _MessageDlg('Le traitement à été effectué avec succès', mtInformation, [mbOk], 0);
  end;
Je ne sais pas pourquoi mais il ne fallait que deux paramètres dans le close donc si quelqu'un à une explication je me sentirais moins bête.
seremei est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2013, 11h00   #3
coucoucmoi
Membre régulier
 
Didier
Développeur informatique
Inscription : janvier 2003
Messages : 170
Détails du profil
Informations personnelles :
Nom : Didier
Localisation : France, Pyrénées Atlantiques (Aquitaine)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : janvier 2003
Messages : 170
Points : 70
Points : 70
Bonjour, je viens de faire un test et tu a un peu tout mélangé.
Ce n'est pas ton objet classeurs qu'il faut fermé, mais le classeur ouvert!

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
procedure TForm1.Button1Click(Sender: TObject);
var
  ExcelApplication, Classeurs,ClasseurA3Conseil : Variant;
  vClose : Variant;
begin
  vClose := False;
  ExcelApplication:= CreateOleObject('Excel.Application');
  try
    Classeurs:= ExcelApplication.Workbooks;
    ClasseurA3Conseil:= Classeurs.Open('c:\test.xls');
    ExcelApplication.Visible:= True;
  finally
    ClasseurA3Conseil.Close(vClose,'c:\test.xls');
    ExcelApplication.Quit;
    ExcelApplication:= unassigned;
  end;
end;
coucoucmoi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2013, 11h04   #4
seremei
Candidat au titre de Membre du Club
 
Homme
Développeur delphi junior
Inscription : février 2012
Messages : 39
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Indre et Loire (Centre)

Informations professionnelles :
Activité : Développeur delphi junior
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2012
Messages : 39
Points : 11
Points : 11
Merci coucoucmoi.
Saurais-tu m'expliquer pourquoi il ne faille que deux argument dans le close. Je me suis aidé à la base de http://delphi.developpez.com/faq/?page=excelclasseur
avec
Code :
 MonClasseur.Close(False, emptyparam,emptyparam,0);
du coup cela me générais une erreur.
seremei est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2013, 11h26   #5
coucoucmoi
Membre régulier
 
Didier
Développeur informatique
Inscription : janvier 2003
Messages : 170
Détails du profil
Informations personnelles :
Nom : Didier
Localisation : France, Pyrénées Atlantiques (Aquitaine)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : janvier 2003
Messages : 170
Points : 70
Points : 70
Dans ton lien, classeur est défini en _workbook qui lui, veut plus les arguments.

Toi tu passes par des variant, donc lis plutot ce tuto :
http://lfe.developpez.com/PasExcel/#L1
coucoucmoi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2013, 11h29   #6
seremei
Candidat au titre de Membre du Club
 
Homme
Développeur delphi junior
Inscription : février 2012
Messages : 39
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Indre et Loire (Centre)

Informations professionnelles :
Activité : Développeur delphi junior
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2012
Messages : 39
Points : 11
Points : 11
je l'utilise maintenant mais je ne l'ai trouvé qu'après maintenant ça fonctionne correctement et je peux continuer mon travail.

Merci beaucoup
seremei est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 04h18.


 
 
 
 
Partenaires

Hébergement Web