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

API, COM et SDKs Delphi Discussion :

Lire les remarques (annotations) dans un tableau xls


Sujet :

API, COM et SDKs Delphi

  1. #1
    Rédacteur/Modérateur

    Lire les remarques (annotations) dans un tableau xls
    Bonsoir,

    Je me suis lancé dans une nouvelle entreprise "hasardeuse" car cela fait déjà un moment que je n'ai plus touché à OpenOffice/Delphi.

    Je voudrais lire une feuille d'un tableau mais surtout certaines colonnes de celui-ci qui contiennent des remarques.
    Déjà que depuis tout à l'heure je galère pour récupérer un entier d'une cellule (getvalue me fourni toujours la valeur formatée avec des zéros non significatifs)
    est-ce que, avant de me lancer dans la lecture des uno.quelquechoses, quelqu'un sait comment faire ?

    P.S. Un coup de main sur la valeur entière ne sera pas de refus non plus un n:=StrToInt(worksheet.getCellByPosition(0, i).GetString);
    fonctionne mais je pensais que n:=worksheet.getCellByPosition(0, i).GetValue l'aurait fait. Pourtant j'ai toujours 0
    du coup j'ai un doute, je dois aussi lire le résultat d'une formule

    je n'ai plus les yeux en face des trous
    P.P.S RIO, programme VCL
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein

    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio) et peut être quelques autres
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

  2. #2
    Modérateur

    Bonsoir Serge,

    Ça ne va pas t'aider, mais l'unité FPSpreadsheet de FreePascal est puissante... Mais je crains qu'elle ne soit pas Delphi compatible.
    Delphi 5 Pro - Delphi 10.3.2 Rio Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  3. #3
    Rédacteur/Modérateur

    Bonsoir,

    je suis prêt à tout envisager, même de coder en Lazarus ce truc qui va ne servir qu'une fois ou presque .

    Cela dit, entre temps j'ai plus ou moins trouvé. En utilisant un tableau basique pour mes essais et après une longue apnée dans les doc et FAQ de Libre Office
    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
    procedure TMainForm.btnGoClick(Sender: TObject);
    var i,c,n : Integer;
        cellule,contenu : variant;
        AnnotServ,cellAdress : Variant;
        s : String;
        f : Integer;
        function DerniereLignede(MaFeuille : Variant) : Integer;
        var unCurSeur : variant;
        begin
        unCurseur:=maFeuille.CreateCursor;
        unCurseur.gotoEndOfUsedArea(False);
        result:=unCurseur.RangeAddress.EndRow;
        end;
    
    begin
    Memo2.Clear;
    worksheet:=Document.GetSheets.GetByName(edtFeuille.text);
    if VarIsEmpty(worksheet) or VarIsNull(WorkSheet)
           then  Memo1.Lines.Add(format('Feuille %s inconnue',[edtFeuille.text]))
           else  Memo1.Lines.Add(format('Traitement de %s',[edtFeuille.text]));
    for I := 0 to DerniereLigneDe(WorkSheet) do
     begin
       S:=worksheet.getCellByPosition(0, i).GetValue;
       for c:=0 to 1 do
        begin
          Cellule:=worksheet.getCellByPosition(c, i);
          S:=S+'|'+Cellule.Annotation.GetString;
        end;
       memo2.Lines.Insert(0,S);
    end;
    
    end;

    reste à voir si le tableau que je dois traiter ne va pas me faire des surprises (déjà le getvalue sur ce qui me semblait un nombre était limite !)

    Je songe également à ce que pourrait me proposer TMS et AdvGrid
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein

    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio) et peut être quelques autres
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

  4. #4
    Rédacteur/Modérateur

    Bonjour,

    Pour les annotations, worksheet.getCellByPosition(colonne, ligne).Annotation.GetString à bien résolu ma demande.
    Pour le reste :
    je galère pour récupérer un entier d'une cellule
    eh bien, dans le tableau il y avait une cellule qui était alphanumérique !
    du coup j'ai un doute, je dois aussi lire le résultat d'une formule
    plus de doute, GetString -> le résultat, GetFormula -> la formule

    du coup je ne me sers presque pas de ce GetValue qui me fait tant de misère

    Je songe également à ce que pourrait me proposer TMS et AdvStringGrid
    Je n'ai rien vu concernant les annotations, dommage. je vais peut-être posé la question à TMS juste par curiosité


    Moralité :
    L'utilisation à plusieurs mains des tableaux, je n'ai jamais été fan (c'est bien pour cela que je récupère ce dernier pour mettre tout dans une BDD)
    Quand plusieurs utilisateurs s'y mettent ne jamais croire qu'ils vont respecter les directives mises en place plusieurs remplacements plus tard ... j'ai eu de nombreuses surprises dans le traitement
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein

    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio) et peut être quelques autres
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

  5. #5
    Expert confirmé
    salut

    tu as aussi la commande ".Comment.Text" qui devrais fonctionner
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  6. #6
    Rédacteur/Modérateur

    Méthode 'Comment' non supportée par l'objet Automation
    maintenant, c'est sur la cellule ou sur la feuille ?
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein

    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio) et peut être quelques autres
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

  7. #7
    Expert confirmé
    salut

    la cellule le commentaire c'est le petit onglet rouge que tu peut apercevoir sue une cellule
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag