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

Lazarus Pascal Discussion :

Transfert vers OpenOffice [Lazarus]


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de JP.NUAGE
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    777
    Détails du profil
    Informations personnelles :
    Âge : 83
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 777
    Par défaut Transfert vers OpenOffice
    Bonjour à tous.

    Je fais des transfert de tables de Firebird vers OpenOffice. J'ai deux pb

    1) Si mon en-tête de colonne contient des accents, le résultat dans OpenOffice est des plus incongrus (même en utilisant AnsiToUTF8)

    2) Je n'ai pas trouvé ce qu'il faut mettre après setPropertyValue pour définir le format de la cellule : je voudrais mettre un format Date. Si quelqu'un à un lien je m'y raccroche

    Pour le reste c'est parfait !

    Merci d'avance

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 593
    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 593
    Billets dans le blog
    65
    Par défaut
    toutes les réponses (ou presque) dans un petit programme

    ça vaut bien un petit ?

    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
    122
     
    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;

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 22/01/2008, 11h31
  2. Transfert vers un Sagem
    Par alex6891 dans le forum Développement Mobile en Java
    Réponses: 10
    Dernier message: 27/02/2007, 16h14
  3. transfert vers un serveur tcp
    Par angy_y dans le forum Réseau
    Réponses: 6
    Dernier message: 19/06/2006, 09h25
  4. Transfert vers une table selon condition
    Par Monsieur Peck dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 13/06/2006, 13h34
  5. Porter une macro Excel vers OpenOffice
    Par totofweb dans le forum Applications et environnements graphiques
    Réponses: 3
    Dernier message: 13/07/2004, 13h20

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