Cellules et plages
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"
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.
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.
Content on this page is licensed under the Public Documentation License (PDL). |