DATABASE CONVERTOR XLS <--> DB

cs_MAURICIO
Messages postés
2106
Date d'inscription
mardi 10 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2014
- 17 déc. 2004 à 16:46
sollo
Messages postés
1
Date d'inscription
vendredi 5 juillet 2013
Statut
Membre
Dernière intervention
5 juillet 2013
- 5 juil. 2013 à 02:36
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/28226-database-convertor-xls-db

sollo
Messages postés
1
Date d'inscription
vendredi 5 juillet 2013
Statut
Membre
Dernière intervention
5 juillet 2013

5 juil. 2013 à 02:36
thanks very much
ka124b
Messages postés
3
Date d'inscription
jeudi 20 décembre 2007
Statut
Membre
Derniè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és
3
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
20 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});

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;
merazkaabdennebi
Messages postés
4
Date d'inscription
samedi 5 août 2006
Statut
Membre
Dernière intervention
10 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és
4
Date d'inscription
samedi 5 août 2006
Statut
Membre
Dernière intervention
10 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.
Afficher les 25 commentaires