Markering af område
Nu skal vi rigtig i gang med programmeringen! Første udfordring er at markere et område. Det lyder umiddelbart trivielt, men kan godt indeholde sjove udfordringer - f.eks. i det tilfælde, at vi ikke ved, hvor mange linjer, der er i et datasæt, men gerne vil markere hele datasættet.
Range objektet er det objekt vi skal have fat i her - det har følgende syntaks:
wks.Range[Celle1, Celle2]
BEMÆRK: wks er et objekt, der peger på en arkfane.
Det fungerer på følgende måde:
wks.Range["A2"].Select(); - markerer celle A2
wks.Range["A2:B7"].Select(); - markerer området A2:B7
wks.Range["A2", "B7"].Select(); - markerer også området A2:B7
Det er jo rimelig simpelt. Men, hvad så hvis man vil markere sidste celle i kolonne B, men man ved ikke hvor stort datasættet er? - det kan man gøre sådan her:
wks.Range["B1"].End[Excel.XlDirection.xlDown].Select();
Og markering af hele kolonne B
wks.Range["B1",
wks.Range["B1"].End[Excel.XlDirection.xlDown]].Select();
Hvad så med cellen lige under den sidste celle i B kolonnen:
wks.Range["B1"].End[Excel.XlDirection.xlDown].Offset[1,0].Select();
De tre sidste metoder forudsætter faktisk at der står noget i alle cellerne i kolonne B i datasættet samt at der er mere end én linje i datasættet.
Vil du være sikker på, at det virker også i det tilfælde, hvor der kun er én linje i datasættet starter man nedefra i stedet:
long SidsteR = wks.Rows.Count;
wks.Range["B" + SidsteR.ToString()].
End[Excel.XlDirection.xlUp].Select();
wks.Range["B2", wks.Range["B" +SidsteR.ToString()].
End[Excel.XlDirection.xlUp]].Select();
wks.Range["B" + SidsteR.ToString()].
End[Excel.XlDirection.xlUp].Offset[1, 0].Select();
Er der huller i datasættet må man tage udgangspunkt i en kolonne, hvor man er sikker på, at der ikke er huller og bruge Range[Celle1 , Celle2].Select() til at fange området. Celle1 kan "bare" være toppen af kolonnen med huller og Celle2 skal jo være den sidste celle i kolonnen med huller i. Bruger du Range[Celle].End[Excel.XlDirection.xlUp] på én kolonne uden huller kan du med Offset flytte over så du peger på den sidste celle i kolonnen med huller.
Arbejder du med navngivne celler kan du også skrive. Der kommer en hel lektion omkrig arbejde med navngivne celler senere i kurset.
wks.Range["RabatCelle"].Select();
// vil markere den/de celler der hedder RabatCelle
// (forudsætter, at den/de faktisk findes!)
Læg mærke til, at du også kan arbejde med områder, der ikke er på den aktuelle arkfane:
wkb.Worksheets["Ark3"].Range["D10"]
Workbooks["Salg.xlsx"].Worksheets["Ark2"].Range["D10"]
Pas på, hvis du skal arbejde på et område på f.eks. Ark3 skal det se sådan her ud:
wkb.Worksheets["Ark3"].Range["D10",
wkb.Worksheets["Ark3"].Range["D10"].End[Excel.XlDirection.xlDown]];
Specielle celler
En interessant metode! Du kender måske muligheden for at gå til specielle celler fra menuen Rediger | Gåtil
Den kan også kaldes fra C#- et lille eksempel på det:
Excel.Range rgSidste =
wks.Range["A1"].SpecialCells(Excel.XlCellType.xlCellTypeLastCell);
long SidsteR = rgSidste.Row;
long SidsteK = rgSidste.Column;
Læg mærke til, at Excel tager alle celler med, der har været brugt siden regnearket blev åbnet - også celler du har slettet igen. Det betyder at du ikke kan være 100% sikker på denne funktion med mindre regnearket lige er blevet gemt/åbnet.
Current region
Du kender sikkert muligheden for at trykke Ctrl + * fra tastaturet for at markere hele det dataområde der er omkring en celle. Det samme kan du fra C#:
wks.Range["D7"].CurrentRegion.Select();