Laden...

Double-Wert aus Excel

Erstellt von Mon5tar vor 9 Jahren Letzter Beitrag vor 9 Jahren 2.314 Views
M
Mon5tar Themenstarter:in
2 Beiträge seit 2015
vor 9 Jahren
Double-Wert aus Excel

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

709 Beiträge seit 2008
vor 9 Jahren

Hallo,
versuch mal

bool result = double.TryParse(rng.Value.ToString(), out dbl_CellValue);
344 Beiträge seit 2006
vor 9 Jahren

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

T
461 Beiträge seit 2013
vor 9 Jahren

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... 😄

1.696 Beiträge seit 2006
vor 9 Jahren

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.

Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.

**:::

Gelöschter Account
vor 9 Jahren

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)

M
Mon5tar Themenstarter:in
2 Beiträge seit 2015
vor 9 Jahren

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 😃