Exporter un dataset dans une feuille de calcul openoffice

Soyez le premier à donner votre avis sur cette source.

Vue 10 074 fois - Téléchargée 1 362 fois

Description

Une petite routine sans prétention qui permet d'exporter un TTable, un TQuery, un TClientDataset ou autre chose vers une nouvelle feuille de calcul OpenOffice.
J'ai regroupé les routines dans un objet et ajouté quelques propriétés pour le formatage des cellules. Intéressant : utilisation d'une fonction de rappel pour formater les cellules depuis l'application. Je dois encore compléter les routines de formatage (encadrement, rotation de texte, ...), mais je n'ai pas trop de temps car mon restaurant est prioritaire.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
29
Pense aussi à mettre à jour l'unité DriveOOCalc.pas.

Petite remarque :
dans DriveOOCalc.pa, tu écris :
OpenOfficeDesktop :=
Instance.createInstance('com.sun.star.frame.Desktop');

Il serait plus judicieux d'utiliser les constantes que tu as déclaré dans la partie interface (d'ailleurs, est-bien leur place d'être exposées ?) en écrivant :
OpenOfficeDesktop :=
Instance.createInstance(CS_DESKTOP);

C'est un très bon travail que tu as fait là et merci de le partager avec cette communauté.
Messages postés
302
Date d'inscription
jeudi 29 septembre 2005
Statut
Membre
Dernière intervention
17 septembre 2013
1
Bonjour DelphiProg,
merci pour le commentaire. Il y a sûrement moyen d'écrire cela d'une manière plus efficace. Le problème est que je suis restaurateur, passionné de programmation, si si c'est compatible... Je n'ai pas vraiment le temps d'affiner mes programmes. J'ai écrit mon programme de gestion du restaurant sur une base interbase, et je veux ne plus avoir à utiliser m$office, pas envie de payer.
Pour compléter un peu, voici le code pour créer soit un document nouveau, soit un document à partir d'un modèle :

const
  CS_OPENOFFICE = 'com.sun.star.ServiceManager';
  CS_DESKTOP    = 'com.sun.star.frame.Desktop';
  CS_TABLEUR    = 'private:factory/scalc';
  CS_BLANK      = '_blank';
  CS_EDITEUR    = 'private:factory/swriter';

//swriter pour le traitement de texte.
//scalc pour le tableur
//sdraw pour l'éditeur de dessin
//simpress pour l'éditeur de présentation (équivalent de PowerPoint)
//smath pour l'éditeur de formule mathématique
//swriter/Global Document document maitre
//swriter/web Pour l'éditeur HTML

procedure CreerNouveauDocOO(var NouveauClasseur: Variant; var Instance: variant;
                              s_type: string; s_modele: string = '' );
const
  pr= 'file:///';
begin
  { document vide de type indiqué }
  if Length(s_modele) = 0 then
  begin
    NouveauClasseur := CreeDesktopOO(Instance).LoadComponentFromURL(s_type, CS_BLANK, 0, VarArrayCreate([0, -1], varVariant));
  end
  else
  begin
    if FileExists(s_modele) then
    begin
      OOoTools.OpenOffice := Instance;
      { OpenOffice gère les chemins de fichier sous la forme d'URL, il faut donc transformer les chemins de type c:\rep\toto.pas en file:///rep/toto.pas }
      NouveauClasseur := CreeDesktopOO(Instance).LoadComponentFromURL(pr+StringReplace(s_modele , '\', '/',[rfReplaceAll]),
                                  CS_BLANK, 0,
                                  VarArrayOf([MakePropertyValue('AsTemplate', True)]));
    end
    else
      Exception.CreateFmt('Le modèle de fichier %s n''existe pas.', [s_modele]);
  end;
end;
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
29
Voici un code innovant (ça nous change de l'éternel Microsoft Excel),réutilisable et plutôt bien écrit.
N'y avait-il pas d'autres moyens que d'utiliser des variants forts gourmands en mémoire ?
La suite Open Office n'expose-t-elle pas un certain nombre d'interfaces ?

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.