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 :

Question sur le pilotage d'excel à partir de Delphi


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2012
    Messages : 107
    Par défaut Question sur le pilotage d'excel à partir de Delphi
    Bonsoir à tous !

    j'essaye depuis quelques jours de comprendre comment manipuler les fichiers excel
    depuis une application Delphi, là j'arrive à la recherche, et je trouve des exemples que j'essaye
    d’exécuter:
    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
    Var MonClasseur : _workbook; 
        MaFeuille :_Worksheet; 
        rMaPlage : ExcelRange; 
        Adresse : wideString; 
    begin 
      ExcelApplication1.Connect; 
      MonClasseur:=ExcelApplication1.Workbooks.Open('c:\tutoriel\tuto.xls',False,False, 
            EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam, 
            EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,0); 
      ExcelApplication1.Visible[0]:=true; 
      MaFeuille:=MonClasseur.Worksheets[1] as _worksheet; 
      rMaPlage:=MaFeuille.Cells.Find('toto',EmptyParam,xlValues,xlPart, 
                   xlByRows,xlNext,EmptyParam,EmptyParam); 
      if not (rMaPlage = nil) then 
      begin 
        Adresse:=rMaPlage.Address[true,true,xlR1C1,false,false]; 
        showmessage(adresse); 
        repeat 
          rMaPlage:=MaFeuille.Cells.FindNext(rMaPlage); 
          showmessage(adresse); 
        Until (rMaPlage = nil) or (Adresse=rMaPlage.Address[true,true,xlR1C1,false,false]) 
      end; 
    end;
    ce que je n'arrive pas à comprendre c'est : "_worksheet", "_workbook"
    d’après la syntaxe ce sont des types de données, mais le compilateur ne les reconnait pas.
    j'aimerai avoir des Clarification sur ce point.

    Merci.

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 638
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 638
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    AMHA vous avez repris le code d'un endroit quelconque mais pas en entier (peut être un fichier de déclaration manquant).
    _workheet et _workbook sont certainement déclarés comme Variant quelque part. Les unités ComObj et Variants seront peut être aussi nécessaire dans la liste des uses

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2012
    Messages : 107
    Par défaut
    Merci SergioMaster,
    voilà d'ou j'ai eu ce code:
    https://delphi.developpez.com/faq/?p...che-dans-Excel
    comme ça vous allez mieux comprendre

  4. #4
    Membre Expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 516
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 516
    Par défaut
    Bonjour,
    sans utiliser TExcelApplication, comme dans la FAQ, tu peux faire :

    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    Uses ComObj ;
    ...
    procedure TForm1.Btn_ExcelClick(Sender: TObject);
    Const
      xlValues = -4163 ;
      xlPart = 2 ;
      xlByRows = 1 ;
      xlNext = 1 ;
      xlR1C1 = -4150 ;
      xlA1   = 1 ;
    var
      vMSExcel : variant;
      vXLWorkbooks, vXLWorkbook : variant;
      aFileName : AnsiString;
      vSaveChanges : variant;
      aSheetName : AnsiString;
      vWorksheet : variant;
      aRange : Variant ;
      vCell : variant;
      Adresse : WideString ;
     
    begin
      // Ouverture d'Excel
      try
        vMSExcel := GetActiveOleObject('Excel.Application');
      except
        vMSExcel := CreateOleObject('Excel.Application') ;
      end;
     
      // Ouverture du classeur
      aFileName := ExtractFilePath(Application.ExeName)+ 'Classeur1.xls' ;
      vXLWorkbooks := vMSExcel.Workbooks ;
      vXLWorkbook := vXLWorkbooks.Open(aFileName) ;
      // Ouverture de la feuille du classeur
      aSheetName := 'Feuil1';
      vWorksheet := vXLWorkbook.WorkSheets[aSheetName];
     
      aRange := vWorksheet.Cells.Find('toto',EmptyParam,xlValues,xlPart,
                  xlByRows,xlNext,EmptyParam,EmptyParam);
     
      Adresse:=aRange.Address[true,true,xlA1,false,false];
      Showmessage(adresse);
      vMSExcel.Visible := true ;
      ShowMessage('Fermeture d''Excel');
     
      vXLWorkbook.Save ;  // Sauvegarde des modifications
      vSaveChanges := False;  // Unassigned : demande à l'utilisateur
      vXLWorkbook.Close(vSaveChanges, aFileName);
     
      //  Fermeture d'Excel
      vMSExcel.Quit ;
      vMSExcel := unassigned ;
     
    end;
    A+

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2012
    Messages : 107
    Par défaut
    Merci pr ta réponse Charly910
    l'intégralité du code est bien compilée,
    en revanche, la fonction EXTRACTFILEPATH n'a pas bien fonctionné:
    "Fichier excel introuvable";

    donc j'ai effectué quelques modifications (concernant l'ouverture du classeur);
    en se basant sur des exemples précédents dans la F.A.Q:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      vMSExcel.Visible  := False;
      vXLWorkbooks := vMSExcel.vXLWorkbooks;
      afilename := 'C:\Users\Youcef\Desktop\classeur1.xlsx';
      vXLWorkbooks := vMSExcel.Workbooks ;
      vXLWorkbook := vXLWorkbooks.Open(aFileName);
    tout est bien compilé, mais quand j’exécute le programme (clic sur le bouton),
    j'obtiens l'erreur:
    "Méthode 'vXLWorkbooks' non supportée par l'objet Automation"

    Qu'est ce qu'il faut rectifier ?

  6. #6
    Membre Expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 516
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 516
    Par défaut
    Bonjour,
    ExtractFilePath est dans l'unité SysUtils (au moins à partir de D7)

    A+
    Charly

Discussions similaires

  1. Pilotage OLE d'Excel à partir de Delphi
    Par patrickbruneau dans le forum Delphi
    Réponses: 1
    Dernier message: 29/08/2006, 14h51
  2. 3 questions sur l’importation de fichier Excel
    Par helenafr dans le forum Access
    Réponses: 5
    Dernier message: 05/04/2006, 07h38
  3. Question sur Visual C++ et excel
    Par Super seb dans le forum MFC
    Réponses: 3
    Dernier message: 07/09/2005, 17h02
  4. [VB.NET] Question sur le pilotage d'Excel
    Par alfprod dans le forum Windows Forms
    Réponses: 4
    Dernier message: 20/10/2004, 15h15
  5. pilotage d'excel à partir de VC++
    Par oliv dans le forum MFC
    Réponses: 3
    Dernier message: 05/02/2004, 18h31

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