OLE und Excel



  • Ich greife auf Excel mit Hilfe von OLE , es klappt auch wunderbar 🙂
    Jetzt bin ich aber an einen Punkt eingekommen wo ich nicht weiter komme 😕
    und zwar, wie kann ich eine ganze Zeile löschen?? Folgendes habe ich versucht leider ohne Erfolg 😞

    if(m_lpDisp == NULL)
    		return -1;	
    	m_lpDisp = m_sheet.GetRange(COleVariant(strcell), COleVariant(strcell));	
    
    	ASSERT(m_lpDisp);
    	m_range.AttachDispatch(m_lpDisp);
    	m_range.GetEntireRow();
    	// löschen von Zellen
    	m_range.Delete(COleVariant((long)-4161));
    


  • Ich sehe bei Dir zwei Probleme:

    1. Die Konstante in Delete( Shift ) heisst lt VBA-Excel Doku entweder:
    xlShiftToLeft = -4159 oder
    xlShiftUp = -4162.

    Ein Wert -4161 führt bei mir zu einer Ausnahme.

    2. Die Eigenschaft EntireRow liefert dir ein Range-Objekt zurück auf das du eigentlich den Delete aufrufen solltest. Bisher wird der Returnwert von GetEntireRow von dir unterschlagen.

    Mache ich beides, so funktioniert es bei mir.



  • Erstmal Danke,

    es ist richtig Punkt 1 hat geholfen, bei Punkt 2 verstehe ich leider nicht ganz genau was Du meinst, kannst Du ein wenig code liefern.

    Weist Du noch vielleich wie ich ganze Spalte löschen kann zB. Spalte 2 ??



  • hast dur mal den VBA Code dazu angeschaut? Wenn nein:

    Rows("2:2").Select
        Selection.ClearContents
    

    ich denke damit solltest du auch deine C++ Funktion hinbekommen. Wenn nicht melde ich mich nachem Vesper noml



  • ja mit ClearContents kann ich den inhalt super löschen, Vielen Dank.
    Wie kann ich aber ganze Zeillen / Spalten löschen 😮



  • Na siehe meinen letzten Post du holst dir einfach die Rows oder Columns als Range rein. Falls das je nicht reichen sollte mach dann noch auf deine Range ein Select



  • Ja aber wie kann ich die Zelle angeben die ich löschen „dropen „ will?

    m_lpDisp = m_sheet.GetRows();
    ASSERT(m_lpDisp);
    m_range.AttachDispatch(m_lpDisp);
    // und hier will ich Zb die Zelle 12 löschen
    


  • naja droppen würde ich sie nicht eher direkt deleten!

    //Ich nehm an du hast sowas:
    	COleVariant
    		covTrue((short)TRUE),
    		covFalse((short)FALSE),
    		covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
    // dann kannste das machen:
    	m_range = m_Sheet.GetRange(COleVariant("A12"), COleVariant("A12"));//Spalte ist in dem Fall egal! hauptsache die Zeile stimmt
    	m_range= m_range.GetEntireRow();
    	m_range.Delete(covOptional);
    


  • scheint zu funktionierne, Danke 😉



  • bitte schön mit Spalten denke ich kommste jetzt allein klar oder?? 😉


Anmelden zum Antworten