OLE - AnsiString -> Variant



  • Hallo,
    ich versuche gerade per OLE Excel zu steuern, dies funktioniert auch einwandfrei.
    Ich übergebe meiner Anwendung einen Pfad und ein Kennwort. Die ist als AnsiString deklariert. Für die übergabe an Excel (Workbooks.Open) gebe ich dies mit. Ich erhalte dann allerdings die Fehlermeldung das die Typen nicht kompatibel sind. Sobald ich die Wert festlege (siehe Auskommierung) funkt. es einwandfrei.
    Wie kann ich meinen AnsiString in ein Variant umwandeln?

    Variant vFileName, vWDocuments, vWDocument, vReadOnly, vLink, vFormat, vReadPass;
    AnsiString strOpenFile, strPasswort;
    
       vFileName = Variant(strOpenFile);
    
    // vFileName = "c:\\test2.xls";
       vLink = Unassigned;
       vReadOnly = false;
       vFormat = Unassigned;
    // vReadPass = strPasswort;
       vReadPass = "test";
       wbSet.OleFunction("Open", vFileName, vLink, vReadOnly, vFormat, vReadPass);
    


  • Wie wäre es mit einer Fehlermeldung?! Woher sollen wir sosnt wissen welcher Fehler aufgetreten ist.



  • Hallo,

    Du hast da mehrere Varianten. Du kannst deinen AnsiString in ein Variant casten.
    Also

    wbSet.OleFunction("Open", (Variant) vFileName, ...
    

    Das funktioniert zwar, ist mir persönlich aber etwas supekt. Die andere Variante ist mit Hilfe von AnsiString::c_str() einen const char* draus zu machen.
    Also

    wbSet.OleFunction("Open", vFileName.c_str(), ...
    

    Das geht auch.

    Ciao



  • Die Variante mit dem const char* funktioniert, meiner Erfahrung nach, zuverlässiger.



  • Hallo,
    ich habe bei vorgeschlagenen Lösungen getestet. Allerdings mit keinem positivem Ergebnis.

    Wenn ich dem

    Variant vFileName = "c:\\test2.xls";
    

    den Wert so zuweise lädt er die Datei. Übergebe ich allerdings den
    AnsiString

    Variant vFileName = strOpenFile;
    

    Meldet sich die Anwendung mit "Ausnahmefehler aufgetreten"
    Auch das Cast (Variant) oder .c_str() enden auf dem o.g. Fehler.

    Gibt es keine andere Möglichkeit einen AnsiString in ein Variant umzuwandeln?



  • Es müßte auch noch folgendes gehen

    wbSet.OleFunction("Open", Variant(vFileName), ...
    

    da der Konstruktor von Variant für AnsiString überladen ist.



  • Hallo

    ich habe in einen meiner alten Projekte das gefunden

    WordApplication1->Documents->Open(OleVariant(StringToOleStr(AppPath + "test.doc")),
    

    bis bald
    akari



  • Den Ansatz habe ich bereits gehabt. Dabei läuft das ganze auf die Fehlermeldung:
    Falscher Variablentyp.

    wbSet.OleFunction("Open", Variant(vFileName), ...
    

    Wie genau ist der Ansatz mit dem const char* ? Wie meinst ihr das?



  • Das hier ist gemeint:

    Braunstein schrieb:

    wbSet.OleFunction("Open", vFileName.c_str(), ...
    


  • Wobei ich da was verwechselt habe. vFileName ist bei dir ja ein Variant. Es muß also hier rein

    vFileName = Variant(strOpenFile.c_str());
    

    Man könnte das auch so machen

    wbSet.OleFunction("Open", strOpenFile.c_str(), ...
    

Anmelden zum Antworten