Lecture et Ă©criture des valeurs dans les plages

Les macros dans LibreOffice Calc ont souvent besoin de lire et d'écrire des valeurs depuis/vers des feuilles. Cette page d'aide décrit les différentes approches pour accéder aux feuilles et aux plages pour lire ou écrire leurs valeurs.

note

Tous les exemples prĂ©sentĂ©s dans cette page peuvent ĂȘtre implĂ©mentĂ©s Ă  la fois en Basic et en Python.


Accéder à une seule cellule

L'exemple ci-dessous entre la valeur numérique 123 dans la cellule "A1" de la feuille active.


    Dim oSheet as Object
    Dim oCell as Object
    oSheet = ThisComponent.CurrentController.getActiveSheet()
    oCell = oSheet.getCellRangeByName("A1")
    oCell.setValue(123)
  

La mĂȘme chose peut ĂȘtre accomplie avec Python :


    doc = XSCRIPTCONTEXT.getDocument()
    sheet = doc.getCurrentController().getActiveSheet()
    cell = sheet.getCellRangeByName("A1")
    cell.setValue(123)
  

Notez que dans les exemples prĂ©cĂ©dents, la cellule est accessible en utilisant son nom de plage "A1". Il est Ă©galement possible d'accĂ©der aux cellules Ă  l'aide d'indices comme si la feuille Ă©tait une matrice oĂč les colonnes et les lignes sont indexĂ©es Ă  partir de zĂ©ro.

Cela peut ĂȘtre fait en utilisant la mĂ©thode getCellByPosition(colIndex, rowIndex), qui prend en compte une colonne et un index de ligne. L'exemple ci-dessous dans Basic modifie la valeur du texte dans la cellule "C1" (colonne 2, ligne 0).


    oSheet = ThisComponent.CurrentController.getActiveSheet()
    oCell = oSheet.getCellByPosition(2, 0)
    oCell.setString("Hello")
  

Cet exemple peut Ă©galement ĂȘtre implĂ©mentĂ© en Python comme suit :


    doc = XSCRIPTCONTEXT.getDocument()
    sheet = doc.getCurrentController().getActiveSheet()
    cell = sheet.getCellByPosition(2, 0)
    cell.setString("Hello")
  
note

La principale différence entre les scripts Python et Basic réside dans la façon d'accéder à l'objet de feuille en utilisant la variable de contexte XSCRIPTCONTEXT. AprÚs cela, toutes les méthodes et propriétés sont identiques en Basic et Python.


Valeurs, chaĂźnes et formules

Les cellules Calc peuvent avoir trois types de valeurs : numériques, chaßnes et formules. Chaque type a ses propres méthodes set et get :

Type de contenu

Get Method

Set Method

Numérique

getValue()

setValue(newValue)

Texte

getString()

setString(newString)

Formule

getFormula()

setFormula(newFormula)


note

Les dates et les valeurs monétaires sont considérées comme des valeurs numériques dans Calc.


L'exemple suivant entre des valeurs numériques dans les cellules "A1" et "A2" et insÚre une formule dans la cellule "A3" qui renvoie la multiplication de ces valeurs.


    oSheet = ThisComponent.CurrentController.getActiveSheet()
    oCell = oSheet.getCellRangeByName("A1")
    oCell.setValue(10)
    oCell = oSheet.getCellRangeByName("A2")
    oCell.setValue(20)
    oCell = oSheet.getCellRangeByName("A3")
    oCell.setFormula("=A1*A2")
  

AccÚs aux plages dans différentes feuilles

Les exemples précédents utilisaient uniquement la feuille active pour effectuer des opérations. Il est possible d'accéder aux plages de cellules dans différentes feuilles par leurs indices ou leurs noms.

L'exemple ci-dessous entre une valeur numérique dans la cellule "A1" de la feuille nommée "Sheet2".


    oSheet = ThisComponent.Sheets.getByName("Sheet2")
    oCell = oSheet.getCellRangeByName("A1")
    oCell.setValue(123)
  

Cet exemple peut Ă©galement ĂȘtre implĂ©mentĂ© en Python comme suit :


    doc = XSCRIPTCONTEXT.getDocument()
    sheet = doc.Sheets["Sheet2"]
    cell = sheet.getCellRangeByName("A1")
    cell.setValue(123)
  

Les feuilles sont également accessibles à l'aide d'indices de base zéro indiquant quelle feuille compte tenu de l'ordre dans lequel elles apparaissent dans le fichier Calc.

En Basic, au lieu d'utiliser la méthode getByName, utilisez Sheets(sheetIndex) comme indiqué ci-dessous :


    oSheet = ThisComponent.Sheets(0)
  

Cela peut ĂȘtre fait de la mĂȘme maniĂšre en Python :


    sheet = doc.Sheets[0]
  

Utilisation de la bibliothĂšque ScriptForge

Le service Calc de la bibliothĂšque ScriptForge peut ĂȘtre utilisĂ© pour obtenir et dĂ©finir les valeurs des cellules comme suit :


    

' Charge la bibliothĂšque ScriptForge

GlobalScope.BasicLibraries.LoadLibrary("ScriptForge")

' Obtient l'accĂšs au document Calc actuel

oDoc = CreateScriptService("Calc")

' DĂ©finit la valeur des cellules A1 et A2

oDoc.setValue("A1", "Hello")

oDoc.setValue("A2", 123)

note

La mĂ©thode setValue peut ĂȘtre utilisĂ©e pour dĂ©finir des valeurs numĂ©riques et textuelles. Pour dĂ©finir une formule de cellule, utilisez la mĂ©thode setFormula.


Avec le service Calc, l'obtention et la dĂ©finition des valeurs des cellules peuvent ĂȘtre effectuĂ©es avec une seule ligne de code. L'exemple ci-dessous obtient la valeur de la cellule "A1" et l'affiche dans une boĂźte de message.


    Dim val as Variant, oDoc as Object
    oDoc = CreateScriptService("Calc")
    val = oDoc.getValue("A1")
    MsgBox val
  

La bibliothÚque ScriptForge simplifie également l'accÚs aux plages dans différentes feuilles, comme le montre l'exemple ci-dessous :


    Dim val1, val2
    ' Obtient la cellule "A1" de la feuille nommée "Sheet1"
    val1 = oDoc.getValue("Sheet1.A1")
    ' Obtient la cellule "B3" de la feuille nommée "Sheet2"
    val2 = oDoc.getValue("Sheet2.B3")
    ' Place le résultat dans la cellule "A1" de la feuille "Report"
    Dim result : result = val1 * val2
    oDoc.setValue("Report.A1", result)
  

Les exemples ci-dessus peuvent Ă©galement ĂȘtre implĂ©mentĂ©s en Python comme suit :


    from scriptforge import CreateScriptService
    doc = CreateScriptService("Calc")
    doc.setValue("A1", "Hello")
  

    doc = CreateScriptService("Calc")
    bas = CreateScriptService("Basic")
    val = doc.getValue("A1")
    bas.MsgBox(val)
  

    first_val = doc.getValue("Sheet1.A1")
    second_val = doc.getValue("Sheet2.B3")
    result = first_val * second_val
    doc.setValue("Report.A1", result)
  

Aidez-nous !