sollo
Messages postés1Date d'inscriptionvendredi 5 juillet 2013StatutMembreDernière intervention 5 juillet 2013 5 juil. 2013 à 02:36
thanks very much
ka124b
Messages postés3Date d'inscriptionjeudi 20 décembre 2007StatutMembreDernière intervention 1 décembre 2011 16 avril 2013 à 15:29
merci bq pour cette source,
est ce que vous pouvez m'aider a transferer Excel a des tables interbase (IBTable) Merci .
jolijoli
Messages postés3Date d'inscriptionmercredi 22 octobre 2003StatutMembreDernière intervention20 décembre 2010 20 déc. 2010 à 13:27
Bonjour et merci pour cette source,
je vous propose ci dessous quelques améliorations pour la fonction DB vers Excel
{------------------------------------------------------------------------------}
{Programmeur : Jean-Marc PIRES 23/06/2004 }
{ Exportation de la table sous excel. }
{ Rectifié joliJoli 19/12/2010 }
{ - Extension aux TDataset pour pouvoir exporter une requete SQL }
{ - corrigée la fonction ColExcel (qui ne marche pas au delà de la ligne 52 }
{ - traitement par ligne au lieu de colonne pour améliorer les performances }
{ sur de grandes tables (on ne parcoure la table qu'une seule fois) }
{ - Fourniture d'un nom de fichier par défaut (Nomtable pour les tables, }
{ ou NomComposant pour les requêtes }
{------------------------------------------------------------------------------}
//Définition globale
const
cXLSext = '.xls'; //.xlsx
var RepSaveDbToXls : string;
//procedure ExtractionExcel(TableTemp : TTable; var MemoTemp : TMemo{; var GaugeTemp : TGauge});
procedure ExtractionExcel(TableTemp : TDataset; var MemoTemp : TMemo{; var GaugeTemp : TGauge});
//***********************************************************************
{Permet de retrouver les colonnes AA .. ZZ sous excel}
function ColExcel(Col : Integer) : ShortString;
begin
If Col > 25 then
//Result := format('%d %s', [Col, Chr(64 + Col div 26) + Chr(65 + Col mod 26)])
Result := Chr(64 + Col div 26) + Chr(65 + Col mod 26)
else
//Result := format('%d %s', [Col, Chr(65 + Col)]);
Result := Chr(65 + Col);
end;
//***********************************************************************
begin
{On récupère le nom de la table ou query}
if TableTemp is TTable
then NomTable := Ttable(TableTemp).TableName
else NomTable := TableTemp.Name;
{Création de la boite de sauvegarde}
SaveDialogDb := TSaveDialog.Create(nil);
Try
{Initialisation de la boite de sauvegarde}
SaveDialogDb.Title := 'Sauver le fichier excel';
SaveDialogDb.Filter := 'Fichiers Excel (*.xls)|*.xls';
SaveDialogDb.FileName := changefileext(NomTable, cXLSext);
SaveDialogDb.InitialDir := RepSaveDbToXls;
If SaveDialogDb.Execute then
begin
{Récupération des infos de la boite de sauvegarde et sauvegarde du repertoire dans l'ini}
RepSaveDbToXls := ExtractFilePath(SaveDialogDb.FileName);
//SaveIni;
{On récupère le nom du fichier}
NomFichier := ExtractFileName(SaveDialogDb.FileName);
{Barre de progression + Memo}
//GaugeTemp.Visible := True;
MemoTemp.Lines.Add( 'Extraction de la table dans ' +
RepSaveDbToXls +
NomFichier);
MemoTemp.Update;
{Connection à excel}
Try
{On bloque l'affichage}
TableTemp.DisableControls;
{On lance excel}
{Création du lien OLE pour la classe référencé par Excel dans la base de registre "Excel.Application"}
OleApplication := CreateOleObject('Excel.Application');
{On ouvre le fichier voulu}
OleWorkBook := OleApplication.Workbooks.Add;
{On sélectionne l'onglet dans lequel on va entrer les données}
OleWorkBook.Worksheets.Item['Feuil1'].Activate;
{On colorie la premiere ligne en jaune}
OleApplication.Range['A1:'+ColExcel(TableTemp.FieldCount)+'1'].Interior.ColorIndex := 6;
{On applique les filtres auto}
//OleApplication.Range['A2:'+ColExcel(I-1)+IntToStr(J)].AutoFilter;
{Initialisation de la progressbar}
//GaugeTemp.MaxValue := TableTemp.FieldCount;
//GaugeTemp.Progress := 1;
MemoTemp.Lines.Add( 'Extraction des colonnes');
ndx := MemoTemp.Lines.Count;
MemoTemp.Lines.Add( '');
//définit le format des données par colonnes
For I:= 0 to TableTemp.FieldCount-1 do
begin
//Recherche du type de champ
case TableTemp.Fields.Fields[I].DataType of
FtString : If TableTemp.Fields.Fields[I].Size = 16
then TypeChampAr[I] := 'S'
else TypeChampAr[I] := 'S' + IntToStr(TableTemp.Fields.Fields[I].Size);
FtFloat : TypeChampAr[I] := 'F';
FtInteger : TypeChampAr[I] := 'I';
FtDate : TypeChampAr[I] := 'D';
FtTime : TypeChampAr[I] := 'T';
FtDateTime : TypeChampAr[I] := 'DT';
FtMemo : TypeChampAr[I] := 'M';
//FtGraphic : TypeChamp := 'G';
end;
{Récupération du nom de ce champ}
NomChamp := TableTemp.Fields.Fields[I].FieldName;
ColXls := ColExcel(I);
OleApplication.Cells[1,ColXls].Formula := NomChamp;
//Exporte les données par ligne
Cond := TableTemp.FindFirst;
//Récupération du contenu de ces champs
J := 2;
While Cond do
begin
//On indique l'état d'avancement dans le memo
MemoTemp.Lines[ndx] := Format( 'Extraction de la ligne%d/%d',
[J-1, TableTemp.recordcount]
);
MemoTemp.Update;
for I := 0 to TableTemp.FieldCount-1 do
begin
if TypeChampAr[I] = 'F' then OleApplication.Cells[J,ColExcel(I)].NumberFormat := '0.000';
OleApplication.Cells[J,ColExcel(I)].Formula := TableTemp.Fields.Fields[I].AsString;
end;
{On Réactive les messages d'excel}
OleApplication.DisplayAlerts := True;
Finally
{On rend excel visible}
OleApplication.Visible:=True;
{On réactive les mise à jour de la base}
TableTemp.EnableControls;
{On ferme le lien ole}
{Barre de progression}
//GaugeTemp.Visible := False;
{On confirme la fin de l'extraction et on initialise les boutons du menu}
MemoTemp.Lines.Add('Extraction de la table "' + NomTable + '" terminée.');
end;
end;
Finally
SaveDialogDb.Free; {On libère le mémoire}
end;
end;
merazkaabdennebi
Messages postés4Date d'inscriptionsamedi 5 août 2006StatutMembreDernière intervention10 février 2009 10 févr. 2009 à 09:23
bonjour JMP77
bon merci pour ton application, moi g'ai une application développée par delphi avec une base de donnée access, est ce que ce code va m'aider pour importer et exporter ver ma base access et que ce que je doit modifier comme code merci d'avance.
merazkaabdennebi
Messages postés4Date d'inscriptionsamedi 5 août 2006StatutMembreDernière intervention10 février 2009 10 févr. 2009 à 09:20
bon merci pour ton application, moi g'ai une application développée par delphi avec une base de donnée access, est ce que ce code va m'aider pour importer et exporter ver ma base access et que ce que je doit modifier comme code merci d'avance.
Chipit2001
Messages postés1Date d'inscriptionmardi 11 mai 2004StatutMembreDernière intervention 1 février 2009 1 févr. 2009 à 08:46
Excellent programme qui se compile sans problème sous Delphi 7.
Un petit soucis cependant avec la conversion de champs Date (format Date sous Excel)
Curieusement le champs Fttime est correctement formaté en Excel à l'opposé du champs créé via Ftdate qui se retrouvait en Excel sous forme de String.
Dans DbtoXls après la récupération du type de champs, j'ai ajouté :
if TypeChamp = 'D' then
OleApplication.Cells[J,I].Formula := TableTemp.Fields.Fields[I].AsDateTime
else .... (autre champs en AsString )
Je n'ai évidement pas testé tous les format de cellules sous Excel, mon soucis étant la conversion de champs heures et dates.
Encore merci pour ce source.
merazkaabdennebi
Messages postés4Date d'inscriptionsamedi 5 août 2006StatutMembreDernière intervention10 février 2009 19 janv. 2009 à 11:43
merci amigo gé essayé votre application sa marche très bien merci pour tan effort
cs_Patrice99
Messages postés1221Date d'inscriptionjeudi 23 août 2001StatutMembreDernière intervention 9 septembre 2018 28 sept. 2008 à 12:17
Quelle version de Delphi il faut utiliser pour compiler ce prog ? j'ai essayé avec TurboDelphi4NET_FR.exe mais je n'y arrive pas, merci pour toute aide.
haouarin
Messages postés1Date d'inscriptionsamedi 10 mai 2008StatutMembreDernière intervention 9 juin 2008 9 juin 2008 à 11:11
MERCI
jmp77
Messages postés1119Date d'inscriptionlundi 4 février 2002StatutMembreDernière intervention 4 octobre 20067 30 mai 2008 à 18:23
MERCI, MAIS je peut pas le lire il y a des composant qui ne son't disponible sous delphi 5 aidez mois SVP
bassman100
Messages postés1Date d'inscriptiondimanche 2 janvier 2005StatutMembreDernière intervention27 novembre 2005 27 nov. 2005 à 22:45
Ce prog a l'air super bien fait. Enfin, d'après ce que j'en ai lu parce mon delphi 5 n'en veux pas : form1.designsize, il connait pas(snif).
meznet2003
Messages postés1Date d'inscriptiondimanche 1 juin 2003StatutMembreDernière intervention 1 mai 2005 1 mai 2005 à 23:38
c'est tres pratique ....
merci
DGPat
Messages postés53Date d'inscriptionsamedi 27 mars 2004StatutMembreDernière intervention 1 août 2006 6 janv. 2005 à 13:04
Hello JMP77,
Les grandes idées se rejoignent, justement je suis occupé à me prendre la tête avec les filtres (hé oui encore) mon idée est que je veux que ma table filtre par exemple toutes les factures non réglées a la date d'aujourd'hui,et pas seulement celles qui sont à la date du jour(je sais pas si je suis clair) là ou ton prog de convertion est idéal c'est parce que je récupére des fichiers Excel où il y a des formules qui me mettent une lettre pour les fact en question ces fichiers sont mis à jour journalièrement, le prog que je construit va me permettre de centraliser sur 1 logiciel toutes les données qui me parviennent de tous le monde, ca c'est un exemple car je traite beaucoup de fichiers excel pour diverses taches, petite question comment on fait pour calculer une moyenne de nombre d'un champs de DBGrid
Maintenant je vais devoir retravailler de A à Z mon prog pour qu'il soit compatible avec toi mais ce sera un plaisir, quand je dis que ce que tu as fait est vraiment ce que j'attendais je suis en dessous de la réalité
Si tu veux je te soumettrais mon prog fini pour dire ce que tu pense et éventuellement apporter des améliorations.
Si c'est convenable (en ayant retiré les info confidentielles, pour le moment il n'y a que ca) tu me diras si je peux poster le prog, ca pourra peut être aider d'autres.
Je suis preneur de toutes tes idées,
En mon nom et au nom des autres encore merci car il suffit de surfer sur le forum ou tu dépannes pas mal.
Bonne Journée
DGPat
jmp77
Messages postés1119Date d'inscriptionlundi 4 février 2002StatutMembreDernière intervention 4 octobre 20067 6 janv. 2005 à 10:03
Hello DgPat,
Il est vrai qu'un fichier d'aide ne serait pas du luxe. Alors je vais en préparer un. Cependant il ne sera pas dispo de suite car c'est plus long que de taper le code (lol). Donc je le prépare et si ca te derange pas je te contacterai pour que tu le lises et que tu me dises ce que tu en penses. Comme tu t'es bien pris la tete sur le soft je pense que tu es le plus apte à juger une aide dessus.
Sinon pas de souci quand j'ai une nouvelle source sur les bases de données je t'en ferrai part. D'ailleurs j'en prepare une en ce moment. Cette nouvelle source s'orientra autour des filtres des bases de données. Elle permettra de generer un filtre automatiquement. Si ca t'interesse ??? Ca fait 2 semaines que je promet de la poster mais malheureusement j'ai pas beaucoup de temps en ce moment. Si tu as des questions ou des choses que tu souhaites realiser et que tu as besoin d'aide n'hesite pas.
Enfin en ce qui concerne la réutilisation du code il est là pour ca alors fais toi plaisir. Ca me fait plaisir de savoir que ce code aura pu depanner au moins une personne.
Si tu as d'autres idées d'améliorations pour ce soft je suis preneur.
Bonne journée,
JMP77.
DGPat
Messages postés53Date d'inscriptionsamedi 27 mars 2004StatutMembreDernière intervention 1 août 2006 5 janv. 2005 à 22:04
Bonsoir JMP77,
Ben.... voilà,il ny a plus qu'a l'utiliser,je l'ai essayé je lui ai incorporé 27 champs et 7836 enregistrements de tous les types,rien n'a bronché,il a créé la base paradox et a l'inverse un fichier Excel.
il y a quelques petites astuces dans la préparation de fichier Excel : A savoir ne pas travailler sur la feuille originale mais faire un copier et coller mais seulement les valeurs,pas de formule ca évite les problèmes
Bien que facile d'utilisation,peut être qu'un fichier d'aide sur ton prog aidera ceux qui aurait des difficultés?
Si des utilisateurs ont des difficultés a configurer Excel pour ton prog, tout le monde peut m'envoyer un message, vu que j'ai ramé et essayé beaucoup de soluce il n'a pas de raison de laisser ramer les autres.
Comme tu dois t'en douter je suis sur un prog très volumineux qui fait gestion de stock, facturation et gestion clients et fournisseurs,echéancier etc....
Avec ton autorisation je vais incorporer ton prog, bien entendu je laisse ta boite"a propos" l'honneur te reviens pour le super boulot.
Quand tu crée (surtout en base de données) tu peux m'envoyer un message? je suis preneur.
A plus tard sur le site
DGPat
jmp77
Messages postés1119Date d'inscriptionlundi 4 février 2002StatutMembreDernière intervention 4 octobre 20067 5 janv. 2005 à 11:15
Hello,
C'est ok DgPat je viens de corriger le programme. C'était plutot rapide vu que c'est toi qui a trouver qu'elle était le probleme.
Maintenant quand le programme doit ecrire dans un champ integer, flottant ou datetime il verifie que les données à inserées ne sont pas vide.
N'hesite pas si tu vois d'autres erreurs ou des améliorations éventuelles ce sera avec grand plaisir.
Bonne journée, et bonne conversion,
JMP.
DGPat
Messages postés53Date d'inscriptionsamedi 27 mars 2004StatutMembreDernière intervention 1 août 2006 5 janv. 2005 à 07:42
Hello JMP77,
Je crois avoir trouvé pourquoi, le prog n'accepte pas les autres format chez moi, cela vient que dans le fichier Excel que l'on veut mettre en paradox il ne peut pas avoir de cellules vides autres que celles en String, j'ai essayé en remplissant toutes les cellules qui sont en Date et là aucun prob ca passe.
Super le code, surtout qu'il est très commenté ca aide mais comme je suis débutant (un an que j'apprend tout seul) j'ai pas tout compris mais je compte évoluer.
Bon je vais au boulot
Bonne journée
DGPat
DGPat
Messages postés53Date d'inscriptionsamedi 27 mars 2004StatutMembreDernière intervention 1 août 2006 4 janv. 2005 à 20:42
Bonsoir JMP77 ,
Je viens de rentrer et j'ai essayé tes modif, le boulot est super maintenant j'ai mes 20 tables qui s'affichent, et j'ai mis 3750 enregistrements, le seul problème restant est qu'il refuse toujours autre chose que les format "String", date, integer ou autres ne passent pas, il enregistre biens tout les champs et enregistrement mais à la contruction de la table paradox j'ai le message suivant : ETAP 4 remplissage impossible de convertir le variant de type [OLEStr] en type [double].
Enfin, c'est LE PROG génial attendu pour ceux qui travaillent en manipulant des gros fichiers Excel venant de diverses sources et qui veulent se créer une table paradox
Pour ceux nombreux qui vont se servir de ce prog il faut signaler que c'est toujours la 1° feuille qui est prise en compte pour créer la table.
Merci pour le service après vente, plus vite que ça tu meurs, déposé a midi a 16 h rendu dépanné , bravo
DGPat
PS j'avais validé ta réponse tout de suite je l'ai refait aujourd'hui.
Etant incapable de créer ce type de prog j'attend avec impatience tes rectif.
jmp77
Messages postés1119Date d'inscriptionlundi 4 février 2002StatutMembreDernière intervention 4 octobre 20067 20 déc. 2004 à 13:00
Pas de souci mauricio moi aussi j'ai pas mal de boulot en ce moment je voulais d'ailleurs poster ma nouvelle source aujourd'hui et finalement ca ne sera pas avant la fin de la semaine si tout va bien. Et tinkiet je ferrais en sorte que tous les honneurs te reviennent pour ta fonction export html.
Sinon concernant le link de delphiprog je suis impatient de voir le résultat.
Allez bon courage,
JMP77.
cs_MAURICIO
Messages postés2106Date d'inscriptionmardi 10 décembre 2002StatutModérateurDernière intervention15 décembre 20145 20 déc. 2004 à 12:13
Salut jmp77 !
DelphiProg viens de me donner un link mais je suis pas sur Delphi pour l' instant: je posterai quelques chose là dessus quand j' aurai vu la soluce qu il me donne : )
A propos de ma fonction: désolé mais tu vas devoir attendre cet apres midi car j' ai pas le temps malheureusement. Tu peux l' utiliser dans tes programmes sans probleme, tout l' honneur est pour moi : )
A+ (G trop de boulot pour l' instant)
cs_MAURICIO
Messages postés2106Date d'inscriptionmardi 10 décembre 2002StatutModérateurDernière intervention15 décembre 20145 17 déc. 2004 à 18:35
Tu as raison, je ne l' ai pas postée celle-là.
C' est normal puisque je ne donne pas toutes mes fonctions.
Aller, c' est Noel après tout non?
Si, j' ai le temps, je poste ça aujourd' hui, sinon lundi.
PS: continuons de chercher pour le pb des floats: faut embêter tout le monde, y en bien un qui va trouver. J' ai bien mis un msg sur le forum ça fait un bon moment : ( mais toujours pas de soluce (DelphiProg a répondu mais à côté de la question).
A+
jmp77
Messages postés1119Date d'inscriptionlundi 4 février 2002StatutMembreDernière intervention 4 octobre 20067 17 déc. 2004 à 17:09
Je viens de fouiller un peu et je n'ai pas trouver ton code pour passer de db en html si tu as 2 min mauricio et que tu pouvais me filer le lien ca serait cool.
Merci.
Bonne prog,
JMP77.
jmp77
Messages postés1119Date d'inscriptionlundi 4 février 2002StatutMembreDernière intervention 4 octobre 20067 17 déc. 2004 à 16:59
Merci Mauricio.
Ouais effectivement je n'avais pas penser au Feuil1 je vais corriger ca pour lundi.
Sinon pour la taille des float y a pas moyen j'ai cru que j'allais devenir fou j'ai retourner le probleme dans tous les sens mais pas plus de resultats. Je suis à court d'idée.
Ouais elle m'interesse ta fonction (db to html) je vais aller voir si je la trouve.
Bon week end et merci de ton commentaire.
Bonne prog,
JMP77.
cs_MAURICIO
Messages postés2106Date d'inscriptionmardi 10 décembre 2002StatutModérateurDernière intervention15 décembre 20145 17 déc. 2004 à 16:46
Il n' y a pas que moi qui est en forme!!!
Normalement, j' hyberne en Octobre mais cet hiver il fait bien plus chaud : )
Et dire que je cherchais comment créer des tables dynamiquement il n' y a même pas 3 mois (DBase).
Donc, je connais le procédé mais cette source reste une bonne initiative de ta part. Tu as trouvé comment récup' la taille des floats ???
Un petit problème quand même:
OleWorkBook.Worksheets.Item['Feuil1'].Activate;
Vu que je suis sur Excel en Portugais, bem 'Feuil1' il connais pas !!! Mais bon, je sais, c normal, et puis ça fait 2 ans que je ais des applications OLE (comme Excel quoi) pour les 'piloter' avec d' autres programmes.
Au fait, j' ai une fonction qui exporte une DBGRID vers Html, je l' ai déjà postée il me semble ...
5 juil. 2013 à 02:36
16 avril 2013 à 15:29
est ce que vous pouvez m'aider a transferer Excel a des tables interbase (IBTable) Merci .
20 déc. 2010 à 13:27
je vous propose ci dessous quelques améliorations pour la fonction DB vers Excel
{------------------------------------------------------------------------------}
{Programmeur : Jean-Marc PIRES 23/06/2004 }
{ Exportation de la table sous excel. }
{ Rectifié joliJoli 19/12/2010 }
{ - Extension aux TDataset pour pouvoir exporter une requete SQL }
{ - corrigée la fonction ColExcel (qui ne marche pas au delà de la ligne 52 }
{ - traitement par ligne au lieu de colonne pour améliorer les performances }
{ sur de grandes tables (on ne parcoure la table qu'une seule fois) }
{ - Fourniture d'un nom de fichier par défaut (Nomtable pour les tables, }
{ ou NomComposant pour les requêtes }
{------------------------------------------------------------------------------}
//Définition globale
const
cXLSext = '.xls'; //.xlsx
var RepSaveDbToXls : string;
//procedure ExtractionExcel(TableTemp : TTable; var MemoTemp : TMemo{; var GaugeTemp : TGauge});
procedure ExtractionExcel(TableTemp : TDataset; var MemoTemp : TMemo{; var GaugeTemp : TGauge});
var I, J, ndx : Integer;
OleApplication : Variant;
OleWorkBook : Variant;
TypeChampAr : array[0..511] of String;
TypeChamp
, ColXls
, NomTable
, NomChamp
, NomFichier : String;
Cond : Boolean;
SaveDialogDb : TSaveDialog;
//***********************************************************************
{Permet de retrouver les colonnes AA .. ZZ sous excel}
function ColExcel(Col : Integer) : ShortString;
begin
If Col > 25 then
//Result := format('%d %s', [Col, Chr(64 + Col div 26) + Chr(65 + Col mod 26)])
Result := Chr(64 + Col div 26) + Chr(65 + Col mod 26)
else
//Result := format('%d %s', [Col, Chr(65 + Col)]);
Result := Chr(65 + Col);
end;
//***********************************************************************
begin
{On récupère le nom de la table ou query}
if TableTemp is TTable
then NomTable := Ttable(TableTemp).TableName
else NomTable := TableTemp.Name;
{Création de la boite de sauvegarde}
SaveDialogDb := TSaveDialog.Create(nil);
Try
{Initialisation de la boite de sauvegarde}
SaveDialogDb.Title := 'Sauver le fichier excel';
SaveDialogDb.Filter := 'Fichiers Excel (*.xls)|*.xls';
SaveDialogDb.FileName := changefileext(NomTable, cXLSext);
SaveDialogDb.InitialDir := RepSaveDbToXls;
If SaveDialogDb.Execute then
begin
{Récupération des infos de la boite de sauvegarde et sauvegarde du repertoire dans l'ini}
RepSaveDbToXls := ExtractFilePath(SaveDialogDb.FileName);
//SaveIni;
{On récupère le nom du fichier}
NomFichier := ExtractFileName(SaveDialogDb.FileName);
{Barre de progression + Memo}
//GaugeTemp.Visible := True;
MemoTemp.Lines.Add( 'Extraction de la table dans ' +
RepSaveDbToXls +
NomFichier);
MemoTemp.Update;
{Connection à excel}
Try
{On bloque l'affichage}
TableTemp.DisableControls;
{On lance excel}
{Création du lien OLE pour la classe référencé par Excel dans la base de registre "Excel.Application"}
OleApplication := CreateOleObject('Excel.Application');
{On ouvre le fichier voulu}
OleWorkBook := OleApplication.Workbooks.Add;
{On sélectionne l'onglet dans lequel on va entrer les données}
OleWorkBook.Worksheets.Item['Feuil1'].Activate;
{On colorie la premiere ligne en jaune}
OleApplication.Range['A1:'+ColExcel(TableTemp.FieldCount)+'1'].Interior.ColorIndex := 6;
{On applique les filtres auto}
//OleApplication.Range['A2:'+ColExcel(I-1)+IntToStr(J)].AutoFilter;
{Initialisation de la progressbar}
//GaugeTemp.MaxValue := TableTemp.FieldCount;
//GaugeTemp.Progress := 1;
MemoTemp.Lines.Add( 'Extraction des colonnes');
ndx := MemoTemp.Lines.Count;
MemoTemp.Lines.Add( '');
//définit le format des données par colonnes
For I:= 0 to TableTemp.FieldCount-1 do
begin
//Recherche du type de champ
case TableTemp.Fields.Fields[I].DataType of
FtString : If TableTemp.Fields.Fields[I].Size = 16
then TypeChampAr[I] := 'S'
else TypeChampAr[I] := 'S' + IntToStr(TableTemp.Fields.Fields[I].Size);
FtFloat : TypeChampAr[I] := 'F';
FtInteger : TypeChampAr[I] := 'I';
FtDate : TypeChampAr[I] := 'D';
FtTime : TypeChampAr[I] := 'T';
FtDateTime : TypeChampAr[I] := 'DT';
FtMemo : TypeChampAr[I] := 'M';
//FtGraphic : TypeChamp := 'G';
end;
{Récupération du nom de ce champ}
NomChamp := TableTemp.Fields.Fields[I].FieldName;
ColXls := ColExcel(I);
OleApplication.Cells[1,ColXls].Formula := NomChamp;
MemoTemp.Lines[ndx] := Format( NomChamp+' %d/%d col:%s',
[I, TableTemp.FieldCount, ColXls]
);
MemoTemp.Update;
end;
//Exporte les données par ligne
Cond := TableTemp.FindFirst;
//Récupération du contenu de ces champs
J := 2;
While Cond do
begin
//On indique l'état d'avancement dans le memo
MemoTemp.Lines[ndx] := Format( 'Extraction de la ligne%d/%d',
[J-1, TableTemp.recordcount]
);
MemoTemp.Update;
for I := 0 to TableTemp.FieldCount-1 do
begin
if TypeChampAr[I] = 'F' then OleApplication.Cells[J,ColExcel(I)].NumberFormat := '0.000';
OleApplication.Cells[J,ColExcel(I)].Formula := TableTemp.Fields.Fields[I].AsString;
end;
Cond := TableTemp.FindNext;
Inc(J);
end;
{On renomme l'onglet}
OleWorkBook.Worksheets.Item['Feuil1'].Name := NomTable;
{On désactive les messages d'excel}
OleApplication.DisplayAlerts := False;
OleApplication.ActiveWorkBook.SaveAs(RepSaveDbToXls + NomFichier);
{On Réactive les messages d'excel}
OleApplication.DisplayAlerts := True;
Finally
{On rend excel visible}
OleApplication.Visible:=True;
{On réactive les mise à jour de la base}
TableTemp.EnableControls;
{On ferme le lien ole}
{Barre de progression}
//GaugeTemp.Visible := False;
{On confirme la fin de l'extraction et on initialise les boutons du menu}
MemoTemp.Lines.Add('Extraction de la table "' + NomTable + '" terminée.');
end;
end;
Finally
SaveDialogDb.Free; {On libère le mémoire}
end;
end;
10 févr. 2009 à 09:23
bon merci pour ton application, moi g'ai une application développée par delphi avec une base de donnée access, est ce que ce code va m'aider pour importer et exporter ver ma base access et que ce que je doit modifier comme code merci d'avance.
10 févr. 2009 à 09:20
1 févr. 2009 à 08:46
Un petit soucis cependant avec la conversion de champs Date (format Date sous Excel)
Curieusement le champs Fttime est correctement formaté en Excel à l'opposé du champs créé via Ftdate qui se retrouvait en Excel sous forme de String.
Dans DbtoXls après la récupération du type de champs, j'ai ajouté :
if TypeChamp = 'D' then
OleApplication.Cells[J,I].Formula := TableTemp.Fields.Fields[I].AsDateTime
else .... (autre champs en AsString )
Je n'ai évidement pas testé tous les format de cellules sous Excel, mon soucis étant la conversion de champs heures et dates.
Encore merci pour ce source.
19 janv. 2009 à 11:43
28 sept. 2008 à 12:17
9 juin 2008 à 11:11
30 mai 2008 à 18:23
Quels composants?
30 mai 2008 à 15:41
27 nov. 2005 à 22:45
1 mai 2005 à 23:38
merci
6 janv. 2005 à 13:04
Les grandes idées se rejoignent, justement je suis occupé à me prendre la tête avec les filtres (hé oui encore) mon idée est que je veux que ma table filtre par exemple toutes les factures non réglées a la date d'aujourd'hui,et pas seulement celles qui sont à la date du jour(je sais pas si je suis clair) là ou ton prog de convertion est idéal c'est parce que je récupére des fichiers Excel où il y a des formules qui me mettent une lettre pour les fact en question ces fichiers sont mis à jour journalièrement, le prog que je construit va me permettre de centraliser sur 1 logiciel toutes les données qui me parviennent de tous le monde, ca c'est un exemple car je traite beaucoup de fichiers excel pour diverses taches, petite question comment on fait pour calculer une moyenne de nombre d'un champs de DBGrid
Maintenant je vais devoir retravailler de A à Z mon prog pour qu'il soit compatible avec toi mais ce sera un plaisir, quand je dis que ce que tu as fait est vraiment ce que j'attendais je suis en dessous de la réalité
Si tu veux je te soumettrais mon prog fini pour dire ce que tu pense et éventuellement apporter des améliorations.
Si c'est convenable (en ayant retiré les info confidentielles, pour le moment il n'y a que ca) tu me diras si je peux poster le prog, ca pourra peut être aider d'autres.
Je suis preneur de toutes tes idées,
En mon nom et au nom des autres encore merci car il suffit de surfer sur le forum ou tu dépannes pas mal.
Bonne Journée
DGPat
6 janv. 2005 à 10:03
Il est vrai qu'un fichier d'aide ne serait pas du luxe. Alors je vais en préparer un. Cependant il ne sera pas dispo de suite car c'est plus long que de taper le code (lol). Donc je le prépare et si ca te derange pas je te contacterai pour que tu le lises et que tu me dises ce que tu en penses. Comme tu t'es bien pris la tete sur le soft je pense que tu es le plus apte à juger une aide dessus.
Sinon pas de souci quand j'ai une nouvelle source sur les bases de données je t'en ferrai part. D'ailleurs j'en prepare une en ce moment. Cette nouvelle source s'orientra autour des filtres des bases de données. Elle permettra de generer un filtre automatiquement. Si ca t'interesse ??? Ca fait 2 semaines que je promet de la poster mais malheureusement j'ai pas beaucoup de temps en ce moment. Si tu as des questions ou des choses que tu souhaites realiser et que tu as besoin d'aide n'hesite pas.
Enfin en ce qui concerne la réutilisation du code il est là pour ca alors fais toi plaisir. Ca me fait plaisir de savoir que ce code aura pu depanner au moins une personne.
Si tu as d'autres idées d'améliorations pour ce soft je suis preneur.
Bonne journée,
JMP77.
5 janv. 2005 à 22:04
Ben.... voilà,il ny a plus qu'a l'utiliser,je l'ai essayé je lui ai incorporé 27 champs et 7836 enregistrements de tous les types,rien n'a bronché,il a créé la base paradox et a l'inverse un fichier Excel.
il y a quelques petites astuces dans la préparation de fichier Excel : A savoir ne pas travailler sur la feuille originale mais faire un copier et coller mais seulement les valeurs,pas de formule ca évite les problèmes
Bien que facile d'utilisation,peut être qu'un fichier d'aide sur ton prog aidera ceux qui aurait des difficultés?
Si des utilisateurs ont des difficultés a configurer Excel pour ton prog, tout le monde peut m'envoyer un message, vu que j'ai ramé et essayé beaucoup de soluce il n'a pas de raison de laisser ramer les autres.
Comme tu dois t'en douter je suis sur un prog très volumineux qui fait gestion de stock, facturation et gestion clients et fournisseurs,echéancier etc....
Avec ton autorisation je vais incorporer ton prog, bien entendu je laisse ta boite"a propos" l'honneur te reviens pour le super boulot.
Quand tu crée (surtout en base de données) tu peux m'envoyer un message? je suis preneur.
A plus tard sur le site
DGPat
5 janv. 2005 à 11:15
C'est ok DgPat je viens de corriger le programme. C'était plutot rapide vu que c'est toi qui a trouver qu'elle était le probleme.
Maintenant quand le programme doit ecrire dans un champ integer, flottant ou datetime il verifie que les données à inserées ne sont pas vide.
N'hesite pas si tu vois d'autres erreurs ou des améliorations éventuelles ce sera avec grand plaisir.
Bonne journée, et bonne conversion,
JMP.
5 janv. 2005 à 07:42
Je crois avoir trouvé pourquoi, le prog n'accepte pas les autres format chez moi, cela vient que dans le fichier Excel que l'on veut mettre en paradox il ne peut pas avoir de cellules vides autres que celles en String, j'ai essayé en remplissant toutes les cellules qui sont en Date et là aucun prob ca passe.
Super le code, surtout qu'il est très commenté ca aide mais comme je suis débutant (un an que j'apprend tout seul) j'ai pas tout compris mais je compte évoluer.
Bon je vais au boulot
Bonne journée
DGPat
4 janv. 2005 à 20:42
Je viens de rentrer et j'ai essayé tes modif, le boulot est super maintenant j'ai mes 20 tables qui s'affichent, et j'ai mis 3750 enregistrements, le seul problème restant est qu'il refuse toujours autre chose que les format "String", date, integer ou autres ne passent pas, il enregistre biens tout les champs et enregistrement mais à la contruction de la table paradox j'ai le message suivant : ETAP 4 remplissage impossible de convertir le variant de type [OLEStr] en type [double].
Enfin, c'est LE PROG génial attendu pour ceux qui travaillent en manipulant des gros fichiers Excel venant de diverses sources et qui veulent se créer une table paradox
Pour ceux nombreux qui vont se servir de ce prog il faut signaler que c'est toujours la 1° feuille qui est prise en compte pour créer la table.
Merci pour le service après vente, plus vite que ça tu meurs, déposé a midi a 16 h rendu dépanné , bravo
DGPat
PS j'avais validé ta réponse tout de suite je l'ai refait aujourd'hui.
Etant incapable de créer ce type de prog j'attend avec impatience tes rectif.
20 déc. 2004 à 13:00
Sinon concernant le link de delphiprog je suis impatient de voir le résultat.
Allez bon courage,
JMP77.
20 déc. 2004 à 12:13
DelphiProg viens de me donner un link mais je suis pas sur Delphi pour l' instant: je posterai quelques chose là dessus quand j' aurai vu la soluce qu il me donne : )
A propos de ma fonction: désolé mais tu vas devoir attendre cet apres midi car j' ai pas le temps malheureusement. Tu peux l' utiliser dans tes programmes sans probleme, tout l' honneur est pour moi : )
A+ (G trop de boulot pour l' instant)
17 déc. 2004 à 18:35
C' est normal puisque je ne donne pas toutes mes fonctions.
Aller, c' est Noel après tout non?
Si, j' ai le temps, je poste ça aujourd' hui, sinon lundi.
PS: continuons de chercher pour le pb des floats: faut embêter tout le monde, y en bien un qui va trouver. J' ai bien mis un msg sur le forum ça fait un bon moment : ( mais toujours pas de soluce (DelphiProg a répondu mais à côté de la question).
A+
17 déc. 2004 à 17:09
Merci.
Bonne prog,
JMP77.
17 déc. 2004 à 16:59
Ouais effectivement je n'avais pas penser au Feuil1 je vais corriger ca pour lundi.
Sinon pour la taille des float y a pas moyen j'ai cru que j'allais devenir fou j'ai retourner le probleme dans tous les sens mais pas plus de resultats. Je suis à court d'idée.
Ouais elle m'interesse ta fonction (db to html) je vais aller voir si je la trouve.
Bon week end et merci de ton commentaire.
Bonne prog,
JMP77.
17 déc. 2004 à 16:46
Normalement, j' hyberne en Octobre mais cet hiver il fait bien plus chaud : )
Et dire que je cherchais comment créer des tables dynamiquement il n' y a même pas 3 mois (DBase).
Donc, je connais le procédé mais cette source reste une bonne initiative de ta part. Tu as trouvé comment récup' la taille des floats ???
Un petit problème quand même:
OleWorkBook.Worksheets.Item['Feuil1'].Activate;
Vu que je suis sur Excel en Portugais, bem 'Feuil1' il connais pas !!! Mais bon, je sais, c normal, et puis ça fait 2 ans que je ais des applications OLE (comme Excel quoi) pour les 'piloter' avec d' autres programmes.
Au fait, j' ai une fonction qui exporte une DBGRID vers Html, je l' ai déjà postée il me semble ...