Hallo zusammen 😃
also ich habe nun folgendes Problem... Ich öffne ein Excel-Sheet um Werte daraus zu lesen. Das hat bisher auch super funktioniert, bis mit Excel keinen String mehr zurück gegeben hat.
Da mein VS mir sagte, dass das ein Double-Wert sei, den ich zurück bekommen würde (Inhalt: 41064.0) habe ich gedacht ich könnte Abfragen ob dieser Wert ein double-Wert ist und diesen Anschließen in ein String konvertieren...
Dafür habe ich folgenden Code geschrieben:
public string GetCellValue(long lngParRow, long lngParCol)
{
string str_CellValue = null;
double dbl_CellValue = 0;
Microsoft.Office.Interop.Excel.Worksheet ws = myExcelApplication.ActiveSheet;
Microsoft.Office.Interop.Excel.Range rng = (Microsoft.Office.Interop.Excel.Range)ws.Cells[lngParRow, lngParCol];
bool result = double.TryParse(rng.Value, out dbl_CellValue);
if (result == true)
{
str_CellValue = dbl_CellValue.ToString();
}
else
{
str_CellValue = rng.Value;
}
return str_CellValue;
}
Nun sagt VS mir:
Fehlermeldung:
Die beste Übereinstimmung für die überladene double.TryParse(string, out double)-Methode enthält einige ungültige Argumente.
Verwende ich es falsch? o.o Ich verstehe es nicht 😦
Danke im Voraus und Gruß 😃
Mon5tar
Hallo,
versuch mal
bool result = double.TryParse(rng.Value.ToString(), out dbl_CellValue);
Hallo,
Wieso den Double rnd.Value in einen String umwandeln, dann in einen Double parsen und dann wieder in einen String umwandeln zum speichern.
Gruss Lothi
So wie es aussieht, will er damit den Typen auf double testen...
Ich habe den Titel mal angepasst, so dass Suchende auch etwas damit anfangen können. EDIT: Ich sollte beim Wort "Shift" im Titel das "f" nicht vergessen... 😄
Da mein VS mir sagte, dass das ein Double-Wert sei, den ich zurück bekommen würde (Inhalt: 41064.0) habe ich gedacht ich könnte Abfragen ob dieser Wert ein double-Wert ist und diesen Anschließen in ein String konvertieren...
rng.Value.GetType()
sollte dir Auskunft darüber geben, was es ist.
**:::
Wie bereits angedeutet ist Range.Value kein String den double.TryParse als erstes Argument erwartet. Die Fehlermeldung ist da eigentlich recht deutlich, kann aber verwirrend sein wenn man aus VB/VBA kommt wo implizite Typenkonvertierung(besonders auf String) zum Service gehört.
Die bereits vorgeschlagenen Lösungen würde ich so nicht ganz unterschreiben, obwohl sie natürlich in die richtige Richtung gehen.
Range.Value kann immer auch null sein daher ist ToString() oder GetType() nicht eben ideal.
Besser wäre:
if(range.Value is double)
{
}
Wenn der Wert keine Nachkommastellen hat, kann es dazu kommen das der Wert als Int32 bei dir ankommt.
Aber irgendwie habe ich den Eindruck das du den Wert immer als String willst und einfach nur ToString() nicht kennst 😉 In dem Fall kann dir der Ursprungstyp egal sein(wenn du keinen Wert auf eine bestimmte formatierte Anzeige legst)
Vielen lieben Dank für die zahlreichen Antworten 😃
Wie bereits angedeutet ist Range.Value kein String den double.TryParse als erstes Argument erwartet. Die Fehlermeldung ist da eigentlich recht deutlich, kann aber verwirrend sein wenn man aus VB/VBA kommt wo implizite Typenkonvertierung(besonders auf String) zum Service gehört.
Die bereits vorgeschlagenen Lösungen würde ich so nicht ganz unterschreiben, obwohl sie natürlich in die richtige Richtung gehen.
Range.Value kann immer auch null sein daher ist ToString() oder GetType() nicht eben ideal.
Besser wäre:
if(range.Value is double) { }
Wenn der Wert keine Nachkommastellen hat, kann es dazu kommen das der Wert als Int32 bei dir ankommt.
Aber irgendwie habe ich den Eindruck das du den Wert immer als String willst und einfach nur ToString() nicht kennst 😉 In dem Fall kann dir der Ursprungstyp egal sein(wenn du keinen Wert auf eine bestimmte formatierte Anzeige legst)
Hat super funktioniert! danke 😃
ja doch... ToString kenne ich, allerdings hatte der nen Problem nen string in ein string zu konvertieren... demnach hat der mir nen Fehler gebracht wenn der eingangswert ein String war.
Kann sein das meine Lösung da nicht ganz optimal ist, aber jetzt gehts 😃