Problème exportation date en CSV [Résolu]

Messages postés
291
Date d'inscription
lundi 18 janvier 2016
Statut
Membre
Dernière intervention
14 février 2018
-
Bonjour,

J'ai un petit soucis.
J'exporte au format CSV le contenu d'un StringGrid. Jusques la, tous va bien. J'arrive à exporter la totalité de mes données. Mais je rencontre un problème quand je vais lire les données. En effet, en se qui concerne les données numériques, tous se passe correctement. A l'inverse, concernant les dates, c'est pas une réelle réussite. J'explique mon problème : j'exporte par exemple "15/01/2016" et lorsque je vais lire dans Excel, je me retrouve avec une donnée numérique du type "42384". Voici mon code.

var
xls, wb: OLEVariant;
arrData, Range: Variant;
RowCount, ColCount, i, j: Integer;
begin
{create variant array where we'll copy our data}
RowCount := StringGrid1.RowCount;
ColCount := StringGrid1.ColCount;
arrData := VarArrayCreate([1, RowCount, 1, ColCount], varVariant);

{fill array}
for i := 1 to RowCount do
for j := 1 to ColCount do
arrData[i, j] := StringGrid1.Cells[j-1, i-1];

// J’effectue un test pour voir si c'est mon StringGrid qui renvoie la valeur numérique mais c'est bien lors du traitement d'export que ça arrive !!
label1.caption:=StringGrid1.Cells[2, 1];

{initialize an instance of Excel}
xls := CreateOLEObject('Excel.Application');

{create workbook}
wb := xls.Workbooks.Add;

{retrieve a range where data must be placed}
Range := wb.WorkSheets[1].Range[wb.WorkSheets[1].Cells[1, 1],
wb.WorkSheets[1].Cells[RowCount, ColCount]];

{copy data from allocated variant array}
Range.Value := arrData;

{show Excel with our data}
xls.Visible := True;
end;


J'utilise Delphi7 / Excel 2010
Merci par avance pour l'aide de vous pourrez m'accorder.
Afficher la suite 

4 réponses

Meilleure réponse
Messages postés
176
Date d'inscription
samedi 15 novembre 2003
Statut
Membre
Dernière intervention
7 août 2019
5
1
Merci
je viens de tester ça marche (excel 2007) mais ça devrait aller aussi avec excel 2010

procedure TForm1.Button3Click(Sender: TObject);
var
xls : OLEVariant;
wb: OLEVariant;
arrData, Range: Variant;
begin
{initialize an instance of Excel}
xls := CreateOLEObject('Excel.Application');
xls.Visible := True;
{create workbook}
wb := xls.Workbooks.Add;

{retrieve a range where data must be placed}
arrData := '01/02/2016' ;
{copy data from allocated variant array}
xls.Range['F2'].Formula:='aa';
xls.Range['F1'].NumberFormat:= 'jj/mm/aaaa';
xls.Range['F1'].Formula:= arrData;
end;

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 116 internautes nous ont dit merci ce mois-ci

vico8000
Messages postés
291
Date d'inscription
lundi 18 janvier 2016
Statut
Membre
Dernière intervention
14 février 2018
2 -
Bonjour,

C'est bon, j'arrive a récupérer la date (Enfin pas exactement).

procedure TFormHistorique.BtExportationClick(Sender: TObject);
var
xls, wb: OLEVariant;
arrData, Range: Variant;
RowCount, ColCount, i, k: Integer;
CaseExcel : String;
begin
{create variant array where we'll copy our data}
RowCount := StringGrid1.RowCount;
ColCount := StringGrid1.ColCount;
arrData := VarArrayCreate([1, RowCount, 1, ColCount], varVariant);

{fill array}
for i := 1 to RowCount do
for k := 1 to ColCount do
arrData[i, k] := StringGrid1.Cells[k-1, i-1];

{initialize an instance of Excel}
xls := CreateOLEObject('Excel.Application');

{create workbook}
wb := xls.Workbooks.Add;

{retrieve a range where data must be placed}
Range := wb.WorkSheets[1].Range[wb.WorkSheets[1].Cells[1, 1],
wb.WorkSheets[1].Cells[RowCount, ColCount]];
//Range.NumberFormat:= DateFormat;

for I := 2 to RowCount + 1 do
Begin
CaseExcel := 'D' + inttostr(I);
xls.Range[CaseExcel].NumberFormat := 'aaaa-mm-jj';
CaseExcel := 'E' + inttostr(I);
xls.Range[CaseExcel].NumberFormat := 'hh:mm:ss';
CaseExcel := 'F' + inttostr(I);
xls.Range[CaseExcel].NumberFormat := 'hh:mm:ss';
end;

{copy data from allocated variant array}
Range.Value := arrData;

{show Excel with our data}
xls.Visible := True;

end;


Voici mon code, adapté suite à ton dernier message d'aide.
Dans le Fichier Excel quand je clique sur la cellule de la date, j'ai bien la date que j'exporte. (21/01/2016)
Mais en regardant mon tableur, en visuel, sans cliquer sur la case, je lis un truc du genre "########". pour que l'affichage se fasse correctement, il faut que je renseigne une cellule quelconque à l'aide d'une date quelconque et tous les affichages de cellules comprennant une date se mettent à jour. Aurais-tu une explication?
Pour le Format Time, à l'inverse, aucun soucis, la fonction "fonctionne" :p.

Merci pour l'aide apportée qui m'a permis d'avancer pas mal déja. Cordialement.
Commenter la réponse de papyvore
Messages postés
176
Date d'inscription
samedi 15 novembre 2003
Statut
Membre
Dernière intervention
7 août 2019
5
1
Merci
salut
en général quand excel affiche "########"., c'est que la colonne n'est pas assez large.Ou tu l'élargie à la main ou tu programme la largeur de la colonne .
va voir ici http://www.marclebrun.be/wiki/doku.php?id=delphi:pilotageexcelole

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 116 internautes nous ont dit merci ce mois-ci

vico8000
Messages postés
291
Date d'inscription
lundi 18 janvier 2016
Statut
Membre
Dernière intervention
14 février 2018
2 -
C'est effectivement ça.
Je te remercie pour l'aide que tu m'as apporté et le temps que tu m'as accordé.
Bonne continuation, Cordialement.
Commenter la réponse de papyvore
Messages postés
176
Date d'inscription
samedi 15 novembre 2003
Statut
Membre
Dernière intervention
7 août 2019
5
0
Merci
salut

{retrieve a range where data must be placed}
Range := wb.WorkSheets[1].Range[wb.WorkSheets[1].Cells[1, 1],
wb.WorkSheets[1].Cells[RowCount, ColCount]];
Range.NumberFormat:= DateFormat

quelque chose comme ça avec numberformat
j'ai pas testé
papyvore
vico8000
Messages postés
291
Date d'inscription
lundi 18 janvier 2016
Statut
Membre
Dernière intervention
14 février 2018
2 -
Yop,

DateFormat correspondrait à une bibliothèque spéciale à inclure ?
Pour une heure ça serait TimeFormat ?
J'exporte un truc du genre:
5 | 5 | 20/01/2016 | 13:23:52 | 00:25:16 (Par exemple)
Donc si j'utilise ta méthode, ça devrait mettre les 5 champs en Date non ?

Merci pour le début de réponse apporté.
Commenter la réponse de papyvore
Messages postés
176
Date d'inscription
samedi 15 novembre 2003
Statut
Membre
Dernière intervention
7 août 2019
5
0
Merci
voilà un bout de code qui marche dans un de mes prog. avec D7 pour excel 2007

OleApplicationEcriture := CreateOleObject('Excel.Application');// création du lien OLE
OleApplicationEcriture.Range['F'+IntTostr(i+1)].NumberFormat:= 'jj/mm/aa';
OleApplicationEcriture.Range['F'+IntTostr(i+1)].Formula:= Dat;


papyvore
vico8000
Messages postés
291
Date d'inscription
lundi 18 janvier 2016
Statut
Membre
Dernière intervention
14 février 2018
2 -
La seule chose que j'en retourne c'est Violation d'accés
et Erreur OLE 800A03EC.
Commenter la réponse de papyvore