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 Erfolgif(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??