Ik ben bezig om in VS2k5 een plug-in voor Excel te bouwen en gebruik de office interops om de interactie met Excel te verzorgen. De API-documentatie van die dingen is echt enorm slecht, helaas
.
Nu wil ik het volgende doen: in m'n applicatie heb ik een grafische weergave van de structuur van de spreadsheet en je kunt daarin klikken om 'cellen' in die visualisatie te selecteren. Nu wil ik ook graag dat als je in de visualisatie een selectie maakt de corresponderende cellen in Excel ook geselecteerd worden.
Eén cel tegelijk is niet zo moeilijk, maar meerdere cellen wil nog niet echt lukken. Wat ik nu heb:
De parameter clear geeft aan of de selectie gereset moet worden. Als deze parameter true is wordt er dus één cel geselecteerd, plakje cake. Maar nu wil ik graag meerdere cellen selecteren. Ik ben er intussen achter dat een Range alleen maar uit een aaneengesloten rechthoekig blok cellen mag bestaan omdat je anders een exceptie krijgt als je die Union probeert te doen. Zelfs binnen zo'n Range heb je het probleem dat de selectie in Excel alleen groeit als je ofwel naar links ofwel naar boven je selectie uitbreidt. En je ondertussen niet van richting verandert.
Ik heb al dingen gevonden over Areas (waarin je dus niet-aaneengesloten blokken kunt stoppen) en een property Selection van de excelApp. Maar Areas heeft geen methode om ze te selecteren en Selection is read-only
. ...iemand enig idee hoe ik dit ga aanpakken? Ik weet namelijk niet zo goed waar ik het nog zoeken moet, google geeft mij vooral extreem karige msdn-pagina's waar ik nauwelijks iets mee opschiet en de helft van de types die je tegenkomt als je bladert bij de properties/methoden van de API zijn Object
.
't Zou toch moeten kunnen, ik kan in Excel immers met ctrl ingehouden de raarst gevormde selecties maken.
Nu wil ik het volgende doen: in m'n applicatie heb ik een grafische weergave van de structuur van de spreadsheet en je kunt daarin klikken om 'cellen' in die visualisatie te selecteren. Nu wil ik ook graag dat als je in de visualisatie een selectie maakt de corresponderende cellen in Excel ook geselecteerd worden.
Eén cel tegelijk is niet zo moeilijk, maar meerdere cellen wil nog niet echt lukken. Wat ik nu heb:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
| public void selectCell(String cellName, bool clear) { // dit splitten is om de sheetnaam van de hele celnaam af te pellen: Sheet1!A1 bijvoorbeeld Worksheet sheet = (Worksheet)Connect.excelApp.Worksheets.get_Item(cellName.Split('!')[0]); Range cell = sheet.get_Range(cellName.Split('!')[1], cellName.Split('!')[1]); if (clear) { sheet.Activate(); cell.Activate(); } else { Object missing = System.Reflection.Missing.Value; Range cells = (Range)Connect.excelApp.Selection; cells = Connect.excelApp.Union(cells, cell, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing); cells.Activate(); } markCellSelected(cellName, fromGraph); } |
De parameter clear geeft aan of de selectie gereset moet worden. Als deze parameter true is wordt er dus één cel geselecteerd, plakje cake. Maar nu wil ik graag meerdere cellen selecteren. Ik ben er intussen achter dat een Range alleen maar uit een aaneengesloten rechthoekig blok cellen mag bestaan omdat je anders een exceptie krijgt als je die Union probeert te doen. Zelfs binnen zo'n Range heb je het probleem dat de selectie in Excel alleen groeit als je ofwel naar links ofwel naar boven je selectie uitbreidt. En je ondertussen niet van richting verandert.
Ik heb al dingen gevonden over Areas (waarin je dus niet-aaneengesloten blokken kunt stoppen) en een property Selection van de excelApp. Maar Areas heeft geen methode om ze te selecteren en Selection is read-only
't Zou toch moeten kunnen, ik kan in Excel immers met ctrl ingehouden de raarst gevormde selecties maken.
💶 Wil je in een vrije democratie blijven wonen? Betaal dan voor nieuws. 📰
❌ ceterum censeo contra factiones ad dextrum extremum esse pugnandum. 🙅🏻♂️