Newsgroup: it.comp.lang.delphi
Titolo: [Semi-OT] Prima che impazzite con ole su MsExcel

Scusate l'ot, ma questa cosa va raccontata.
Tutto parte da una mia app che processa dei dati e popola via ole un
foglio excel. Tra questi dati esiste un campo di tipo data.
Premesse:
1) la data è registrata come TDateTime in un campo di un
tclientdataset
2) il problema che vi segnalo capita sia con excel in inglese su
sistema xp italiano con formati data e ora italiani, sia su un xp con
excel in francese e regional settings francessi (il formato data è
identico)
Problema
Inserendo 40.000 righe estratte da un tclientdataset, la metà di
queste righe ha il campo data formattato in mm/gg/aaaa.
Prima soluzione
Uso DecodeDate; poi uso formatdatetime('dd/mm/yyyy), encodedate(a,m,g)
esito: nessun cambiamento
Per caso ti accordi che sulle righe "incriminate" il formato cella del
campo data non è "general"...
Allora inizi a cercare nella guida vba di excel.
Mentre dai la stura alle parolacce delle grandi occasioni (fottuta
ricerca, devi per forza tirare fuori tutta 'sta roba che non mi
interessa??) trovi PER CASO, la funzione format di excel.
Guardate COSA E' SCRITTO nel topic:
//-------------------------------------------------------------------------
When assigning a date string value to a cell, Microsoft Excel assumes
that strings of the format xx/yy/zz are in the U.S. English date
format (mm/dd/yy). Excel displays the value in the cell in the local
date format. Remember that the Format function returns the date as a
string in the local date format.
When the local date format is dd/mm/yy, assigning a General Date or
Short Date string value returned by the Format function to a cell
will result in one of two outcomes.
//---Leggete qui sotto, che è la parte + interessante:
If the day of the month is less
than 13 and the month is less than 12, Excel assumes that the string
is in mm/dd/yy format and displays the date with the month and day
exchanged. Otherwise, Excel displays the date in the correct local
format because the month can never be greater than 12.
For example, assume that the system regional setting is Canadian
English and the date is August 8, 1998. The following example assigns
the value "8/11/98" (mm/dd/yy) to cell A1 on the active worksheet,
even though the expected value is "11/08/98" (dd/mm/yy).
ActiveSheet.Range("A1").Value = Format(Date, "Short Date")In this
case, Excel assumes that the string "11/08/98" returned by the Format
function is in the U.S. English format and converts it to the local
format, assigning the date November 8, 1998, to the cell.
//-------------------------------------------------------------------------
Giusto per evitare che qualcuno impazzisca.
Andavo di fretta e ho messo una pezza: scrivo il valore della data
preceduto e seguito da un carattere "-" cosi frego la formattazione
delle celle.
AS
Ps: Ma dico, vi rendete conto che la gente PAGA per software che
contiene kazzate di questo tipo?

 foglio excel. Tra questi dati esiste un campo di tipo data.
già che ci siamo ve ne segnalo un'altra, anche se piuttosto banale:
- dovevo riempire, da programma, un foglio Excel a partire da una tabella 
di un database contenente vari nominativi;
- su una colonna scrivevo il cognome e su un'altra il nome;
- il programma funzionava ma andando a guardare il foglio Excel così 
generato, scopro che il nominativo VERO ALFREDO presenta un'anomalia, 
infatti il cognome non era allineato come gli altri;
- dopo vari tentativi a mano, ho realizzato che "VERO" è il valore che 
Excel attribuisce al valore logico True...
(con riferimento al caso di cui sopra, il nome è inventato mentre il 
cognome è...vero)
-- 
Mauro Falzari 
 
 "Se guardi nell'abisso, anche l'abisso guarda in te." 
   (Friedrich Nietzsche)