Ejecuciones de texto y párrafos

Modelo basado en índices

Univer Docs no almacena texto enriquecido como un árbol anidado. Almacena texto sin formato en body.dataStream1 y luego utiliza rangos de índice para adjuntar estilo y estructura al texto.

Las estructuras basadas en índices más comunes son:

  • ITextRun: rango de estilos de texto en línea.
  • IParagraph: metadatos de párrafo y estilo de párrafo.
  • ISectionBreak: salto de sección metadatos.

ITextRun

ITextRun describe el estilo de un rango de texto continuo.

PropiedadTipoDescripción
stnumberÍndice inicial, inclusive.
ednumberÍndice final, exclusivo.
sId?stringID de estilo referenciado.
ts?ITextStyleEstilo de texto en línea objeto.
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' } },    },  ],}

En este ejemplo, Hello está en negrita y Univer es azul. El salto de párrafo \r\n no está incluido en los rangos de estilo.

IParagraph

IParagraph describe metadatos a nivel de párrafo. startIndex apunta a la posición del salto de párrafo en dataStream.

PropiedadTipoDescripción
startIndexnumberÍndice del salto de párrafo.
paragraphIdstringID de párrafo estable.
paragraphStyle?IParagraphStyleEstilo de párrafo como alineación, sangría, interlineado y tipo de encabezado.
bullet?IBulletMetadatos del marcador de lista.
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 también usa un índice para conectar la configuración a nivel de sección al flujo de texto. Puede anular el tamaño de página, los márgenes, los encabezados, los pies de página, las columnas y la dirección del texto de una sección.

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

Notas

  • Mantenga los índices alineados con dataStream. Los índices incorrectos pueden hacer que los rangos de estilo, los párrafos, las selecciones o la representación se vuelvan inconsistentes.
  • Prefiera las API y los comandos de Facade para editar un documento activo.
  • Cuando genere instantáneas manualmente, primero cree dataStream y luego calcule los rangos y las posiciones de los párrafos a partir de esa cadena.

Footnotes

  1. Las posiciones cuentan unidades UTF-16 de JavaScript, no caracteres visibles: "😀".length es 2. Un intervalo de texto [st, ed) excluye el final, a diferencia de los rangos de celdas que lo incluyen. ↩

¿Cómo es esta guía?

© 2026 DreamNum Co., Ltd.