Cellen en bereiken

From Apache OpenOffice Wiki
< NL‎ | Documentation‎ | BASIC Guide
Revision as of 13:40, 2 March 2013 by DiGro (Talk | contribs)

Jump to: navigation, search
Book.png


Een werkbladdocument bestaat uit een tweedimensionale lijst die cellen bevat. Elke cel wordt gedefinieerd door zijn positie X en Y ten opzichte van de bovenste linker cel, die de positie (0,0) heeft.

Adresseren en bewerken van Individuele cellen

Het volgende voorbeeld maakt een object dat verwijst naar de bovenste linker cel en voegt een tekst in die cel in:

Dim Doc As Object
Dim Blad As Object
Dim Cel As Object   
 
Doc = ThisComponent
Blad = Doc.Sheets(0)
 
Cel = Blad.getCellByPosition(0, 0)
Cel.String = "Test"

In aanvulling op de numerieke coördinaten heeft elke cel op een blad een naam, bijvoorbeeld, de bovenste linker cel (0,0) van een werkblad wordt A1 genoemd. De letter A staat voor de kolom en het nummer 1 voor de rij. Het is belangrijk dat de naam en positie van een cel niet worden verward omdat de telling van de rijnamen begint met 1 maar het tellen van de positie begint met 0.

Als de positie van de cel vast staat is het duidelijker om de volgende code te gebruiken:

Dim Doc As Object
Dim Blad As Object
Dim Cel As Object   
 
Doc = ThisComponent
Blad = Doc.Sheets(0)
 
Cel = Blad.getCellRangeByName("A1")
Cel.String = "Test"

De bovenstaande code werkt ook met een benoemde cel.

In Apache OpenOffice mag een tabelcel leeg zijn of tekst, getallen of formules bevatten. Het celtype wordt niet bepaald door de inhoud die wordt opgeslagen in de cel, maar eerder door de object-eigenschap die werd gebruikt voor de invoer. Getallen kunnen worden ingevoegd en aangeroepen met de eigenschap Value, tekst met de eigenschap String en formules met de eigenschap Formula.

Dim Doc As Object
Dim Blad As Object
Dim Cel As Object   
 
Doc = ThisComponent
Blad = Doc.Sheets(0)
 
Cel = Blad.getCellByPosition(0, 0)
Cel.Value = 100
 
Cel = Blad.getCellByPosition(0, 1)
Cel.String = "Test"
 
Cel = Blad.getCellByPosition(0, 2)
Cel.Formula = "=A1"

Het voorbeeld voegt één getal, één tekst en één formule in in de velden A1 t/m A3.

Documentation note.png StarOffice 5 : De eigenschappen Value, String en Formula hebben voorrang boven de oude methode PutCell van StarOffice 5 voor het instellen van de waarden van een tabelcel.


Apache OpenOffice behandelt ingevoerde celinhoud met gebruik van de eigenschap String als tekst, zelfs als de inhoud een getal is. Getallen worden links uitgelijnd in de cel in plaats van uitgelijnd op rechts. U zou het verschil tussen tekst en formules ook moeten bemerken als u formules gebruikt:

Dim Doc As Object
Dim Blad As Object
Dim Cel As Object
 
Doc = ThisComponent
Blad = Doc.Sheets(0)
 
Cel = Blad.getCellByPosition(0, 0)
Cel.Value = 100
 
Cel = Blad.getCellByPosition(0, 1)
Cel.String = 1000
 
Cel = Blad.getCellByPosition(0, 2)
Cel.Formula = "=A1+A2"
 
MsgBox Cel.Value

Hoewel cel A1 de waarde 100 bevat en cel A2 de waarde 1000, geeft de formule A1+A2 de waarde 100 weer. Dit komt omdat de inhoud van cel A2 werd ingevoerd als een tekenreeks en niet als een getal.

Gebruik de eigenschap Type om te controleren of een cel een tekenreeks of een getal bevat:

Dim Doc As Object
Dim Blad As Object
Dim Cel As Object
 
Doc = ThisComponent
Blad = Doc.Sheets(0)
Cel = Blad.getCellByPosition(1,1)
 
Cel.Value = 1000
 
Select Case Cel.Type 
Case com.sun.star.table.CellContentType.EMPTY 
   MsgBox "Inhoud: Leeg"
Case com.sun.star.table.CellContentType.VALUE
   MsgBox "Inhoud: Getal"
Case com.sun.star.table.CellContentType.TEXT
   MsgBox "Inhoud: Tekst"
Case com.sun.star.table.CellContentType.FORMULA
   MsgBox "Inhoud: Formule"
End Select

De eigenschap Cel.Type geeft een waarde terug voor de opsomming com.sun.star.table.CellContentType die het type inhoud van een cel identificeert. De mogelijke waarden zijn:

EMPTY
geen waarde
VALUE
getal
TEXT
tekenreeksen
FORMULA
formule

Cellen invoegen, verwijderen, kopiëren en verplaatsen

In aanvulling op het direct bewerken van celinhoud, verschaft Apache OpenOffice Calc ook een interface die u in staat stelt om cellen in te voegen, te verwijderen, te kopiëren of samen te voegen. De interface (com.sun.star.sheet.XCellRangeMovement) is beschikbaar via het object werkbladdocument en verschaft vier methoden voor het bewerken van de inhoud van de cel.

De methode insertCell wordt gebruikt voor het invoegen van cellen in een blad.

Dim Doc As Object
Dim Blad As Object
Dim CelBereikAdres As New com.sun.star.table.CellRangeAddress
 
Doc = ThisComponent
Blad = Doc.Sheets(0)
 
CelBereikAdres.Sheet = 0
CelBereikAdres.StartColumn = 1
CelBereikAdres.StartRow = 1
CelBereikAdres.EndColumn = 2
CelBereikAdres.EndRow = 2
 
Blad.insertCells(CelBereikAdres, com.sun.star.sheet.CellInsertMode.DOWN)

Dit voorbeeld voegt een celbereik van twee rijen en twee kolommen groot in in de tweede kolom en rij (elk draagt het nummer 1) van het eerste blad (nummer 0) in het werkblad. Elke bestaande waarde in het gespecificeerde celbereik wordt verplaatst naar beneden het bereik.

Gebruik de structuur com.sun.star.table.CellRangeAddress om het celbereik, dat u wilt invoegen, te definiëren. De volgende waarden zijn opgenomen in deze structuur:

Sheet (short)
nummer van het blad (nummering begint met 0).
StartColumn (long)
eerste kolom in het celbereik (nummering begint met 0).
StartRow (long)
eerst rij in het celbereik (nummering begint met 0).
EndColumn (long)
laatste kolom in het celbereik (nummering begint met 0).
EndRow (long)
laatste rij in het celbereik (nummering begint met 0).

De volledige structuur CellRangeAddress moet worden opgegeven als de eerste parameter aan methode insertCells. De tweede parameter van insertCells bevat een waarde uit de opsomming com.sun.star.sheet.CellInsertMode en definieert wat moet worden gedaan met de waarden die zijn geplaatst op de invoegpositie. De opsomming CellInsertMode herkent de volgende waarden:

NONE
de huidige waarden blijven op hun huidige positie.
DOWN
de cellen op en onder de positie van invoegen worden naar beneden verplaatst.
RIGHT
de cellen op en rechts van de positie van invoegen worden naar rechts verplaatst.
ROWS
de rijen onder de positie van invoegen worden naar benden verplaatst.
COLUMNS
de kolommen na de positie van invoegen worden naar rechts verplaatst.

De methode removeRange is het tegenovergestelde van de methode insertCells. Deze methode verwijdert het bereik dat wordt gedefinieerd in de structuur CellRangeAddress uit het werkblad.

Dim Doc As Object
Dim Sheet As Object
Dim CelBereikAdres As New com.sun.star.table.CellRangeAddress
 
Doc = ThisComponent
Blad = Doc.Sheets(0)
 
CelBereikAdres.Sheet = 0
CelBereikAdres.StartColumn = 1
CelBereikAdres.StartRow = 1
CelBereikAdres.EndColumn = 2
CelBereikAdres.EndRow = 2
 
Blad.removeRange(CelBereikAdres, com.sun.star.sheet.CellDeleteMode.UP)

This example removes the B2:C3 cell range from the sheet and then shifts the underlying cells up by two rows. The type of removal is defined by one of the following values from the com.sun.star.sheet.CellDeleteMode enumeration:

NONE
the current values remain in their current position.
UP
the cells at and below the insert position are moved upwards.
LEFT
the cells at and to the right of the insert position are moved to the left.
ROWS
the rows after the insert position are moved upwards.
COLUMNS
the columns after the insert position are moved to the left.

The XRangeMovement interface provides two additional methods for moving (moveRange) or copying (copyRange) cell ranges. The following example moves the B2:C3 range so that the range starts at position A6:

Dim Doc As Object
Dim Sheet As Object
Dim CellRangeAddress As New com.sun.star.table.CellRangeAddress
Dim CellAddress As New com.sun.star.table.CellAddress
 
Doc = ThisComponent
Sheet = Doc.Sheets(0)
 
CellRangeAddress.Sheet = 0
CellRangeAddress.StartColumn = 1
CellRangeAddress.StartRow = 1
CellRangeAddress.EndColumn = 2
CellRangeAddress.EndRow = 2
 
CellAddress.Sheet = 0
CellAddress.Column = 0
CellAddress.Row = 5
 
Sheet.moveRange(CellAddress, CellRangeAddress)

In addition to the CellRangeAdress structure, the moveRange method expects a com.sun.star.table.CellAddress structure to define the origin of the move's target region. The CellAddress structure provides the following values:

Sheet (short)
number of the spreadsheet (numbering begins with 0).
Column (long)
number of the addressed column (numbering begins with 0).
Row (long)
number of the addressed row (numbering begins with 0).

The cell contents in the target range are always overwritten by the moveRange method. Unlike in the InsertCells method , a parameter for performing automatic moves is not provided in the moveRange method.

The copyRange method functions in the same way as the moveRange method, except that copyRange inserts a copy of the cell range instead of moving it.

Documentation note.png VBA : In terms of their function, the Apache OpenOffice Basic insertCell, removeRange, and copyRange methods are comparable with the VBA Range.Insert, Range.Delete ,and Range.Copy methods. Whereas in VBA, the methods are applied to the corresponding Range object, in Apache OpenOffice Basic they are applied to the associated Sheet object.


Content on this page is licensed under the Public Documentation License (PDL).
Personal tools