OVH Cloud OVH Cloud

Format date spécifié à l'ouverture

4 réponses
Avatar
Valerie Labonne
Salut.
J'espère que je poste sur le bon forum.
Voila mon problème.
J'ai un fichier au format csv, avec des valeurs numériques et des
valeurs de type date.
voici un exemple:
-----BOF----
10;01/02/2002
15;15/02/2002
50;11/01/2002
-----EOF----
J'ouvre ce fichier par OLE à partir de DELPHI.
Le problème est que Excel interprète les dates au format américain:
mm/dd/yyyy
C'est à dire que cette date : "15/02/2002" sera correctement interprétée
et que ces dates : "01/02/2002" et "11/01/2002" seront mal interprétées
le jour et le mois seront inversés dans Excel.

Je pense que je peux passer des paramètres à l'ouverture du classeur(que
je fais dans delphi). Voici la ligne de commande que j'utilise dans Delphi:
workbooks.open(nom_fichier,emptyparam,emptyparam,4);
Je crois que je dois modifier les emptyparam, qui correspondent à "JE
SAIS PAS QUOI". Je sais que le dernier paramètre correspond au
séparateur de champ, dans mon cas un ";"
Savez vous par quoi je dois remplacer les emptyparam pour que excel
interprète bien les dates? Je pense que sous le VB d'Excel ca doit
ressembler.
MERCI

4 réponses

Avatar
Frédéric Sigonneau
Bonsoir,

La méthode Open gagne des paramètres au fil des versions. Avec Excel 2002, j'en
suis à 15...
Le séparateur de champ est chez moi le 9ème paramètre et il existe un 14ème qui
devrait t'aider si tu peux l'utiliser : Local. S'il vaut True, les paramètres
régionaux du système où le code s'exécute sont utilisés (et tes dates seront
restituées correctement).
Si tu le peux, donc, (version d'Excel pilotée par OLE), essaye soit une syntaxe
avec paramètres nommés (m'étonnerait que celle-là soit possible) :

TonXL.Workbooks.Open(FileName:='nometchemin', Delimiter:=';', Local:=True)

ou (plus probablement) qqchose du genre :

TonXL.Workbooks.Open('nometchemin',,,,,,,,';',,,,,True)

FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !


Salut.
J'espère que je poste sur le bon forum.
Voila mon problème.
J'ai un fichier au format csv, avec des valeurs numériques et des
valeurs de type date.
voici un exemple:
-----BOF----
10;01/02/2002
15;15/02/2002
50;11/01/2002
-----EOF----
J'ouvre ce fichier par OLE à partir de DELPHI.
Le problème est que Excel interprète les dates au format américain:
mm/dd/yyyy
C'est à dire que cette date : "15/02/2002" sera correctement interprétée
et que ces dates : "01/02/2002" et "11/01/2002" seront mal interprétées
le jour et le mois seront inversés dans Excel.

Je pense que je peux passer des paramètres à l'ouverture du classeur(que
je fais dans delphi). Voici la ligne de commande que j'utilise dans Delphi:
workbooks.open(nom_fichier,emptyparam,emptyparam,4);
Je crois que je dois modifier les emptyparam, qui correspondent à "JE
SAIS PAS QUOI". Je sais que le dernier paramètre correspond au
séparateur de champ, dans mon cas un ";"
Savez vous par quoi je dois remplacer les emptyparam pour que excel
interprète bien les dates? Je pense que sous le VB d'Excel ca doit
ressembler.
MERCI


Avatar
Valerie Labonne
Merci beaucoup pour ta réponse. Je crois que Delphi5 (que j'utilise)
utilise la version 97, car je n'ai que 4 paramètres:
workbooks.open(nom_fichier,emptyparam,emptyparam,4);
Je tente dés à présent de remplacer un "emptyparam" par TRUE.
Je vous tiens au courant (si ça vous intéresse!)


Frédéric Sigonneau a écrit:
Bonsoir,

La méthode Open gagne des paramètres au fil des versions. Avec Excel 2002, j'en
suis à 15...
Le séparateur de champ est chez moi le 9ème paramètre et il existe un 14ème qui
devrait t'aider si tu peux l'utiliser : Local. S'il vaut True, les paramètres
régionaux du système où le code s'exécute sont utilisés (et tes dates seront
restituées correctement).
Si tu le peux, donc, (version d'Excel pilotée par OLE), essaye soit une syntaxe
avec paramètres nommés (m'étonnerait que celle-là soit possible) :

TonXL.Workbooks.Open(FileName:='nometchemin', Delimiter:=';', Local:=True)

ou (plus probablement) qqchose du genre :

TonXL.Workbooks.Open('nometchemin',,,,,,,,';',,,,,True)

FS


Avatar
Frédéric Sigonneau
Bonsoir,

Ça m'intéresse mais ça m'étonnerait que ça marche, le paramètre Local n'étant
disponible qu'à partir d'Excel 2002 :(
A te relire, je ne suis pas certain que c'est bien Excel que tu cherches à
piloter... Ne serait-ce pas plutôt un composant comme TAdvExcel ou qqchose de ce
genre ? Si c'est le cas, l'aide d'Excel ne va pas servir à grand'chose et tu
auras plus d'aide dans un forum Delphi.
Sinon, pour forcer l'ouverture d'un fichier CSV avec le format de dates de ton
choix, tu peux essayer, autre m"thode, ce genre de syntaxe (code VBA) :

'================= 'utiliser le paramètre FieldInfo pour forcer le format de dates
'd'une colonne (la colonne ne doit contenir que des dates..)
Sub OuvrirTxt(NomFichier$)
Dim Wbk As Workbook
Set Wbk = Workbooks.Open(NomFichier)
Wbk.Sheets(1).Columns(1).TextToColumns _
Range("A1"), , , False, , True, FieldInfo:=Array(2, xlDMYFormat)
'(ici, la colonne de dates est la colonne 2)
End Sub
'=================
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !


Merci beaucoup pour ta réponse. Je crois que Delphi5 (que j'utilise)
utilise la version 97, car je n'ai que 4 paramètres:
workbooks.open(nom_fichier,emptyparam,emptyparam,4);
Je tente dés à présent de remplacer un "emptyparam" par TRUE.
Je vous tiens au courant (si ça vous intéresse!)

Frédéric Sigonneau a écrit:
Bonsoir,

La méthode Open gagne des paramètres au fil des versions. Avec Excel 2002, j'en
suis à 15...
Le séparateur de champ est chez moi le 9ème paramètre et il existe un 14ème qui
devrait t'aider si tu peux l'utiliser : Local. S'il vaut True, les paramètres
régionaux du système où le code s'exécute sont utilisés (et tes dates seront
restituées correctement).
Si tu le peux, donc, (version d'Excel pilotée par OLE), essaye soit une syntaxe
avec paramètres nommés (m'étonnerait que celle-là soit possible) :

TonXL.Workbooks.Open(FileName:='nometchemin', Delimiter:=';', Local:=True)

ou (plus probablement) qqchose du genre :

TonXL.Workbooks.Open('nometchemin',,,,,,,,';',,,,,True)

FS




Avatar
Valerie Labonne
Merci pour tes réponses.
C'est bien Excel que je cherche à piloter. Mon code est du genre:
var
MonExcel:Variant;
begin
MonExcel:=TOleApplication.Create('Excel.Application');
.........
MonExcel.Worksheet.Add(
etc...
end;
En fait l'info qui m'intéresse est celle-ci:
le paramètre Local n'étant
disponible qu'à partir d'Excel 2002
Car mon programme Delphi doit piloter des Excel 97 donc je vais me


rabattre sur le forum delphi sur l'automation puisque visiblement, je ne
peux pas passer le paramètre "local" sur un XL97. Mais je doute que je
puisse ariver à quelque chose... Si j'ai une solution, je la posterai
ici pour toi.
MERCI!




Frédéric Sigonneau a écrit:
Bonsoir,

Ça m'intéresse mais ça m'étonnerait que ça marche, le paramètre Local n'étant
disponible qu'à partir d'Excel 2002 :(
A te relire, je ne suis pas certain que c'est bien Excel que tu cherches à
piloter... Ne serait-ce pas plutôt un composant comme TAdvExcel ou qqchose de ce
genre ? Si c'est le cas, l'aide d'Excel ne va pas servir à grand'chose et tu
auras plus d'aide dans un forum Delphi.
Sinon, pour forcer l'ouverture d'un fichier CSV avec le format de dates de ton
choix, tu peux essayer, autre m"thode, ce genre de syntaxe (code VBA) :

'================= > 'utiliser le paramètre FieldInfo pour forcer le format de dates
'd'une colonne (la colonne ne doit contenir que des dates..)
Sub OuvrirTxt(NomFichier$)
Dim Wbk As Workbook
Set Wbk = Workbooks.Open(NomFichier)
Wbk.Sheets(1).Columns(1).TextToColumns _
Range("A1"), , , False, , True, FieldInfo:=Array(2, xlDMYFormat)
'(ici, la colonne de dates est la colonne 2)
End Sub
'================= >
FS