# Structure des données d'une cellule

- Human documentation: [https://docs.univer.ai/fr-FR/guides/sheets/model/cell-data](https://docs.univer.ai/fr-FR/guides/sheets/model/cell-data)

- Agent Markdown: [https://docs.univer.ai/fr-FR/guides/sheets/model/cell-data.md](https://docs.univer.ai/fr-FR/guides/sheets/model/cell-data.md)

- Requested language: `fr-FR`

- Content language: `fr-FR`

- Documentation version: `1.2.0`

- Source: [sheets/model/cell-data.fr-FR.mdx](https://github.com/dream-num/documentation/blob/dev/content/guides/sheets/model/cell-data.fr-FR.mdx)

---

## Position d'une cellule

Dans Univer Sheets, les données des cellules sont stockées dans le champ [cellData](https://docs.univer.ai/fr-FR/reference/types/worksheet-data.md#celldata) de l'objet [IWorksheetData](https://docs.univer.ai/fr-FR/reference/types/worksheet-data.md). Ce champ contient toutes les informations sur les cellules, comme leur valeur, leur style et leur type.

La structure de cellData est la suivante :

```typescript
interface IWorksheetData {
  cellData: {
    // first row
    0: {
      // first column
      0: { v: 'A1' }
      // second column
      1: { v: 'B1' }
    }
    // second row
    1: {
      // first column
      0: { v: 'A2' }
      // second column
      1: { v: 'B2' }
    }
  }
}
```

## Données d'une cellule

Voici l'ensemble des informations d'une cellule.

| Propriété | Description                                          |
| --------- | ---------------------------------------------------- |
| v         | Valeur d'origine de la cellule                       |
| s         | Identifiant de style ou objet de style de la cellule |
| t         | Type de la cellule                                   |
| p         | Texte enrichi, également un 📝 document Univer Docs  |
| f         | Formule                                              |
| si        | Identifiant de formule                               |
| custom    | Champ personnalisé                                   |

Consultez les informations de type de chaque champ de [ICellData](https://docs.univer.ai/fr-FR/reference/types/cell-data.md).

### Valeur d'origine d'une cellule

`cellData.v` stocke la valeur d'origine de la cellule, qui peut être une chaîne ou un nombre. Pour les cellules contenant une formule, `v` stocke le résultat du calcul de la formule.

Voici deux exemples de valeurs de cellule différentes.

```typescript
interface IWorksheetData {
  cellData: {
    0: {
      0: { v: 'A1' }
      1: { v: 1 }
    }
  }
}
```

### Style d'une cellule

`cellData.s` stocke l'identifiant de style ou l'objet de style de la cellule.

Si `s` est une chaîne, elle représente un identifiant de style. Univer Sheets permet d'optimiser les références de styles. Les objets de style répétés sont stockés dans le champ [styles](https://docs.univer.ai/fr-FR/reference/types/workbook-data.md#styles) de IWorkbookData. Ce champ est une structure Map dont chaque clé correspond à un identifiant de style et chaque valeur à l'objet de style associé.

> [!WARNING]
> Évitez d'utiliser des couleurs avec transparence, comme rgba. Sinon, lorsque le mode d'édition est activé, le contenu de la cellule sous-jacente apparaîtra à travers l'arrière-plan.

```typescript
interface IWorkbookData {
  styles: {
    random_style_id_1: {
      fs: 12
      bg: {
        rgb: '#ff0000'
      }
    }
  }
}
```

Stockez ensuite l'identifiant dans le style de la cellule afin de réutiliser ce style.

```typescript
interface IWorksheetData {
  cellData: {
    0: {
      0: {
        v: 'A1'
        s: 'random_style_id_1'
      }
      1: {
        v: 'B1'
        s: 'random_style_id_1'
      }
    }
  }
}
```

Si `s` est un objet, il représente un objet de style de cellule complet [IStyleData](https://docs.univer.ai/fr-FR/reference/types/style-data.md).

Voici l'ensemble des champs de style.

| Propriété | Description                     |
| --------- | ------------------------------- |
| ff        | Police                          |
| fs        | Taille de police                |
| it        | Italique                        |
| bl        | Gras                            |
| ul        | Soulignement                    |
| st        | Barré                           |
| ol        | Trait supérieur                 |
| bg        | Couleur d'arrière-plan          |
| bd        | Bordure                         |
| cl        | Couleur de police               |
| va        | Exposant ou indice              |
| tr        | Rotation du texte               |
| ht        | Alignement horizontal           |
| vt        | Alignement vertical             |
| tb        | Gestion du dépassement du texte |
| pd        | Marges internes                 |
| n         | Format de nombre                |

Vous pouvez consulter les informations de type de chaque champ de [IStyleData](https://docs.univer.ai/fr-FR/reference/types/style-data.md).

#### Police

`ff` est une chaîne qui représente le nom de la police.

```typescript
interface IStyleData {
  ff: 'Arial' // Font name is Arial
}
```

#### Taille de police

`fs` est un nombre exprimé en **pt**.

```typescript
interface IStyleData {
  fs: 12 // Font size is 12 pt
}
```

#### Italique

`it` est un nombre booléen : `0` signifie que le texte n'est pas en italique et `1` qu'il l'est.

```typescript
interface IStyleData {
  it: 1 // Italic
}
```

#### Gras

`bl` est un nombre booléen : `0` signifie que le texte n'est pas en gras et `1` qu'il l'est.

```typescript
interface IStyleData {
  bl: 1 // Bold
}
```

#### Soulignement

`ul` est un objet qui représente le style de soulignement.

```typescript
interface IStyleData {
  ul: {
    s: 1 // Whether to show underline
    c: 0 // Whether the color follows the font color. When `c` is 1 (TRUE), cl does not work. The default value is 1
    cl: { // Underline color
      rgb: '#ff0000'
    }
    t: 0 // Underline type
  }
}
```

#### Barré

`st` est un objet qui représente le style barré.

```typescript
interface IStyleData {
  st: {
    s: 1 // Whether to show strikethrough
    c: 0 // Whether the color follows the font color. When `c` is 1 (TRUE), cl does not work. The default value is 1
    cl: { // Strikethrough color
      rgb: '#ff0000'
    }
    t: 0 // Strikethrough type
  }
}
```

#### Trait supérieur

`ol` est un objet qui représente le style du trait supérieur.

```typescript
interface IStyleData {
  ol: {
    s: 1 // Whether to show overline
    c: 0 // Whether the color follows the font color. When `c` is 1 (TRUE), cl does not work. The default value is 1
    cl: { // Overline color
      rgb: '#ff0000'
    }
    t: 0 // Overline type
  }
}
```

#### Couleur d'arrière-plan

`bg` est un objet qui représente la couleur d'arrière-plan.

```typescript
interface IStyleData {
  bg: {
    rgb: '#ff0000' // Background color is red
  }
}
```

#### Bordure

`bd` est un objet qui représente le style de bordure.

```typescript
interface IStyleData {
  bd: {
    // Top border
    t: {
      s: 0 // Border style
      cl: { // Border color
        rgb: '#ff0000'
      }
    }
    // Bottom border
    b: {
      s: 0 // Border style
      cl: { // Border color
        rgb: '#ff0000'
      }
    }
    // Left border
    l: {
      s: 0 // Border style
      cl: { // Border color
        rgb: '#ff0000'
      }
    }
    // Right border
    r: {
      s: 0 // Border style
      cl: { // Border color
        rgb: '#ff0000'
      }
    }
  }
}
```

#### Couleur de police

`cl` est un objet qui représente la couleur de police.

```typescript
interface IStyleData {
  cl: {
    rgb: '#ff0000' // Font color is red
  }
}
```

#### Exposant ou indice

`va` est un nombre d'énumération : `1` correspond au texte normal, `2` à l'indice et `3` à l'exposant.

```typescript
interface IStyleData {
  va: 2 // Subscript
}
```

#### Rotation du texte

`tr` est un objet qui représente la rotation du texte.

```typescript
interface IStyleData {
  tr: {
    a: 0 // Text rotation angle
    v: 0 // Whether it is vertical. 1 means vertical, 0 means horizontal. The default value is 0. When v is 1, a is invalid
  }
}
```

#### Alignement horizontal

`ht` est un nombre d'énumération : `1` correspond à l'alignement à gauche, `2` à l'alignement centré et `3` à l'alignement à droite.

```typescript
interface IStyleData {
  ht: 1 // Left alignment
}
```

#### Alignement vertical

`vt` est un nombre d'énumération : `1` correspond à l'alignement en haut, `2` à l'alignement centré et `3` à l'alignement en bas.

```typescript
interface IStyleData {
  vt: 1 // Top alignment
}
```

#### Gestion du dépassement du texte

`tb` est un nombre d'énumération : `1` autorise le dépassement, `2` tronque le texte et `3` active le retour à la ligne.

```typescript
interface IStyleData {
  tb: 1 // Overflow
}
```

#### Marges internes

`pd` est un objet qui représente les marges internes.

```typescript
interface IStyleData {
  pd: {
    t: 0 // Top padding
    b: 0 // Bottom paddingAdd commentMore actions
    l: 0 // Left padding
    r: 0 // Right padding
  }
}
```

#### Format de nombre

`n` est un objet dont le champ `pattern` indique le format de nombre. Le format de nombre est une chaîne. Pour en savoir plus, consultez [cette page](https://support.microsoft.com/en-us/office/number-format-codes-5026bbd6-04bc-48cd-bf33-80f18b4eae68)。

Si `n` est `null` ou si `pattern` est `null`, le format général est utilisé.

```typescript
import type { DEFAULT_TEXT_FORMAT_EXCEL } from '@univerjs/core'

interface IStyleData {
  n: {
    pattern: DEFAULT_TEXT_FORMAT_EXCEL // text format
  }
}
```

[Empêcher la conversion automatique d'une cellule lors de la saisie d'un nombre commençant par 0 ou pouvant être converti au format de date](https://docs.univer.ai/fr-FR/guides/sheets/features/core/numfmt.md#usage)

### Type de cellule

`cellData.t` est une énumération [CellValueType](https://docs.univer.ai/fr-FR/reference/enums/cell-value-type.md) qui représente le type de la cellule. `1` correspond à une chaîne, `2` à un nombre, `3` à un booléen et `4` à du texte forcé. Si ce champ n'est pas défini, Univer reconnaît automatiquement le type.

Si la cellule est de type booléen, la valeur de `cellData.v` est stockée sous la forme `0` ou `1` : `0` signifie faux et `1` vrai.

```typescript
interface IWorksheetData {
  cellData: {
    0: {
      0: {
        v: 'A1'
        t: 1 // String
      }
      1: {
        v: 1
        t: 2 // Number
      }
      2: {
        v: 1 // TRUE
        t: 3 // Boolean
      }
      3: {
        v: '012.0'
        t: 4 // Force text
      }
    }
  }
}
```

Vous pouvez activer ou désactiver l'alerte et le marqueur de texte forcé à l'aide de `disableForceStringAlert` et de `disableForceStringMark`. Consultez l'emplacement de cette configuration :

* [Mode prédéfini](https://docs.univer.ai/fr-FR/guides/sheets/features/core.md#univerjspreset-sheets-core)
* [Mode plugin](https://docs.univer.ai/fr-FR/guides/sheets/features/core.md#univerjssheets-ui)

### Texte enrichi

`cellData.p` est un objet qui représente du texte enrichi et constitue également un document Univer Docs. En savoir plus sur [IDocumentData](https://docs.univer.ai/fr-FR/reference/types/document-data.md).

> [!NOTE]
> Lorsque `p` et `v` sont tous deux définis pour une cellule, seul le contenu de `p` est affiché.

`cellData.p.body.dataStream` contient le texte enrichi.

### Formule

`cellData.f` est une chaîne qui représente une formule.

```typescript
interface IWorksheetData {
  cellData: {
    0: {
      0: {
        f: '=SUM(A1:B1)' // function SUM
      }
    }
  }
}
```

### Identifiant de formule

`cellData.si` est une chaîne qui représente l'identifiant de la formule. Univer Sheets permet d'optimiser les références de formules. Après avoir associé la formule actuelle à `si` dans une cellule, d'autres cellules peuvent y faire référence à l'aide de `si`. Notez que la cellule qui contient `si` doit se trouver en bas à droite de la cellule de référence. Sinon, une erreur se produit lors de l'exportation au format XLSX.

La formule réelle peut être obtenue avec l'API Facade `range.getFormulas()`. Le principe consiste à obtenir la formule `f` associée à `si`, puis à calculer la formule réelle en fonction du décalage entre la position de la cellule actuelle et celle de la cellule de référence.

```typescript
interface IWorksheetData {
  cellData: {
    0: {
      0: {
        f: '=SUM(A1:B1)' // Sum formula
        si: 'random_formula_id_1' // ID of the current formula
      }
      1: {
        si: 'random_formula_id_1' // Take the formula corresponding to this ID during calculation
      }
    }
  }
}
```

### Champ personnalisé

`cellData.custom` est un objet qui représente un champ personnalisé. Vous pouvez y placer toute donnée conforme au format JSON afin de stocker des informations supplémentaires.

La mise à jour des données `custom` remplace les données `custom` existantes. Si vous devez conserver les données `custom` existantes lors d'une mise à jour, récupérez au préalable les données `custom` et fusionnez-les avec les nouvelles données avant d'effectuer la mise à jour.

> [!WARNING]
> Le champ `custom` ne convient qu'à certains cas particuliers. Les données qu'il contient peuvent être remplacées ou supprimées par n'importe quelle opération utilisateur. Utilisez-le avec précaution.

```typescript
interface IWorksheetData {
  cellData: {
    0: {
      0: {
        custom: {
          key: 'value'
        }
      }
    }
  }
}
```
