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

Composants VCL Delphi Discussion :

Insertion image JPG TExcelApplication


Sujet :

Composants VCL Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 131
    Points : 51
    Points
    51
    Par défaut Insertion image JPG TExcelApplication
    Bonjour,

    J'essaie tant bien que mal d'insérer des images dans une cellule d'un fichier excel mais je n'arrive pas à utiliser le composant TExcelApplication.
    A partir d'une image JPG sur le disque dur, je souhaiterai l'insérer dans une cellule avec cadrage dans la cellule.

    Ca fait 1 semaine que j'essaie en vain.
    Quelqu'un pourrait-il m'aider ?

    J'utilise CodeGear 2007 et Microsoft Office excel 2007

    Merci d'avance :-)

  2. #2
    Membre du Club Avatar de fredfred
    Inscrit en
    Septembre 2002
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 161
    Points : 54
    Points
    54
    Par défaut Déterrage !
    Bonjour,

    Je remets ce sujet à l'ordre du jour, car j'ai la même problématique.

    D7 + TExcelApplication, et pas moyen de trouver une syntaxe fonctionnelle pour insérer un fichier JPG dans une cellule Excel.

    Quelqu'un a t'il une solution ?

    Merci
    Postes Dév : W7 SP1 / Windev 21 / Delphi 7 Entreprise
    Serveur : W2k12 SP1 + SQL 2014 RC2
    Connexion : OLE.DB

  3. #3
    Membre expérimenté
    Avatar de retwas
    Homme Profil pro
    Développeur Java/Delphi
    Inscrit en
    Mars 2010
    Messages
    698
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Java/Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 698
    Points : 1 608
    Points
    1 608
    Billets dans le blog
    4
    Par défaut
    Tu peux utiliser le ActiveSheet.Pictures.Insert ou ActiveSheet.Shapes.AddPicture.

    Il existe aussi la solution du "copier-coller".

    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
    procedure TFormExcel.AddPictureToMyCell;
    var
      Bitmap: TBitmap;
      Excel: TExcelApplication;
      Worksheet: TExcelWorksheet;
    begin
      Bitmap:= TBitmap.Create;
      try
        Bitmap.LoadFromFile('c:\test.bmp');
        Clipboard.Assign(Bitmap);
        Excel:= TExcelApplication.Create(self);
        Worksheet:= Excel.Worksheets[0];
        Worksheet.Range['a1','a1'].Select;
        Worksheet.Paste;
      finally
        Bitmap.Free;
      end;
    end;

  4. #4
    Membre du Club Avatar de fredfred
    Inscrit en
    Septembre 2002
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 161
    Points : 54
    Points
    54
    Par défaut
    Merci pour la réponse rapide.

    Alors, j'ai essayé tes différentes syntaxes :
    Avec SheetSource.Pictures.Insert, j'ai une erreur "pas assez de paramètres originaux".
    Avec le coup du clipboard, la ligne Worksheet.Paste me dit aussi "pas assez de paramètres originaux".

    J'ai finalement trouvé une syntaxe qui fonctionne avec Shapes.AddPicture.

    du coup, voici ma procédure d'insertion complète, si ça peut aider d'autres dévs
    C'est une procédure interne, certains paramètres comme le n° de ligne, le chemin ou le nom de l'image sont définis dans la procédure mère, mais ça doit être compréhensible.





    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
     
    procedure Ajout_Vignette(PCol :integer);
        var
           vMSLeft, vMSTop, vMSWidth, vMSHeight :integer;
           Pict  :TPicture;
        begin
            // Ajout des vignettes
            Fic_Vign := Rep_Vignette.Text + '\' +Code_Art + '.jpg';
     
            if FileExists(Fic_Vign) then
            begin
     
              Pict := TPicture.Create;
              try
                // Récupère les dimensions de l'image
                Pict.LoadFromFile(Fic_Vign);
     
                // Redimensionne proportionellement l'image
                vMSHeight:=Round(Max_Height.Value);
                vMSWidth := Round(Pict.Width * (vMSHeight / Pict.Height));
              finally
                if Assigned(Pict) then
                  Pict.Free;
              end;
     
              // Position de l'image par rapport à la cellule
              vMSLeft:=SheetSource.cells.item[ligne, PCol].Left + 3;
              vMSTop:=SheetSource.cells.item[ligne, PCol].top + 3;
     
              // Ajout des images avec insertion dans le fichier xls final
              SheetSource.Shapes.AddPicture(Fic_Vign, msoFalse, msoTrue, vMSLeft, vMSTop, vMSWidth, vMSHeight);    // uses officexp
     
              // Agrandi la hauteur de ligne en fonction de l'image
              SheetSource.cells.item[ligne, PCol].EntireRow.RowHeight:=vMSHeight + 6;
     
            end;
        end;
    Postes Dév : W7 SP1 / Windev 21 / Delphi 7 Entreprise
    Serveur : W2k12 SP1 + SQL 2014 RC2
    Connexion : OLE.DB

  5. #5
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 345
    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 345
    Points : 3 123
    Points
    3 123
    Par défaut
    Bonjour,

    sinon pour copier un jpeg en passant par le presse papier dans une cellule donné, tu peux faire cela :


    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
    // avec uses :  Variants, Graphics, ComObj, jpeg
     
    procedure TF_Princ.Button1Click(Sender: TObject);
    var
      Bitmap: TBitmap;
      Picture: TPicture;   // Pour charger un Jpeg
      vMSExcel : variant;
      vXLWorkbook, vXLWorkbooks : variant; // Classeur
      aFeuille : AnsiString; // nom de la Feuille
      vWorksheet : variant; // Feuille
    begin
      // Chargement du Jpeg dans le presse papier
      Bitmap:= TBitmap.Create;
      try
        Picture := TPicture.Create;
        try
          Picture.LoadFromFile('D:\DESSIN\Charly.jpg');
          Bitmap.Width := Picture.Width;
          Bitmap.Height := Picture.Height;
          Bitmap.Canvas.Draw(0, 0, Picture.Graphic);
          Clipboard.Assign(Bitmap);
        finally
          Picture.Free;
        End ;
      finally
        Bitmap.Free;
      end;
    // On test si excel est présent
      if ApplicationInstalled('Excel.Application',HKEY_CLASSES_ROOT) then
         Begin
         // Ouverture Excel
           vMSExcel := CreateOleObject('Excel.Application');
           vMSExcel.Visible := False;
         // Création d'un nouveau classeur
           vXLWorkbooks := vMSExcel.Workbooks;
           vXLWorkbook := vXLWorkbooks.Add;
         // 1ère feuille de calcul du classeur
           aFeuille := 'Feuil1';
           vWorksheet := vXLWorkbook.WorkSheets[aFeuille];
           vWorksheet.Range['a1','a1'].Select;
           // Copie de l'image
           vWorksheet.Paste;
           vMSExcel.Visible := true;
           vMSExcel := unassigned;
         End
      else
         Begin
           MessageDlg('Excel n''est pas installé sur ce poste.', mtError, [mbOk], 0);
         end;
      End ;
    A+
    Charly

Discussions similaires

  1. Insertion d'images jpg et pdf
    Par romanticide dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 2
    Dernier message: 05/05/2011, 09h34
  2. Réponses: 3
    Dernier message: 01/10/2010, 17h24
  3. Insertion images jpg toutes palottes
    Par bigbernie dans le forum Word
    Réponses: 4
    Dernier message: 03/08/2009, 07h40
  4. insertion d'images jpg
    Par neutrinos_2006 dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 5
    Dernier message: 20/03/2009, 11h56
  5. [HTML Dialog] insertion d image jpg ou css en ressource
    Par venomelektro dans le forum MFC
    Réponses: 2
    Dernier message: 30/10/2006, 11h35

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