Nein leider nicht, da ein ToString() auf das "Value" zugreift, daß 
komischerweise bei range immer
leer ist. Und das Value2-Property gibt zwar die Werte aber eben als 37987.

Ich mache es jetzt so:
String colNumberFormat = ((Excel.Range)sheet.Cells[aRange.Row+1,
aRange.Column+c-1]).NumberFormat.ToString();
Und dann eine fette IF:
if(colNumberFormat.IndexOf("TT") != -1 || 
                                                colNumberFormat.IndexOf("MM") 
!= -1 || 
                                                colNumberFormat.IndexOf("JJ") 
!= -1 ||
                                                colNumberFormat.IndexOf("TT") 
!= -1 ||
                                                colNumberFormat.IndexOf("T.") 
!= -1 ||
                                                colNumberFormat.IndexOf("M.") 
!= -1 ||
                                                colNumberFormat.IndexOf(".J") 
!= -1 )

Und dann habe ich erfahren, daß es sich um die Anzahl an Tagen seit Beginn des 
Julian Kalenders
handelt und habe folgenden Code dazu gefunden, der scheinbar passt:
ExcelSerialDateToDMY(Convert.ToInt32(ar.GetValue(2,c)), out day, out month, out 
year);

                private void ExcelSerialDateToDMY(int nSerialDate, out int 
nDay, out int nMonth, out
int nYear)
                {
                        // Excel/Lotus 123 have a bug with 29-02-1900. 1900 is 
not a
                        // leap year, but Excel/Lotus 123 think it is...
                        if (nSerialDate == 60)
                        {
                                nDay    = 29;
                                nMonth    = 2;
                                nYear    = 1900;

                                return;
                        }
                        else if (nSerialDate < 60)
                        {
                                // Because of the 29-02-1900 bug, any serial 
date 
                                // under 60 is one off... Compensate.
                                nSerialDate++;
                        }

                        // Modified Julian to DMY calculation with an addition 
of 2415019
                        int l = nSerialDate + 68569 + 2415019;
                        int n = ( 4 * l ) / 146097;
                        l = l - ( 146097 * n + 3 ) / 4;
                        int i = ( 4000 * ( l + 1 ) ) / 1461001;
                        l = l - ( 1461 * i ) / 4 + 31;
                        int j = ( 80 * l ) / 2447;
                        nDay = l - ( 2447 * j ) / 80;
                        l = j / 11;
                        nMonth = j + 2 - ( 12 * l );
                        nYear = 100 * ( n - 49 ) + i + l;
                }

Leider ist halt die Prüfung der NumberFormat ein Pfusch, weil es ja sooo viele 
Datumsformate geben
kann, ich aber noch keine Property gefunden habe, die mich darüber informieren 
könnte, daß es sich
um ein Datumsformat handelt.
Also optimal wäre anstelle des NumberFormat sowas wie "IsDateFormat" oder so 
....

Wenn aber niemand eine bessere Property kennt, dann lebe ich einfach mit der 
Situation und hoffe das
beste :-)


Gruß Mansur

> -----Original Message-----
> From: [EMAIL PROTECTED] 
> [mailto:[EMAIL PROTECTED] On Behalf Of Herbert Hahn
> Sent: Wednesday, February 08, 2006 5:54 PM
> To: csharp.net@glengamoi.com
> Subject: AW: [CSharp.net] Unter c# auf Excel-Range zugreifen
> 
> Gibt’s da keinen Cast so wie tostring(ThisApplication.Selection as
> Excel.Range)
> 
> > -----Ursprüngliche Nachricht-----
> > Von: [EMAIL PROTECTED] [mailto:csharp.net- 
> > [EMAIL PROTECTED] Im Auftrag von Mansur Esmann [OM]
> > Gesendet: Mittwoch, 08. Februar 2006 16:41
> > An: csharp.net@glengamoi.com
> > Betreff: [CSharp.net] Unter c# auf Excel-Range zugreifen
> > 
> > Hi,
> > 
> > Excel.Range result = ThisApplication.Selection as Excel.Range;
> > 
> > System.Array ar = result as System.Array;
> > 
> > Leider erhalte ich für Zellen mit Datum kein "wirkliches" 
> Datum zurück ...
> > Statdessen bekomme ich eine Zahl genauso, wie wenn ich in Excel das 
> > Datum zur Zahl wandle ...
> > 
> > Hat mir jemand einen Vorschlag wie ich:
> > A.) erkennen kann, daß es sich um ein Datum handelt und
> > B.) wie ich ggf. die Zahl (Bspw. 01.01.2004 = 37987) wieder 
> zu einem 
> > Datum bekomme?
> > 
> > Gruß Mansur
> > 
> > _______________________________________________
> > CSharp.net Mailingliste, Postings senden an:
> > CSharp.net@glengamoi.com
> > An-/Abmeldung und Suchfunktion unter:
> > http://www.glengamoi.com/mailman/listinfo/csharp.net
> 
> 
> _______________________________________________
> CSharp.net Mailingliste, Postings senden an:
> CSharp.net@glengamoi.com
> An-/Abmeldung und Suchfunktion unter:
> http://www.glengamoi.com/mailman/listinfo/csharp.net
> 

_______________________________________________
CSharp.net Mailingliste, Postings senden an:
CSharp.net@glengamoi.com
An-/Abmeldung und Suchfunktion unter:
http://www.glengamoi.com/mailman/listinfo/csharp.net

Reply via email to