ole is komisch



  • Hi all

    habe nur mal eine frage zwischendurch, weil ich mit der ole anwendung, um excel zu starten so meine probleme habe... 😕
    meine frage ist, ob ich das ganze ole auch weglassen kann, und nur aus meinem programmablauf excel mit irgendeinem befehl starten kann??? 😕
    in etwa so:
    {
    lalala;
    dummdidumm;
    starte excel;
    usw...
    }

    hope it´s clear
    thx sandra 🙄



  • Excel starten hat doch nix mit OLE zutun



  • or mit odbc und weiss was ich, was ich noch alles gefunden habe... 😮
    das in der faq verstehe ich net, deswegen hoffe ich, daß du mir sagen kannst wie excel denn aus meinem prog einfach starten lassen kann???

    riesendank sandra :p



  • einfach die Zeile: ShellExecute(NULL,"Open","Excel","","",SW_SHOWNORMAL );
    schreiben. Dann sollte es funzen.



  • einzigartig, so soll es sein 🙂

    kann ich mit dem befehl auch eine bestimmte arbeitsmappe öffnen??? 😕

    thx sandra



  • Du musst schon definieren, was Du mit Excel machen willst.
    1. Willst Du es nur starten, wie Du schreibst, dann nimm ShellExecute!
    2. Willst Du es in Deine Anwendung integrieren, dann brauchst Du OLE!
    3. Willst Du Daten transferieren, dann kannst Du
    3.1 Textdateien (*.csv) verwenden und Excel mit Parameter starten
    3.2 COM-Schnittstellen von Excel verwenden (spezifische, aber erweiterte Funktionalität, schnell)
    3.3 Datenbank-Schnittstellen verwenden (allgemeingültig, nicht auf Excel spezifiziert, langsamer)



  • hatte vor daten in eine bestimmte mappe an eine bestimmte stelle einzufügen...
    die daten werden von meinem prog errechnet und dann soll er es selbstständig in excel reinschreiben...
    meine lösung bis jetzt:
    alle daten in die zwischenablage
    -dann excel starten
    -zwischenablage ausgeben
    -zwischenablage löschen

    so hatte ich mir das vorgestellt

    sandra



  • Also dazu empfehle ich dir das ganze mit ADO zu machen(Das ist auf jeden Fall sauberer). Ob das so geht, wie du dir das Vostellst, wage ich zu bezweifeln.) Da kannst du dann wie bei einer DB Sheets erstellen und bestimmte Zellen mit Daten füllen.



  • Wieso ADO?
    ADO ist ein Aufsatz auf OLEDB für Scriptsprachen.
    Ist C++ neuerdings eine Scriptsprache?



  • eine letzte frage, dann kümmer ich mich um eine andere möglichkeit,die ihr empfohlen habt... 😃

    aber damit das prog erstma laufen kann:
    kann ich mit dem befehl shellexecute auch eine bestimmte arbeitsmappe in excel gleich öffnen lassen 😕

    oder geht auch:
    ShellExecute(NULL,"Open","abgespeicherteArbeitsMappe","","",SW_SHOWNORMAL );

    thx sandra



  • hab da doch gerade was gefunden, nach langem suchen in der faq :p 😃

    shellexecute(m_hWnd,"open","text.txt",0,0,SW_MAXIMIZE);

    hoffe das klappt



  • Mit ShellExecute kannst Du keine anwendungsspezifischen Sachen, wie z.B. Arbeitsmappen, Copy&Paste usw. steueren!



  • dankeschön hat sich alles erledigt, bin ole, odbc usw übergangen

    bin bei der version von mir geblieben:

    1.)werte in Zwischenspeicher (clipboard) schreiben
    2.)mit shellexecute meine arbeitsmappe öffnen
    3.)meine arbeitsmappe so präpariert, daß wenn sie gestartet wird, den Zwischenspeicher abfragt

    ich weiss, nicht elegant, aber auf die schnelle ersteinmal eine lösung 😃

    und jetzt habe ich ja zeit mich mit datenbanken und schnittstellen auseinanderzusetzen^^

    danke an alle sandra



  • Frauen...?!! 😉



  • Mhm dabei ist der Zugriff auf Exel mittels COM doch sehr einfach, wenn man gute Beispiele hat.
    Ich habe ganze Packte mit Beispielen für VB/C++/MFC von der MSDN-HP und die Links sind in der FAQ:
    Word/Excel über ActiveX fernsteuern

    // For optional arguments
          COleVariant vOpt((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
    
          // Instantiate Excel
          _Application oApp;
          oApp.CreateDispatch("Excel.Application");
          if (!oApp)
          {
              AfxMessageBox("Cannot start Excel.");
              return;
          }
    
          //Get the Workbooks collection so that you can add a new
          //workbook
          Workbooks oBooks = oApp.GetWorkbooks();
          _Workbook oBook = oBooks.Add(vOpt);
    
          //Get the Worksheets collection of the new Workbook so that
          //you can get the IDispatch for the first WorkSheet
          Worksheets oSheets = oBook.GetWorksheets();
          _Worksheet oSheet = oSheets.GetItem(COleVariant((short)1));
    
          //*** ADD DATA TO THE WORKSHEET
    
          //Add Headers to Row 1 of the worksheet
          Range oRange;
          oRange = oSheet.GetRange(COleVariant("A1"), vOpt);
          oRange.SetValue(COleVariant("Date"));
          oRange = oSheet.GetRange(COleVariant("B1"), vOpt);
          oRange.SetValue(COleVariant("Order #"));
          oRange = oSheet.GetRange(COleVariant("C1"), vOpt);
          oRange.SetValue(COleVariant("Amount"));
          oRange = oSheet.GetRange(COleVariant("D1"), vOpt);
          oRange.SetValue(COleVariant("Tax"));
    
          //Create a safe array that is NUMROWS x 3 --
          //column 1 will contain dates column 2 will contain strings
          //and column 2 will contain numbers
          COleSafeArray sa;
          DWORD dwElements[2];
          dwElements[0]= NUMROWS;    //Number of rows
          dwElements[1]= 3;          //Number of columns
          sa.Create(VT_VARIANT, 2, dwElements);
    
          //Populate the safe array with the data
          long index[2];
          long lRow;
          COleVariant vTemp;
          COleDateTime vDateTime;
          CString s;
    
          for(lRow=0;lRow<=NUMROWS-1;lRow++)
          {
             index[0] = lRow;
    
             //Fill the first column with dates
             index[1] = 0;
             vDateTime.SetDate(1999, rand()%12, rand()%28);
             sa.PutElement(index, (COleVariant)vDateTime);
    
             //Fill the second column with strings
             index[1] = 1;
             s.Format("ORDR%d", lRow+1000);
             vTemp = s;
             sa.PutElement(index, vTemp);
    
             //Fill the third column with numbers
             index[1] = 2;
             vTemp = (long)rand();
             sa.PutElement(index, vTemp);
          }
    
          //Fill a range, starting at A2 with the data in
          //the safe array
          oRange = oSheet.GetRange(COleVariant("A2"), vOpt);
          oRange = oRange.GetResize(COleVariant((short)NUMROWS),
                                      COleVariant((short)3));
          oRange.SetValue(sa);
          sa.Detach();
    
          //*** ADD FORMULAS TO THE WORKSHEET
    
          //Fill the fourth column with a formula to compute the
          //sales tax. Note that the formula uses a "relative"
          //cell reference so that it fills properly.
          oRange = oSheet.GetRange(COleVariant("D2"), vOpt);
          oRange = oRange.GetResize(COleVariant((long)NUMROWS),
                                    COleVariant((long)1));
          oRange.SetFormula(COleVariant("=C2*0.07"));
    
          //*** FORMAT THE WORKSHEET
          oRange = oSheet.GetRange(COleVariant("A1"), COleVariant("D1"));
          Font oFont = oRange.GetFont();
          oFont.SetBold(COleVariant((short)TRUE));//Apply Bold to Headers
          oRange = oRange.GetEntireColumn();
          oRange.AutoFit();                    //AutoFit the columns 1:4
    
          //Make Excel visible and give the user control
          oApp.SetVisible(TRUE);
          oApp.SetUserControl(TRUE);
    

Anmelden zum Antworten