Hilft dir eventuell die Funktion "getType()" weiter?

Die liefert dir nen integer, der den Datentyp widerspiegeln soll
(wie z.B. Type.GetType("System.String")) nur in deinem Fall
eben ((Excel.Range).getType() == x)?

Gruß
Patrick


> -----Original Message-----
> From: [EMAIL PROTECTED] 
> [mailto:[EMAIL PROTECTED] On Behalf Of Mansur 
> Esmann [OM]
> Sent: Donnerstag, 9. Februar 2006 09:43
> To: csharp.net@glengamoi.com
> Subject: RE: [CSharp.net] Unter c# auf Excel-Range zugreifen
> 
> 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
> 


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

Antwort per Email an