Announcement

Collapse
No announcement yet.

AnsiString aus Excel File in Float o.Ä. konvertieren

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • AnsiString aus Excel File in Float o.Ä. konvertieren

    Ich habe ein Problem, ich muss für ein Schulprojekt eine Exceldatei Auslesen, und die darin angegebenen Werte in Floats konvertieren um sie dann weiterverarbeiten zu können.
    Doch wenn ich versuche die AnsiStrings in Floats umzuwandeln, dann gibt es eine Errormeldung, die besagt, dass das nicht möglich sei. (bei den Ausgelesenen werten handelt es sich um Zahlen )

    Als möglichkeit die Exceldatei auszulesen habe ich in diesem Forum folgende möglichkeit gefunden:
    void __fastcall TForm1::LesenClick(TObject *Sender)
    {
    if (OpenDialog1->Execute()) //*.xls-Dateinamen + Pfad angeben
    {
    try
    {
    Variant Excel;
    Excel = Variant::CreateObject("Excel.Application");
    Excel.OlePropertyGet("ActiveWorkBook");
    // Excel-Datei öffnen
    Excel.OlePropertyGet("WorkBooks").OleFunction("Ope n", OpenDialog1->FileName);
    //Excel.OlePropertySet("Visible", true); //Excel beim Arbeiten anzeigen, false = ausblenden
    Variant Sheet;
    Sheet=Excel.OlePropertyGet("ActiveSheet");
    AnsiString Zelleninhalt = Sheet.OlePropertyGet("Cells", 1, 1).OlePropertyGet("Value");// Zeile 1, Spalte 1 auslesen
    ShowMessage(Zelleninhalt);
    ShowMessage("Excel wird jetzt wieder geschlossen");
    Excel.OleFunction("Quit");
    Excel = Unassigned;
    }
    catch(...){}
    }
    Nur für den Fall das da das Problem liegt...

    Ich habe versucht den AnsiString mittels StrToFloat() zu konvertieren...

    In Hoffnung auf Hilfe,
    Omti

  • #2
    Nur um mal die Fehlerquellen einzugrenzen:

    AnsiString Zelleninhalt = Sheet.OlePropertyGet....
    Da steht dann tatsächlich der Zelleninhalt drin?

    bei den Ausgelesenen werten handelt es sich um Zahlen
    Was sind das für Zahlen??
    Ein 3.1415 kann nicht umgewandelt werden...
    ein 3,1415 schon eher
    Zuletzt editiert von Christian Marquardt; 22.04.2008, 16:13.
    Christian

    Comment


    • #3
      Es handelt sich dabei bisher eigentlich nur um natürliche Zahlen... kein komma, kein punkt.

      Und es steht dann tatsächlich auch der Zelleninhalt drin... wenn ich ihn z.B. in ein Memo schreibe stehen da die selben Zahlen wie auch in der Excel Tabelle...
      Allerdings will das Programm sie einfach nicht als Zahlen erkennen...
      Von daher frage ich mich halt ob ich die falsche Methode verwende um den AnsiString zu kopieren, oder ob ich die Werte auch gleich in einen float schreiben kann.

      Comment


      • #4
        Allerdings will das Programm sie einfach nicht als Zahlen erkennen...
        Wie gibt das Programm das zu erkennen? Welcher Fehler kommt?

        Es handelt sich dabei bisher eigentlich nur um natürliche Zahlen... kein komma, kein punkt.
        Warum dann ein float??

        Wo erfolgt nun wie die Umwandlung?

        Wo wird der String kopiert?

        Wenn du das in dem String drin hast, ist doch das weitere kein Problem. Weitere mögliche Ursachen sind Leerzeichen, Zeilenumbrüche usw. die mit in der Zelle stehen. Entspricht die Länge des Strings der Zeichenfolge?

        Wenn du nun eh keine Fließkommawerte hast benutze

        StrToInt

        oder besser

        StrToIntDef
        Christian

        Comment


        • #5
          Im Projekt KubSpline.exe ist eine Exception der Klasse EConvertError aufgetreten. Meldung: '''ist kein gültiger Fließkommawert'.Proceß wurde angehalten. Fortfahren mit Einzelschritt oder Start.
          Ist die Fehlermeldung...

          Und Float habe ich verwendet, da ich eigentlich noch plante Kommastellen zu verwenden.
          Nunja, allerdings funktioniert es mit StrToInt auch nicht (ich hab schon nen int verwendet ) allerdings kann ich ja mal StrToIntDef probieren. Wobei ich jetzt schonmal gerne wüsste wofür das def steht.

          Edit: Bei StrToIntDef spuckt er mir eine interessante Fehlermeldung aus (er kompiliert es nichtmal):
          To few parameters in call to '_fastcall Sysutils::StrToIntDef(const System::AnsiString,int)'.
          ...Damit kann ich jetzt noch weniger anfangen.
          Zuletzt editiert von Omti; 22.04.2008, 16:41.

          Comment


          • #6
            Du hast eine Hilfe???

            Befehl markieren & F1 & staunen
            Christian

            Comment


            • #7
              st kein gültiger Fließkommawert'
              Deutet wohl darauf hin, dass da wohl noch etwas anderes in der Zelle außer Ziffern steht. Zwischenzeitlich wirst du ja wohl nun ermittelt haben, wofür das Def steht und zwar das Programm läuft, aber eine Umwandlung nicht stattfindet.

              Setze dann einen Breakpoint und schaue nach, was in dem String steht.
              Christian

              Comment


              • #8


                sollte so ein Ergebnis geben
                Zuletzt editiert von Christian Marquardt; 01.03.2009, 11:03.
                Christian

                Comment


                • #9
                  Originally posted by Christian Marquardt View Post
                  Deutet wohl darauf hin, dass da wohl noch etwas anderes in der Zelle außer Ziffern steht.
                  Hm... heißt das das die Exel Spalteneinstellungen mir da einen Reingepfuscht haben, und die Zahlen nicht als solche behandelt worden sind, sonder als datum oder sowas? Naja, ich experimentier mal ein bisschen herum.

                  Comment


                  • #10
                    heißt das das die Exel Spalteneinstellungen mir da einen Reingepfuscht haben
                    Das muss ich jetzt nicht mehr verstehen??

                    Wenn in dem String das Richtige drin steht, was hat Excel noch damit zu tun?

                    Bitte debugge die Stelle und schau nach was im String für Zeichen drin stehen.
                    Christian

                    Comment


                    • #11
                      Gelöst

                      Originally posted by Christian Marquardt View Post
                      Wenn in dem String das Richtige drin steht, was hat Excel noch damit zu tun?
                      Nichts wie ich nun festgestellt habe... Man braucht gar keinen Ansistring verwenden...
                      statt:
                      AnsiString Zelleninhalt = Sheet.OlePropertyGet("Cells", 1, 1).OlePropertyGet("Value");
                      geht auch:
                      float Zelleninhalt = Sheet.OlePropertyGet("Cells", 1, 1).OlePropertyGet("Value");

                      ...manchmal übersieht man echt die einfachste Lösung

                      Bitte debugge die Stelle und schau nach was im String für Zeichen drin stehen.
                      hm wie geht denn das? im informatik-unterricht haben sie uns bisher nur beigebracht wie man drauflosprogrammiert... nicht wie man das Programmierte bugfrei kriegt

                      Naja, danke für die Hilfe ,denn nun habe ich immerhin schon mal dieses Problem behoben.

                      Ich hoffe ich habe deine Zeit nicht allzusehr verschwendet.
                      Mit Dank,
                      Omti

                      Comment


                      • #12
                        sone Unterrichte kenn ich
                        Da wird einem "Hello World" gezeigt und dann verweist man nur noch auf Google.
                        Die Leute die sowas Unterrichten haben meistens nur einen Wochenendkurs gemacht und werden dann auch die Menschheit los gelassen.
                        Aber gib nicht auf und besorg dir mal nen ordentliches Buch. Ich kann dir die sachen von Dirl Louis ans Herz legen.

                        Comment

                        Working...
                        X