Einen AnsiString an Excel übergeben



  • Wie man daten aus einem dbgrid an excel übergibt weiß ich aber ich bekomme es nicht hin, den inhalt einer ansiString variablen in ein excel sheet zu nageln.

    es gibt immer probs mit dem typ der variablen "mandantenNummer_Ges "

    ich muss das bestimmt zu nem variant casten, aber wie???

    Variant strData;
    
                int j = 4;
    
                    while (!Form1->grid_Anz->DataSource->DataSet->Eof)
                    {
                        // Übertrage das Datum//////////////////////////////////
                        //Fields n = 0 = datum;1 = kennziffer, 2 = betrag
                        strData = Form1->grid_Anz->Fields[0]->AsVariant;
    
                        // j steht für die zeile und 1 für die spalte
                        MyWS.OlePropertyGet("Cells").OlePropertyGet("Item", j,1).
                        OlePropertySet("Value", strData);
                        /////////////////////////////////////////////////////////
    
                        // Übertrage die Kennzahl////////////////////////////////
                        strData = Form1->grid_Anz->Fields[1]->AsVariant;
    
                        // j steht für die zeile und 2 für die spalte
                        MyWS.OlePropertyGet("Cells").OlePropertyGet("Item", j,2).
                        OlePropertySet("Value", strData);
    
                        /////////////////////////////////////////////////////////
    
                        // Übertrage den Betrag//////////////////////////////////
                        strData = Form1->grid_Anz->Fields[2]->AsVariant;
    
                        // j steht für die zeile und 3 für die spalte
                        MyWS.OlePropertyGet("Cells").OlePropertyGet("Item", j,3).
                        OlePropertySet("Value", strData);
                        Form1->grid_Anz->DataSource->DataSet->Next();
                        j++;
                    }
                         //wichtiger teil !!!!!!!!!!!!!!!!!!!!!!!!!//
                        //übertrage Mandantennummer aus Variablen                           
                        //:mandantenNummer_Ges ==> ist ein AnsiString
    
                        MyWS.OlePropertyGet("Cells").OlePropertyGet("Item", 1,4).
                        OlePropertySet("Value", mandantenNummer_Ges);
                        /////////////////////////////////////////////////////
    
                        // führe Makro aus
                        //MyEx.OleFunction("Run", "Personalkostenanalyse");
    


  • Hallo

    es gibt immer probs mit dem typ

    Ja und was für Probleme?!

    Afk kannst du AnsiString an Variant übergeben. In deinem Fall also

    strData = mandantenNummer_Ges;
    OlePropertySet("Value", strData);
    

    bis bald
    akari



  • habe ich probiert!

    strData = mandantenNummer_Ges;
                        MyWS.OlePropertyGet("Cells").OlePropertyGet("Item", 1,4).
                        OlePropertySet("Value", strData);
    

    Schmiert ab mit: "Falscher Variable Typ!"



  • Probier mal eine der beiden folgenden Varianten

    MyWS.OlePropertyGet("Cells").OlePropertyGet("Item", 1,4).
    OlePropertySet("Value", strData.c_str());
    

    oder

    MyWS.OlePropertyGet("Cells").OlePropertyGet("Item", 1,4).
    OlePropertySet("Value", Variant(strData));
    


  • zu1: strData.str() geht nicht bei Variant
    zu2: "falscher Variable Typ!"
    😞 😡



  • Ich hatte fälschlicherweise angenommen, dass strData vom Typ AnsiString ist. Warum übergibst du nicht direkt mandantenNummer_Ges? Abgesehen davon sollte die Variante von akari problemlos funktionieren. Vielleicht liegt es ja gar nicht an strData.



  • weil das von akari auch nicht geht....ich vermute er hat das problem einen ansiString zu übergeben!

    Mache ich das so:

    int castedManNGes;
                        castedManNGes = StrToInt(mandantenNummer_Ges);
                        strData = castedManNGes;
                        MyWS.OlePropertyGet("Cells").OlePropertyGet("Item", 1,4).
                        OlePropertySet("FormulaR1C1" , strData);
    

    ...funktioniert das!!!!
    😕 😮



  • so ein mist!
    ich kann zwar zahlen übergeben aber keine zeichenketten aus einer variablen.

    // j steht für die zeile und 1 für die spalte
     MyWS.OlePropertyGet("Cells").OlePropertyGet("Item", j,2).
     OlePropertySet("Value", strData);
    

    will ich in strData(Variant) zeichenketten speichern bekomme ich immer falscher variabletyp zahlenwerte funktionieren aber.

    schreibe ich

    // j steht für die zeile und 1 für die spalte
                          MyWS.OlePropertyGet("Cells").OlePropertyGet("Item", j,2).
                          OlePropertySet("Value", "hasse nich gesehen");
    

    geht das auch 😕
    ratlos....plz help



  • Wie gesagt, probiers mal so

    MyWS.OlePropertyGet("Cells").OlePropertyGet("Item", j,2).OlePropertySet("Value" , mandantenNummer_Ges.c_str());
    

    Du könntest auch einfach die im Link erwähnte Wrapperklassen verwenden
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-39259.html



  • ja so gehts!!!! DANKE Braunstein!
    Was ist das für eine Funktion???
    Was macht die und warum ist das hier notwendig???



  • Schau doch einfach mal in die Hilfe zu AnsiString.
    c_str() gibt einen const char* zurück (Nullterminiert), der den String enthält. Scheinbar erwartet OlePropertySet("Value" , ..); einen derartigen String. Normalerweise steht hier ein Variant und der hat eigentlich einen Konstruktor für AnsiString. Schau doch auch mal in die Bibliothek von AndreasW (siehe obigen Link). Die verwende ich auch. Ich habe sie allerdings noch etwas verändert (debuggt und erweitert). Wenn du willst kann ich sie dir zuschicken oder falls ein Moderator das zulässt in die FAQ mit einfügen.



  • Wenn sie ordentlich kommentiert ist, gerne. 🙂
    Poste sie ggf. hier, wir werden den FAQ-Eintrag dann entsprechend erweitern.


Log in to reply