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 :

Insérer une formule dans un tableau Open Office


Sujet :

Delphi

  1. #1
    Membre confirmé
    Avatar de JP.NUAGE
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    769
    Détails du profil
    Informations personnelles :
    Âge : 81
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 769
    Points : 542
    Points
    542
    Par défaut Insérer une formule dans un tableau Open Office
    Bonjour à tous

    A priori,insérer une formule ne devrait pas poser de problèmes et pourtant .....

    Voici ce que j'ai écrit après avoir consulté la doc Delphi sur ce forum.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Cellule := Mafeuille.getCellByPosition(5, Num_Ligne+2);
       Cellule.SetFormula('=SOMME(F3:F'+IntToStr(Num_Ligne)+')');
    Vous remarquerez que SOMME est écrite en MAJUSCULES (je ne crie pas : c'est juste pour la suite)

    Tout se déroule correctement, mais voici ce que je vois dans la cellule :

    Peu importe le F45, là n'est pas la question. La question est : pourquoi SOMME est devenu somme, alors que les F sont restés en majuscules ?
    Mieux : en éditant la cellule, je vois, bien sûr, le même texte, mais si je positionne le curseur juste avant le signe = et que je fais comme si j'effaçais un caractère et qu'ensuite je valide, la somme se calcule. Bien évidemment, avant de venir ici j'ai contrôlé que dans mon texte je n'aurais pas collé un espace. Ben non !

    Est-ce Delphi ou est-ce Open Office ..... ou moi ?
    Ce qui se conçoit bien s'énonce clairement
    Et les mots pour le dire viennent aisément (Boileau)

  2. #2
    Membre confirmé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2006
    Messages : 569
    Points : 484
    Points
    484
    Par défaut
    Bonjour JP.NUAGE,

    C'est vraiment le genre de truc que je ferai jamais, mais pour répondre à ton souci et après avoir lu et testé la doc
    je pense que le mot "SOMME" ne doit pas être indiqué dans la formule même s'il existe dans la liste des fonctions.
    essaie et dis-moi
    @+

  3. #3
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 669
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 669
    Points : 5 238
    Points
    5 238
    Par défaut
    A tout hasard, tu as essayé de mettre la formule en anglais dans Delphi ?

  4. #4
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 037
    Points : 40 943
    Points
    40 943
    Billets dans le blog
    62
    Par défaut
    Bonsoir,
    Grillé par popo ! moi aussi j'aurais plutôt mis '=SUM(F3..FF'+IntToStr(Num_Ligne)+')' et même serais-je passé par une variable locale par précaution

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    var maFormule : String;
    ...
    Cellule := Mafeuille.getCellByPosition(5, Num_Ligne+2);
    maFormule:=Format('=SUM(F3:F%d)',[Num_Ligne]);
    Cellule.SetFormula(maFormule);
    allez, il n'est pas dit que je ne ferais pas un petit programme test ce week end,
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #5
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 037
    Points : 40 943
    Points
    40 943
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    Citation Envoyé par SergioMaster Voir le message
    allez, il n'est pas dit que je ne ferais pas un petit programme test ce week end,
    Voiloù, en attendant que ma mise à jour de Tokyo s'installe sur mon poste principal , je viens de jouer avec mon poste "secondaire" Vista+D7

    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
    55
    56
    57
    58
    59
    60
    61
     
    procedure TForm1.Button1Click(Sender: TObject);
    var xNum_Feuille : integer;
        xl : string;
        i : integer;
    begin
       if (VarIsEmpty(OpenOffice) or VarIsNull(OpenOffice)) then
          OpenOffice:=CreateOleObject('com.sun.star.ServiceManager');
       if not(VarIsEmpty(OpenOffice) or VarIsNull(OpenOffice)) then
          begin
             if (VarIsEmpty(Bureau) or VarIsNull(Bureau)) then
                Bureau:= OpenOffice.CreateInstance('com.sun.star.frame.Desktop');
          end;
       if (VarIsEmpty(Bureau) or VarIsNull(Bureau)) then
          begin
             MessageDlg('Le service Open Office n''est pas ouvert',mtError,[mbOk],0);
             Exit;
          end;
     
       OpenDesktop := OpenOffice.createInstance('com.sun.star.frame.Desktop');
       properties:=VarArrayCreate([0,0],varVariant);
       CoreServ:= OpenOffice.CreateInstance('com.sun.star.reflection.CoreReflection');
       CoreServ.forName('com.sun.star.beans.PropertyValue').CreateObject(prop);
       prop.name:='Hidden';
       prop.Value:=True;  // ca cache pas la feuille mais openoffice
       properties[0]:=prop;
       Document := openDesktop.LoadComponentFromURL( 'private:factory/scalc', '_blank', 0,  properties);
     
        xNum_Feuille := 1;
     
        MonClasseur := Document.getSheets;
        xl := 'Feuille' + InttoStr(xNum_Feuille);
        MaFeuille := MonClasseur.GetByName(xL);    //'Feuille1'
     
       try
         Cellule := Mafeuille.getCellByPosition(0, 1);
         Cellule.SetValue(1);
         Cellule := Mafeuille.getCellByPosition(1, 1);
         Cellule.SetValue(2);
         Cellule := Mafeuille.getCellByPosition(2, 1);
         Cellule.SetValue(3);
         Cellule := Mafeuille.getCellByPosition(3, 1);
         Cellule.SetValue(4);
         Cellule := Mafeuille.getCellByPosition(4, 1);
         Cellule.SetValue(5);
     
         Cellule := Mafeuille.getCellByPosition(5, 1);
         Cellule.SetFormula('=A2+B2+C2+D2+E2');  // ok
     
         Cellule := Mafeuille.getCellByPosition(6, 1);
         Cellule.SetFormula('=SUM(A2:E2)');   // ok
     
         Cellule := Mafeuille.getCellByPosition(7, 1);
         Cellule.SetFormula('=SOMME(A2:E2)');             // #NOM? donc SOMME fonctionne pas  cellule transformée en =somme(A2:E2) :koi:
     
        except
         Showmessage('Erreur unknown');
        end;
       document.storeAsUrl('file:///c:/BAD/TESTS.ods', VarArrayCreate([0, -1], varVariant));
       Document.dispose;
    end;
    voici une capture du résultat
    Nom : CapturerODS.PNG
Affichages : 171
Taille : 34,6 Ko
    Le mieux est donc bien d'utiliser la formule en langue de base.
    Sauf peut être à changer cette langue par défaut (CharLocale).
    Comme je me souvenais de l'utilisation de cette technique pour mettre un date dans une cellule je suis retourné sur la FAQ que j'avais écrite à ma grande honte, c'était une de mes premières, celle-ci n'est pas terrible
    Après test, de ce changement : même comportement
    Pourtant la piste est bonne ce qu'un peu de recherche supplémentaire dans les API de Open Office m'a permis de trouver


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
         Cellule := Mafeuille.getCellByPosition(7, 1);
         Cellule.FormulaLocal:='=SOMME(A2:E2)';    // attention, syntaxe différente
    je te laisse tirer la conclusion à la question
    Est-ce Delphi ou est-ce Open Office ..... ou moi ?
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  6. #6
    Membre confirmé
    Avatar de JP.NUAGE
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    769
    Détails du profil
    Informations personnelles :
    Âge : 81
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 769
    Points : 542
    Points
    542
    Par défaut
    à tous et pour répondre à SergioMaster, ma conclusion est :

    ...documentation
    Ce qui se conçoit bien s'énonce clairement
    Et les mots pour le dire viennent aisément (Boileau)

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

Discussions similaires

  1. Insérer une formule dans une cellule Excel via VBA
    Par *.Har(d)t dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/02/2020, 13h02
  2. Réponses: 3
    Dernier message: 06/12/2009, 15h02
  3. Réponses: 1
    Dernier message: 29/07/2008, 22h40
  4. Insérer une formule dans une cellule
    Par sam_XIII dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 05/10/2007, 16h47
  5. Insérer une image dans un tableau
    Par aminos40 dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 2
    Dernier message: 31/05/2007, 08h38

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