Segments de texte et paragraphes

Modèle fondé sur des index

Univer Docs ne stocke pas le texte enrichi sous forme d’arborescence imbriquée. Il stocke le texte brut dans body.dataStream1, puis utilise des plages d’index pour associer le style et la structure au texte.

Les structures fondées sur des index les plus courantes sont les suivantes :

  • ITextRun : plage de style de texte en ligne.
  • IParagraph : métadonnées et style du paragraphe.
  • ISectionBreak : métadonnées du saut de section.

ITextRun

ITextRun décrit le style d’une plage de texte continue.

PropriétéTypeDescription
stnumberIndex de début, inclus.
ednumberIndex de fin, exclu.
sId?stringID du style référencé.
ts?ITextStyleObjet de style de texte en ligne.
TypeScript
const body: IDocumentBody = {  dataStream: 'Hello Univer\r\n',  textRuns: [    {      st: 0,      ed: 5,      ts: { bl: 1 },    },    {      st: 6,      ed: 12,      ts: { cl: { rgb: '#2563eb' } },    },  ],}

Dans cet exemple, Hello est en gras et Univer en bleu. Le saut de paragraphe \r\n n’est pas inclus dans les plages mises en forme.

IParagraph

IParagraph décrit les métadonnées au niveau du paragraphe. startIndex indique la position du saut de paragraphe dans dataStream.

PropriétéTypeDescription
startIndexnumberIndex du saut de paragraphe.
paragraphIdstringID stable du paragraphe.
paragraphStyle?IParagraphStyleStyle du paragraphe, comme l’alignement, le retrait, l’interligne et le type de titre.
bullet?IBulletMétadonnées du marqueur de liste.
TypeScript
const body: IDocumentBody = {  dataStream: 'Hello Univer\r\nSecond line\r\n',  paragraphs: [    {      startIndex: 12,      paragraphId: 'p-1',      paragraphStyle: {        namedStyleType: NamedStyleType.HEADING_1,      },    },    {      startIndex: 25,      paragraphId: 'p-2',    },  ],}

ISectionBreak

ISectionBreak utilise également un index pour associer les paramètres d’une section au flux de texte. Il permet de redéfinir, pour une section donnée, le format de page, les marges, les en-têtes, les pieds de page, les colonnes et le sens du texte.

TypeScript
const body: IDocumentBody = {  dataStream: 'First section\nSecond section\r\n',  sectionBreaks: [    {      startIndex: 13,      pageSize: { width: 595, height: 842 },      marginTop: 72,      marginBottom: 72,    },  ],}

Remarques

  • Veillez à ce que les index correspondent à dataStream. Des index incorrects peuvent rendre incohérents les plages de style, les paragraphes, les sélections ou le rendu.
  • Privilégiez les API Facade et les commandes pour modifier un document actif.
  • Lorsque vous générez manuellement des instantanés, construisez d’abord dataStream, puis calculez les plages et les positions des paragraphes à partir de cette chaîne.

Footnotes

  1. Les positions comptent les unités UTF-16 de JavaScript, pas les caractères visibles : "😀".length vaut 2. Une plage de texte [st, ed) exclut sa fin, contrairement aux plages de cellules dont les indices de fin sont inclusifs. ↩

Que pensez-vous de ce guide ?

© 2026 DreamNum Co., Ltd.