Ich programmiere grad in .Net mit C# ein Excel Addin.
ich würd gerne auslesen lassen, welcher Bereich im Excel markiert wird.
Also in 2 Variablen speichern lassen von welcher Zeile x bis zu welcher Zeile y markiert wurde.
Wie mach ich das?
in VBA weiß ichs dass mit
ActiveWindow.RangeSelection.Address
geht...
..aber bei C# hab i null plan
Hallo simethandreas,
das sollte mit der Selection-Property der Application-Klasse funktionieren. Diese gibt ein Range-Objekt zurück, die deine aktuelle Selektion darstellt.
Gruß Michbeck1983
Neulich im Computerkurs:
Mein Computer kennt Else nicht! 😁
[URL]XING-Profil[/URL]
hey,
wie genau lautet da der befehl?
habs jetzt so versucht:
Excel.Range temp_range;
temp_range = Application.Selection;
und erhalte dann die fehlermeldung:
Cannot implicitly convert type 'object' to 'Microsoft.Office.Interop.Excel.Range'. An explicit conversion exists (are you missing a cast?)
Hallo simethandreas,
die Fehlermeldung sagt doch schon alles eigentlich. Du musst noch eine Konvertierung vornehmen:
Excel.Range temp_range = Application.Selection as Excel.Range;
// oder
Excel.Range temp_range = (Excel.Range)Application.Selection;
Gruß Michbeck1983
Neulich im Computerkurs:
Mein Computer kennt Else nicht! 😁
[URL]XING-Profil[/URL]
hab ich jetzt so gemacht, jetzt bringt er aber die fehlermeldung
Der Objektverseis wurde nicht auf eine Objektinstanz festgelegt.
Hallo simethandreas,
verwende doch einfach den Debugger um zu schauen was da genau schiefläuft bzw. welches Objekt wann NULL ist.
Siehe dazu auch [FAQ] NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt
Ohne deinen Code zu kennen kann man nur spekulieren was da NULL ist.
Gruß Michbeck1983
Neulich im Computerkurs:
Mein Computer kennt Else nicht! 😁
[URL]XING-Profil[/URL]
Also er bringt beim debuggen bei application die meldung
"'Application' threw an exception of type "System.nullreferenceexception""
bei selection:
"The name "selection" does not exist in the current context"
habs jetzt wie in deinen link beschrieben so umgesetzt:
if((Excel.Range)Application.Selection!=null)
{
Excel.Range temp_range = (Excel.Range)Application.Selection;
}
aber dann kommt die gleiche fehlermeldung
es ist aber im excel ein zellenbereich markiert, also application.selection müsste ja eigl nen wert haben, oder?
Also er bringt beim debuggen bei application die meldung
"'Application' threw an exception of type "System.nullreferenceexception""bei selection:
"The name "selection" does not exist in the current context"habs jetzt wie in deinen link beschrieben so umgesetzt:
if((Excel.Range)Application.Selection!=null) { Excel.Range temp_range = (Excel.Range)Application.Selection; }
aber dann kommt die gleiche fehlermeldung
es ist aber im excel ein zellenbereich markiert, also application.selection müsste ja eigl nen wert haben, oder?
Wenn Application == null dann bringt dir deine Abfrage gar nichts.
Hallo simethandreas,
dann kann wahrscheinlich nur noch Application NULL sein. Es sollte eigentlich so gehen. Wie greifst du auf deine Excel-Datei zu?
Edit: DaemNice war da schneller
Gruß Michbeck1983
Neulich im Computerkurs:
Mein Computer kennt Else nicht! 😁
[URL]XING-Profil[/URL]
Hab jetzt in der if-abfrage (application!=null) bring aber auch nix.
naja wie ich da zugreife check ich selber noch ned so...das .net projekt hat ein kollege gemacht und ich muss da jetzt weiterarbeiten.
ich habe in meinen .net projekt ne excel datei.
mit
ExcelWebservice.ThisWorkbook APOworkbook = new ThisWorkbook();
erzeuge ich dann ein neues.
Hallo simethandreas,
ich vermute jetzt mal dass der Typ ThisWorkbook ein von Excel.Workbook abgeleiteter Typ ist. Versuche in diesem Falle doch mal, über ThisWorkbook auf Application zuzugreifen a la
Excel.Range myRange = (Excel.Range)deinWorkbook.ActiveWindow.Selection;
Gruß Michbeck1983
Neulich im Computerkurs:
Mein Computer kennt Else nicht! 😁
[URL]XING-Profil[/URL]
habs jetzt so gecodet...fehler bringt er nicht 😃
Excel.Range myRange = (Excel.Range)meinWorkbook.Application.ActiveWindow.Selection;
wie bekomm ich jetzt aus dem myRange die erste und die letzte Zeile raus?
also int row_start= ersteZeile und
int row_ende=letzteZeile
ich habs jetzt so gelöst:
int start_zeile = Int32.Parse(myRange.Rows.Row.ToString());
int end_zeile = start_zeile-1+ myRange.Rows.Count;
geht bestimmt noch eleganter, aber es funktioniert 😃
danke für eure hilfe