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

Outils Delphi Discussion :

Formater une cellule Open Office


Sujet :

Outils Delphi

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 769
    Points : 542
    Points
    542
    Par défaut Formater une cellule Open Office
    Bonjour à tous

    Je ne suis pas sûr d'être sur le bon forum, mais je n'ai pas trouvé mieux.

    Question simple. Je crée un état Open Office à partir d'un programme Delphi. Mon seul soucis est que lorsque je mets des dates dans des cellules, j'obtiens des chiffres (idem pour l'heure). Certes je peux formater ensuite, mais....

    est-il possible de définir un format de cellule (Date en l'occurrence) dans Delphi, comme il est possible de définir un police de caractères ?

    Et peut être où trouver les mots clés à utiliser. J'ai bien trouvé pour Charxxx mais rien sur les formats

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

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 080
    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 080
    Points : 41 029
    Points
    41 029
    Billets dans le blog
    62
    Par défaut
    C'aurait été mieux en API

    est-il possible de définir un format de cellule (Date en l'occurrence)
    Oui
    il faut simplement que je retrouve comment dans un de mes programmes . Je pense que je l'avais indiqué sur le forum , mais je suis sur que ce n'est pas en FAQ
    patience ...
    je ne pense pas que ceci te satisfasse , car pas de possibilité de tri , la valeur est traitée comme une string
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    vcell:=vSheet.getCellByPosition(c,n);
    vCell.setString(FormatDateTime('dd/mm/yyyy',TableUnedate.value));
    je sais que j'ai un code qui le permet , le tout c'est de le (re)trouver j'aurais du le mettre en FAQ dès que j'ai su comment faire , depuis c'est sorti de ma petite tête
    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

  3. #3
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Bonjour,

    Une piste en consultant le doc Appache :
    Formatting Spreadsheet Documents
    Philippe.

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 769
    Points : 542
    Points
    542
    Par défaut
    Merci Ph.B, hélas, aucune des méthodes décrites dans ce que tu m'as envoyé n'est supportée lorsque je les applique dans Delphi. J'avais trouvé cette page. J'ai même essayé de trouver des mots clés en faisant une macro Open Office, mais la correspondance ne donne que des erreurs à l'exécution
    Ce qui se conçoit bien s'énonce clairement
    Et les mots pour le dire viennent aisément (Boileau)

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 080
    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 080
    Points : 41 029
    Points
    41 029
    Billets dans le blog
    62
    Par défaut la réponse
    en fait je t'avais déjà donné cette réponse dans le forum LAZARUS
    ici
    en voici le code

    voir le bloc lignes 90 a 100 et 115-119

    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
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    procedure TForm1.Button1Click(Sender: TObject);
    var OpenOffice, Bureau, Document,Locale,Formats : Variant;
        properties,CoreServ,prop : Variant;
        vSheet,vCell : Variant;
        n,ifdate : Integer;
        WString : String;
        OO_FileName : WideString;
        test : TColumn;
     
       // fonction pour transformer un nom de fichier DOS 
        function FileToURL(F : String) : String;
        var i : Word;
            R : String;
        begin
         R:='file:///'+F;
         // transforme le nom du fichier en adresse URL
         while (Pos('\',R)>0) do    {les \ en /}
         begin
           i:=Pos('\',R);
           Delete(R,i,1);
           Insert('/',R,i);
         end;
         while (Pos(' ',R)>0) do    {les espaces en %20}
           begin
             i:=Pos(' ',R);
             Delete(R,i,1);
             Insert('%20',R,i);
           end;
         result:=R;
        end;
     
    begin
    // Appel du service OpenOffice
    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;
     
    //Voir ou ne pas voir OpenOffice Calc that is the question 
    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:=False;  // ou true  dépendant de votre réponse
    properties[0]:=prop;
     
    // on y arrive enfin !!!!!!!!!!!!!!!!!!!!!!!!!!!
    if FileExists('C:\MESSAROUND\test.ods')
       then
    OO_FileName:=FileToURL('C:\MESSAROUND\test.ods')
       else
    OO_FileName:='private:factory/scalc';
     
    // Ouverture du document
    Document := Bureau.LoadComponentFromURL(OO_filename,
                                              '_blank',
                                               0,
                                              properties);
    if (VarIsEmpty(Document) or VarIsNull(Document)) then
     begin
       MessageDlg('Le fichier n''est pas ouvert',mtError,[mbOk],0);
       Exit;
     end;
     
    //Recherche de la feuille par son nom  
    vSheet:=Document.getSheets.getByName('Feuille1');
    // ou par son index
    //vSheet:=Document.getSheets.getByIndex(0);
    if (VarIsEmpty(vSheet) or VarIsNull(vSheet)) then
     begin
       MessageDlg('La Feuille n''est pas ouverte',mtError,[mbOk],0);
       Exit;
     end;
     
    Locale:=Document.CharLocale;
    {pour changer la Localisation , utilisez ce qui suit }
    {CoreServ.forName('com.sun.star.lang.Locale').createObject(Locale);
    Locale.Country:='FR';
    Locale.Language:='fr';
    Locale.Variant := '';
    }
     
    // ici je récupère un indice pour les cellules dans lequelles je mettrai des dates
    //et comme je ne veut pas de ce bon vieux JJ/MM/AAAA j'en crée un inexistant ?
    Formats:=Document.GetNumberFormats();
    iFDate:=Formats.QueryKey('MMM AAAA JJ',Locale,TRUE);
    if IfDate=-1 then
      begin
        ifDate:=Formats.AddNew('MMM AAAA JJ',Locale);
        if ifDate=-1 then ifDate:=0;
      end;
     
    // pour répondre a la question des accents 
    vcell:=vSheet.getCellByPosition(1,1);  // obtention de la cellule ATTENTION Base 0 
     
    vCell.SetString(UTF8Decode('Testée et approuvée'));
     
    //Mettre un chiffre, rien de bien sorcier
    vcell:=vSheet.getCellByPosition(2,1);
    vCell.Value:=10; 
     
    //Mettre un chaine de caractère variables ATTENTION un WideString
    WString:='0001';
    vcell:=vSheet.getCellByPosition(3,1);
    vCell.SetString(WString);
     
    //Mettre une date 
    vcell:=vSheet.getCellByPosition(5,1);
    vCell.NumberFormat:=ifdate;
    vCell.Value:=now;
     
    // fermer le service (ne ferme pas openOffice si visible)
    OpenOffice:=unAssigned;
    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
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 080
    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 080
    Points : 41 029
    Points
    41 029
    Billets dans le blog
    62
    Par défaut
    Il semblerait que Delphi fasse plus de misère que LAZARUS sur cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Document.GetNumberFormats();
    j'ai une exception
    Citation Envoyé par erreur
    unexpected exception in UnoConversionUtilities<T>::variantToAny
    mais je n'ai aps dit mon dernier mot

    cependant , pour un format a la Française
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    vcell:=vSheet.getCellByPosition(1,1);
    vCell.NumberFormat:=30;
    vCell.Value:=now;
    ceci fonctionne nickel
    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

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 080
    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 080
    Points : 41 029
    Points
    41 029
    Billets dans le blog
    62
    Par défaut ce que peuvent faire 2 parenthèses
    j'ai eu le dernier mot , l'erreur était dans les parenthèses
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Formats : Variant ....
    
    Formats:=Document.GetNumberFormats();
    // en fait il faut écrire
    Format:=Document.GetNumberFormats;
    Sinon UNO attends un variant a l'intérieur des parenthèses , j'avais essayé en mettant une Valeur également :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Format:=Document.GetNumberFormats(2);
    sans succès , car 2 n'etait pas un variant

    en fait la vraie valeur pour un format 'à la française' semble être :
    vCell.NumberFormat:=5030; // et non 30
    comme ce code test le prouve
    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
    procedure TForm2.Button3Click(Sender: TObject);
    var OO_Service,OO_DeskTop,properties,CoreServ,prop,locale,Formats,vSheet,vcell : Variant;
        i : integer;
    begin
      if (VarIsEmpty(OO_Service) or VarIsNull(OO_Service)) then
       OO_Service:=CreateOleObject('com.sun.star.ServiceManager');
      if not(VarIsEmpty(OO_Service) or VarIsNull(OO_Service)) then
      begin
       if (VarIsEmpty(OO_DeskTop) or VarIsNull(OO_DeskTop)) then
              OO_Desktop:= OO_Service.CreateInstance('com.sun.star.frame.Desktop');
       end;
      if (VarIsEmpty(OO_DeskTop) or VarIsNull(OO_DeskTop)) then
       begin
       MessageDlg('Le service Open Office n''est pas ouvert',mtError,[mbOk],0);
       Exit;
       end;
      properties:=VarArrayCreate([0,0],varVariant);
      CoreServ:= OO_Service.CreateInstance('com.sun.star.reflection.CoreReflection');
      CoreServ.forName('com.sun.star.beans.PropertyValue').CreateObject(prop);
      prop.name:='Hidden';
      prop.Value:=True;
      properties[0]:=prop;
      OO_FileName:='private:factory/scalc'; //FileToURL(OpenDialog1.FileName);
      OO_Doc := OO_Desktop.LoadComponentFromURL(OO_FileName,
                                              '_blank',
                                               0,
                                              properties);
      Locale:=oo_Doc.CharLocale;
     
      Formats:=OO_Doc.GetNumberFormats;
      i:=Formats.queryKey('JJ/MM/AAAA', Locale, true);
      if i>-1 then  showmessage('format '+inttostr(i)) else showmessage('non trouvé');
    vSheet:=OO_Doc.getSheets.getByName('Feuille1');
    vcell:=vSheet.getCellByPosition(1,1);
    vCell.NumberFormat:=30;
    vCell.Value:=now;
    //  end;
    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

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

Discussions similaires

  1. [OpenOffice][Tableur] Format cellule Open Office
    Par shaiHulud dans le forum OpenOffice & LibreOffice
    Réponses: 5
    Dernier message: 19/05/2014, 07h35
  2. [SWING] Comment formater une cellule d' une JTable ?
    Par Hamdi Hedhili dans le forum Composants
    Réponses: 6
    Dernier message: 23/12/2008, 14h59
  3. Formater une cellule en VBA pour recevoir une date
    Par *.Har(d)t dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 09/05/2007, 17h39
  4. Comment formater une cellule Excel avce Delphi
    Par LouisFontaine dans le forum Delphi
    Réponses: 3
    Dernier message: 12/01/2007, 22h55
  5. [VBA-E] Formater une cellule en format monétaire
    Par steps5ive dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/07/2006, 15h15

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