Visual Cplusplus -> Excel 2007



  • Hallo, folgendes Problem: Ich schreibe an einem Programm mit dem ich meine Messdaten auswerten kann. Die grafische Auswertung sowie einige Anpassungen werden in Excel gemacht. Excel erhält zur Zeit die Daten noch von Origin. Da dies sehr lange dauert und umständlich ist möchte ich meine Quelldaten TXT-Dateien mit C++ umrechnen und dann in Excel schreiben. Das umrechnen klapp auch sehr gut nur leider kann ich die Ergebnisse nur in TXT-Dateien ausgeben und ich möchte sie in eine ganzbestimmte Excel Tabelle haben. Bis jetzt habe ich folgenden Code gefunden:

    using namespace Microsoft::Office::Interop;
    
    try {
      Microsoft::Office::Interop::Excel::ApplicationClass^ ExcelApp =  gcnew Microsoft::Office::Interop::Excel::ApplicationClass();
      ExcelApp->Visible=true;  
      Object^ NoArg = System::Reflection::Missing::Value;  
      // hier die Anweisungen von unten einfügen
        Microsoft::Office::Interop::Excel::Workbook^ wb=ExcelApp->Workbooks->Add(NoArg);
        Microsoft::Office::Interop::Excel::Worksheet^ ws=dynamic_cast<Microsoft::Office::Interop::Excel::Worksheet^>(ExcelApp->Workbooks[1]->Worksheets[1]);
        ws->Cells[1,1]="123";
        Microsoft::Office::Interop::Excel::Range^ c=  dynamic_cast<Microsoft::Office::Interop::Excel::Range^>(ws->Cells[1,1]);
        c->Font->Size=12;
    }
    catch ( Exception^ e) {
      MessageBox::Show(e->Message);
    }
    

    der schreibt mir 123 in die 1. Spalte und Zeile. Das klappt auch ganz gut nur leider habe ich unzählige warnungen c4691 nach dem Compilieren. Ich bin leider nur ein Copy-Past Codeschreiber der den Code immer nur anpasst. Ich habe mit Projekt - Eigenschaften - Verweise: Excel 12.0 ObjetLibary hinzugefügt weil ich das wo gelesen habe.

    Suche ein Beispiel mit dem ich ein ganz besitmmte Excel Tabelle ansprechen kann und dann da Werte auf dem ersten Worksheet mit ner Schleife aus Arrays reinschreibe. Ich habe auf der Seite http://www.codeproject.com tolle Beispiele gefunden leider habe ich immer nur Fehlermeldungen gehabt wenn ich compiliert habe. Vielleich hat jemand ein laufendes Beispiel oder weiß rat?!?



  • M_i_c_h_a_e_l schrieb:

    Ich bin leider nur ein Copy-Past Codeschreiber der den Code immer nur anpasst.

    LOL. Dann sag doch deinem Chef, er solle einen richtigen Programmierer einstellen.



  • Leider hilft mir dieser Tip nicht weiter! Würde mich mehr über einen unterstüzenden Beitrag freuen. Vielleicht werde ich dann selbst zu einem Programmierer!



  • M_i_c_h_a_e_l schrieb:

    Leider hilft mir dieser Tip nicht weiter! Würde mich mehr über einen unterstüzenden Beitrag freuen. Vielleicht werde ich dann selbst zu einem Programmierer!

    Aber vielleicht Deinem Chef :p



  • Servus!

    Hab derzeit auch mit Automation von Excel zutun!

    ich kann dir gerne mal hier ein Teil meiner Klasse als Beispiel dafür geben. Allerdings verwende ich, da Office 2003, die Excel 11.0 ObjectLibary.

    Sollte aber kaum Unterschiede machen.

    Microsoft::Office::Interop::Excel::Application^ oXl;
    Microsoft::Office::Interop::Excel::_Workbook^ oWB;
    Microsoft::Office::Interop::Excel::Range^ oRng;
    
    try
    	{
    		// Excel Starten
    		oXl	= gcnew Excel::Application();
    		oXl->Visible		= false; //Sichtbarkeit von Excel 
    		oXl->DisplayAlerts	= false; //Zeigt Warnunge innerhalb Excel an
    
    		// Template laden
    		oWB				= oXl->Workbooks->Add(local); //local ist mein Dateipfad für eine template.xls file 
    		oSheet			= (Excel::_Worksheet^)oWB->ActiveSheet;
    
            //Jetzt kannst du über
            oSheet->Cells[3 , 3] = "fgjdfkj";
    		oSheet->Cells[5 , 3] = "fdsjhdkfjg";
    		oSheet->Cells[6 , 3] = "blasd";
    		oSheet->Cells[8 , 2] = "asdasd"; 
             //werte eintragen
    
            //Um neue sheets anzulegen gehts du so vor:
            oWB->Sheets->Add(Type::Missing,oSheet,Type::Missing,Type::Missing);
    
            //Um jetzt in das neue Sheet was zu schreiben musst du es erst auswählen
            oSheet	= (Excel::_Worksheet^)oWB->Worksheets[SheetName]; //SheetName ist der Name des auszuwählenden Sheets
    	oSheet	->Select(Type::Missing);
    	oSheet	= (Excel::_Worksheet^)oWB->ActiveSheet;
    
            //Jetzt kannst du wieder über 
            oSheet->Cells[4,6] = "fsdfsdf";
            //sachen in die Zellen schreiben 
    
            //Um eine TextLink von einem sheet zum nächsten einzufügen gehst du so vor:
            oRng = (Excel::Range^)oSheet->Range["A1",Type::Missing];
    		Where = sheetNameWithoutNumber + "1!A1"; //"1!A1 gibt die Sheetnumber und die Zelle an wo der Link hin führt
    		oSheet->Hyperlinks->Add(oRng,"",Where,"Zurück zur Tabelle","Zurück");
    
    //Zum Speichern und beenden das hier ausführen
    oWB->SaveCopyAs("C:\\bla\\test.xls"));
    oXl->Quit();
    

    So, das sollte fürs erste reichen.
    Und an die anderen, denk bitte daran das ihr genauso mal so angefangen habt und bevormundet nicht die "Anfänger" (wobei Excel-Automation nicht gerade was für den Anfänger ist, jedenfalls nicht mit CLI)

    Hoffe konnte helfen.



  • Super genial mit den Anmerkungen. Ich habe das Programm jetzt auch so weit das er mir die Daten da sauber reinschreibt.

    Mit Excel::Workbook^ wb=ExcelApp->Workbooks->Add("C:\\Test.xls"); öffnet das Programm ja die Excel-Datei und ein Abbild von der Datei wird erstellt Test1.xls Gibt es auch eine Befehl der diese neue Datei unter einem neu Definierten Dateinamen und Pfad abspeichert und Excel wieder schließt?



  • teddds schrieb:

    Und an die anderen, denk bitte daran das ihr genauso mal so angefangen habt

    Sicherlich, im Kenntnisstand waren wir da auch mal. Aber mit einem Statement wie "Ich bin leider nur ein Copy-Past Codeschreiber der den Code immer nur anpasst" oder damit einhergehenden Einstellungen kann ich mich damals wie heute nicht identifizieren. Das Statement ist nicht nur etwas traurig, sondern insbesondere eine Steilvorlage.

    Wenn Michael etwas lernen will, wäre es am besten, wenn er die Dokumentation läse, Tutorien durcharbeitete und dann dedizierte Fragen zu einzelnen Unklarheiten stellte. Aber mit "habe ich immer nur Fehlermeldungen gehabt wenn ich compiliert habe. Vielleich hat jemand ein laufendes Beispiel oder weiß rat?!?", d.h., ohne ausreichende Eigeninitiative, wird er nicht weit kommen.



  • audacia schrieb:

    teddds schrieb:

    Und an die anderen, denk bitte daran das ihr genauso mal so angefangen habt

    Sicherlich, im Kenntnisstand waren wir da auch mal. Aber mit einem Statement wie "Ich bin leider nur ein Copy-Past Codeschreiber der den Code immer nur anpasst" oder damit einhergehenden Einstellungen kann ich mich damals wie heute nicht identifizieren. Das Statement ist nicht nur etwas traurig, sondern insbesondere eine Steilvorlage.

    Wenn Michael etwas lernen will, wäre es am besten, wenn er die Dokumentation läse, Tutorien durcharbeitete und dann dedizierte Fragen zu einzelnen Unklarheiten stellte. Aber mit "habe ich immer nur Fehlermeldungen gehabt wenn ich compiliert habe. Vielleich hat jemand ein laufendes Beispiel oder weiß rat?!?", d.h., ohne ausreichende Eigeninitiative, wird er nicht weit kommen.

    Okay, da gebe ich dir recht. Allerdings stand ich vor kurzem vor genau dem selben Problem, denn Tutorials bzw. Bücher für Excel Automation mit CLI sind äußers selten. Ich hab mir das auch nur durch Tutorials mit C# erarbeiten können und wenn M_i_c_h_a_e_l schon sagt das er Null Ahnung hat wirds sicher nix professionelles sein und da geb ich gerne mal ein paar Zeilen Code als Inspiration raus.

    @M_i_c_h_a_e_l
    Die Befehle habe ich oben hinzugefügt.


Anmelden zum Antworten