Cellules et plages

From Apache OpenOffice Wiki
Jump to: navigation, search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
doc OOo
Book.png


Une feuille de calcul est constituée d'une liste de cellules à deux dimensions. Chaque cellule est définie par ses positions X et Y par rapport à la cellule supérieure gauche, dont la position est (0,0).

L'exemple suivant crée un objet qui renvoie à la cellule supérieure gauche et insère du texte dans cette cellule :

Dim Doc As Object
Dim Sheet As Object
Dim Cell As Object   

Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)

Cell = Sheet.getCellByPosition(0, 0)
Cell.String = "Test"
Documentation note.png StarDesktop.CurrentComponent retourne le composant actif. Si vous travaillez dans l'EDI BASIC lorsque vous exécutez la macro, l'EDI BASIC est retourné. Une erreur d'exécution est générée, car l'EDI BASIC ne possède pas de composant de feuille de calcul.

Enregistrez le code de l'exemple et exécutez la macro à partir d'un classeur. Pour plus d'informations, reportez-vous au chapitre StarDesktop.

Outre ses coordonnées numériques, chaque cellule d'une feuille porte un nom : par exemple, la cellule supérieure gauche (0,0) d'une feuille est nommée A1. La lettre A représente la colonne et le chiffre 1 la ligne. Il convient de ne pas confondre le nom et la position d'une cellule : le comptage des lignes commence à 1 pour les noms et à 0 pour les positions.

Dans Apache OpenOffice, une cellule peut être vide ou contenir du texte, des nombres ou des formules. Le type de cellule n'est pas déterminé par le contenu qui y est enregistré, mais par la propriété de l'objet utilisé pour son entrée. Les nombres peuvent être insérés et appelés à l'aide de la propriété Value, le texte à l'aide de la propriété String et les formules à l'aide de la propriété Formula.

Dim Doc As Object
Dim Sheet As Object
Dim Cell As Object   

Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)

Cell = Sheet.getCellByPosition(0, 0)
Cell.Value = 100

Cell = Sheet.getCellByPosition(0, 1)
Cell.String = "Test"

Cell = Sheet.getCellByPosition(0, 2)
Cell.Formula = "=A1"

Cet exemple insère un nombre, du texte et une formule dans les champs A1, A2 et A3.

Documentation note.png Les propriétés Value, String et Formula remplacent la méthode PutCell pour la définition des valeurs d'une cellule de tableau.

Apache OpenOffice utilise la propriété String comme du texte pour traiter le contenu saisi dans les cellules, même si ce contenu est un nombre. Les nombres sont alignés à gauche dans la cellule et non pas à droite. Lors de l'utilisation de formules, il convient également de différencier le texte et les nombres :

Dim Doc As Object
Dim Sheet As Object
Dim Cell As Object

Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)

Cell = Sheet.getCellByPosition(0, 0)
Cell.Value = 100

Cell = Sheet.getCellByPosition(0, 1)
Cell.String = 1000

Cell = Sheet.getCellByPosition(0, 2)
Cell.Formula = "=A1+A2"

MsgBox Cell.Value

Bien que la cellule A1 contienne la valeur 100 et la cellule A2 la valeur 1 000, la formule A1+A2 retourne la valeur 100. En effet, le contenu de la cellule A2 a été saisi comme une chaîne et non comme un nombre.

La propriété Type permet de déterminer si une cellule contient un nombre ou une chaîne :

Dim Doc As Object
Dim Sheet As Object
Dim Cell As Object

Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)
Cell = Sheet.getCellByPosition(1,1)

Cell.Value = 1000

Select Case Cell.Type 
Case com.sun.star.table.CellContentType.EMPTY 
   MsgBox "Content: Empty"
Case com.sun.star.table.CellContentType.VALUE
   MsgBox "Content: Value"
Case com.sun.star.table.CellContentType.TEXT
   MsgBox "Content: Text"
Case com.sun.star.table.CellContentType.FORMULA
   MsgBox "Content: Formula"
End Select

La propriété Cell.Type retourne une valeur pour l'énumération com.sun.star.table.CellContentType qui identifie le type de contenu d'une cellule. Les valeurs possibles sont les suivantes :

EMPTY
aucune valeur.
VALUE
nombre.
TEXT
chaîne.
FORMULA
formule.

Insertion, suppression, copie et déplacement de cellules

Outre la modification directe du contenu d'une cellule, Apache OpenOffice Calc fournit également une interface permettant d'insérer, de supprimer, de copier ou de fusionner des cellules. L'interface com.sun.star.sheet.XRangeMovement, accessible par l'objet Spreadsheet, fournit quatre méthodes de modification du contenu des cellules.

La méthode insertCell sert à insérer des cellules dans une feuille.

Dim Doc As Object
Dim Sheet As Object
Dim CellRangeAddress As New com.sun.star.table.CellRangeAddress

Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)

CellRangeAddress.Sheet = 0
CellRangeAddress.StartColumn = 1
CellRangeAddress.StartRow = 1
CellRangeAddress.EndColumn = 2
CellRangeAddress.EndRow = 2

Sheet.insertCells(CellRangeAddress, com.sun.star.sheet.CellInsertMode.DOWN)

Cet exemple insère une plage de cellules comportant deux lignes et deux colonnes dans la deuxième colonne et la deuxième ligne (portant toutes deux le numéro 1) de la première feuille (numéro 0) du classeur. Toutes les valeurs existantes de la plage de cellules spécifiée sont déplacées sous cette dernière.

La structure com.sun.star.table.CellRangeAddress permet de définir la plage de cellules à insérer. Cette structure comporte les valeurs suivantes :

Sheet (short)
numéro de la feuille (la numérotation commençant à 0).
StartColumn (long)
première colonne de la plage de cellules (la numérotation commençant à 0).
StartRow (long)
première ligne de la plage de cellules (la numérotation commençant à 0).
EndColumn (long)
dernière colonne de la plage de cellules (la numérotation commençant à 0).
EndRow (long)
dernière ligne de la plage de cellules (la numérotation commençant à 0).

La structure CellRangeAddress complétée doit être passée comme premier paramètre à la méthode insertCells. Le second paramètre de insertCells contient une valeur de l'énumération com.sun.star.sheet.CellInsertMode et définit le traitement réservé aux valeurs situées devant la position d'insertion. L'énumération CellInsertMode reconnaît les valeurs suivantes :

NONE
les valeurs actives conservent leur position actuelle.
DOWN
les cellules situées au niveau de la position d'insertion et en dessous sont déplacées vers le bas.
RIGHT
les cellules situées au niveau de la position d'insertion et à droite sont déplacées vers la droite.
ROWS
les lignes situées après la position d'insertion sont déplacées vers le bas.
COLUMNS
les colonnes situées après la position d'insertion sont déplacées vers la droite.

La méthode removeRange est l'équivalent de la méthode insertCells. Cette méthode supprime de la feuille la plage de cellules définie dans la structure CellRangeAddress.

Dim Doc As Object
Dim Sheet As Object
Dim CellRangeAddress As New com.sun.star.table.CellRangeAddress

Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)

CellRangeAddress.Sheet = 0
CellRangeAddress.StartColumn = 1
CellRangeAddress.StartRow = 1
CellRangeAddress.EndColumn = 2
CellRangeAddress.EndRow = 2

Sheet.removeRange(CellRangeAddress, com.sun.star.sheet.CellDeleteMode.UP)

Cet exemple supprime la plage de cellules B2:C3 de la feuille et déplace de deux colonnes vers le haut les cellules situées en dessous. Ce type de suppression est défini par l'une des valeurs suivantes provenant de l'énumération com.sun.star.sheet.CellDeleteMode :

NONE
les valeurs actives conservent leur position actuelle.
UP
les cellules situées au niveau de la position d'insertion et en dessous sont déplacées vers le haut.
LEFT
les cellules situées au niveau de la position d'insertion et à droite sont déplacées vers la gauche.
ROWS
les lignes situées après la position d'insertion sont déplacées vers le haut.
COLUMNS
les colonnes situées après la position d'insertion sont déplacées vers la gauche.

L'interface XRangeMovement fournit deux méthodes supplémentaires pour déplacer (moveRange) ou copier (copyRange) les plages de cellules. L'exemple suivant déplace la plage B2:C3 de façon à ce qu'elle commence à la 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 = StarDesktop.CurrentComponent
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)

Outre la structure CellRangeAdress, la méthode moveRange attend une structure com.sun.star.table.CellAddress pour définir l'origine de la zone de destination du déplacement. La méthode CellAddress fournit les valeurs suivantes :

Sheet (short)
numéro de la feuille (la numérotation commençant à 0).
Column (long)
numéro de la colonne concernée (la numérotation commençant à 0).
Row (long)
numéro de la ligne concernée (la numérotation commençant à 0).

Le contenu des cellules de la plage cible est toujours écrasé par la méthode moveRange. Contrairement à la méthode InsertCells, la méthode removeRange ne fournit pas de paramètre permettant des déplacements automatiques.

Les fonctions de la méthode copyRange sont identiques à celles de la méthode moveRange, si ce n'est que copyRange insère une copie de la plage de cellules au lieu de la déplacer.

Documentation note.png Du point de vue de leur fonction, les méthodes insertCell, removeRange et copyRange de Apache OpenOffice Basic sont comparables aux méthodes Range.Insert, Range.Delete et Range.Copy de VBA. Les méthodes sont toutefois appliquées à l'objet Range correspondant dans VBA, tandis que, dans Apache OpenOffice Basic, elles sont appliquées à l'objet Sheet associé.
Content on this page is licensed under the Public Documentation License (PDL).


Personal tools