テキスト範囲と段落

インデックスベースのモデル

Univer Docs はリッチテキストをネストしたツリーとして保存しません。プレーンテキストを body.dataStream1 に保存し、インデックス範囲でスタイルや構造を関連付けます。

よく使われるインデックスベースの構造は次のとおりです。

  • ITextRun: インラインテキストスタイル範囲。
  • IParagraph: 段落メタデータと段落スタイル。
  • ISectionBreak: セクション区切りメタデータ。

ITextRun

ITextRun は連続したテキスト範囲のスタイルを表します。

プロパティ型説明
stnumber開始インデックス。この位置を含みます。
ednumber終了インデックス。この位置は含みません。
sId?string参照するスタイル ID。
ts?ITextStyleインラインテキストスタイル。
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' } },    },  ],}

この例では、Hello が太字になり、Univer が青色になります。段落区切り \r\n はスタイル範囲に含まれません。

IParagraph

IParagraph は段落レベルのメタデータを表します。startIndex は dataStream 内の段落区切り位置を指します。

プロパティ型説明
startIndexnumber段落区切りのインデックス。
paragraphIdstring安定した段落 ID。
paragraphStyle?IParagraphStyle配置、インデント、行間、見出し種別などの段落スタイル。
bullet?IBullet箇条書きマーカーのメタデータ。
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 もインデックスによってテキストストリームと関連付けられます。セクションごとにページサイズ、余白、ヘッダー/フッター、カラム、文字方向などを上書きできます。

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

注意事項

  • インデックスは dataStream と一致させる必要があります。不正なインデックスは、スタイル範囲、段落、選択範囲、レンダリング状態の不整合につながります。
  • 実行中のドキュメントを編集する場合は、Facade API またはコマンドを優先してください。
  • スナップショットを手動生成する場合は、先に dataStream を構築し、その文字列から範囲と段落位置を計算してください。

Footnotes

  1. 文字位置は見た目の文字数ではなく JavaScript の UTF-16 コード単位で数えます。例えば "😀".length は 2 です。テキスト範囲は [st, ed) で終端を含まず、シート範囲の終端を含む規則とは異なります。 ↩

このガイドはいかがですか?

© 2026 DreamNum Co., Ltd.