Skip to content

DOCX API

DOCX API 通过 widget.render() 返回的 app 调用:

ts
const { widget } = await OfficeSdk.openfile({ docId: "demo-docx", fileName: "demo.docx", file });
const app = await widget.mount("#office-container").render();

组件

Component说明
Document导出、缩放、分页视图、页码跳转、页面设置、复制剪切粘贴、段落标记、分页符和分节符显示
Paragraph字体、文字样式、段落对齐、行距、项目符号和编号
Table表格插入、删除、行列操作、合并与取消合并
Selection选区、光标、分隔符插入、选区变化事件
Finder查找、上一个/下一个结果、查找状态
UndoRedo撤销、重做和可用状态

快速示例

ts
app.Document.setZoom(120);
app.Paragraph.setFontName("Arial");
app.Paragraph.setFontSize(14);
app.Paragraph.setFontColor({ r: 68, g: 114, b: 196 });

if (app.Table.isInTable()) {
  app.Table.addRows("End", 1);
}

app.Finder.search("合同");
app.Finder.selectNext();

事件示例:

ts
function onSelectionChange(info) {
  console.log("selection", info);
}

app.Selection.addEventListener("SELECTION_CHANGE", onSelectionChange);
app.Selection.removeEventListener("SELECTION_CHANGE", onSelectionChange);

Document

方法签名返回说明
exportDocument(): Promise<void>Promise<void>导出原始文档。
exportPdf(printOptions?: unknown): Promise<void>Promise<void>按打印配置导出 PDF。
setZoom(value: number): voidvoid设置缩放比例,常用值如 80100120
getZoom(): numbernumber获取当前缩放比例。
focusEditor(): voidvoid将焦点切回编辑区。
updateVisibleArea(): voidvoid重新计算可视区域。
setPageView(mode: "single" | "multi" | "wide"): voidvoid切换单页、多页、页宽视图。
goToPage(pageNum: number): voidvoid跳转到页码,pageNum1 开始。
getCurrentPagePosition(pageIndex?: number): PagePosition | {}PagePosition | {}获取页码信息;pageIndex 为页索引,从 0 开始,不传取当前页。当前实现不会稳定区分显式传入的 0 与未传值。
setPageOrientation(value: "Portrait" | "Landscape"): voidvoid设置页面纵向或横向。
setPageSize(width: number, height: number): voidvoid设置页面宽高,内置 UI 按厘米值传入。
copy(): Promise<void>Promise<void>触发编辑区复制。
cut(): Promise<void>Promise<void>触发编辑区剪切。
paste(): Promise<void>Promise<void>触发编辑区粘贴。
startReadOnly(): voidvoid进入只读状态。
endReadOnly(): voidvoid退出只读状态。
isReadOnly(): booleanboolean获取当前只读状态。
setShowParagraphMarks(value: boolean): voidvoid设置是否显示段落换行标记。
getShowParagraphMarks(): booleanboolean获取段落换行标记显示状态。
setShowPageBreak(value: boolean): voidvoid设置是否显示分页符标记。
getShowPageBreak(): booleanboolean获取分页符标记显示状态。
setShowSectionBreak(value: boolean): voidvoid设置是否显示分节符标记。
getShowSectionBreak(): booleanboolean获取分节符标记显示状态。

PagePosition

ts
type PagePosition = {
  pageNum: number;
  pageCnt: number;
  total: number;
};

Document 示例:

ts
await app.Document.exportPdf();

app.Document.setPageView("wide");
app.Document.goToPage(3);

const page = app.Document.getCurrentPagePosition();
console.log(page.pageNum, page.pageCnt, page.total);

app.Document.setPageOrientation("Portrait");
app.Document.setPageSize(21, 29.7);
await app.Document.cut();
app.Document.setShowParagraphMarks(true);
app.Document.setShowPageBreak(true);
app.Document.setShowSectionBreak(true);

Document 支持的组件事件:

事件名payload说明
DOCX_PAGE_POSITION_CHANGE当前页位置变化。
DOCX_FIRST_PART_LOADING(isLoading: boolean)首批页面加载状态。
DOCX_END_LOADING(count: number)全部页面加载完成。
DOCUMENT_EXPORT_READY导出完成。
DOCUMENT_EDITING_ENABLED文档进入可编辑状态。
DOCUMENT_EDITING_DISABLED文档退出可编辑状态。
DOCX_ZOOM_CHANGE缩放变化。
DOCX_PART_LOADING(pageIndex: number, ratio: number)分段加载进度,ratio 取值范围为 01

exportPdf(...) 需要安全上下文(例如 HTTPS 或 localhost)、window.queryLocalFonts 和本地字体访问权限。不满足条件时当前实现不会执行 PDF 导出。

Paragraph

方法签名返回说明
setBold(value?: boolean): voidvoid设置或切换粗体。不传时按当前选区状态切换。
setItalic(value?: boolean): voidvoid设置或切换斜体。不传时按当前选区状态切换。
setUnderline(lineType?: string): voidvoid设置或取消下划线,默认线型为 "thick"
setStrikeThrough(value?: boolean): voidvoid设置或切换删除线。
setFontSize(value: string | number): voidvoid设置字号;空值、非数值会被忽略。
setFontName(value: string): voidvoid设置字体。
setFontColor(value: DocxColor): voidvoid设置字体颜色,支持 RGB 或主题色对象。
getColorPalette(): { theme: unknown[]; standard: unknown[] }{ theme; standard }获取主题色和标准色。
setAlignment(value: ParagraphAlignment): booleanboolean设置段落水平对齐。
getAlignment(): ParagraphAlignment | undefinedParagraphAlignment | undefined获取当前段落水平对齐。
setLineSpacing(value: number): voidvoid设置行距倍数,常用值如 11.151.52
setBulletList(index?: number): boolean | undefinedboolean | undefined设置或取消项目符号,默认 index = -1
setNumberedList(index?: number): boolean | undefinedboolean | undefined设置或取消编号,默认 index = -1

颜色和对齐参数:

ts
type DocxColor =
  | { r: number; g: number; b: number }
  | { name: string; theme: number; tint?: number; shade?: number };

type ParagraphAlignment =
  | "Left"
  | "Centered"
  | "Right"
  | "Justified"
  | "Distributed"
  | 0
  | 1
  | 2
  | 3
  | 4;

ParagraphAlignment 数字值与 PPTX 对齐枚举一致:0 右对齐、1 左对齐、2 居中、3 两端对齐、4 分散对齐。

Paragraph 示例:

ts
app.Paragraph.setBold(true);
app.Paragraph.setItalic(false);
app.Paragraph.setUnderline("single");
app.Paragraph.setStrikeThrough(false);

app.Paragraph.setFontName("Microsoft YaHei");
app.Paragraph.setFontSize(16);
app.Paragraph.setFontColor({ r: 192, g: 0, b: 0 });

app.Paragraph.setAlignment("Centered");
app.Paragraph.setLineSpacing(1.5);
app.Paragraph.setBulletList(0);

Table

方法签名返回说明
insertTable(rows?: number, columns?: number): voidvoid插入表格,默认 3 x 4
delete(): voidvoid删除当前表格。
addRows(insertLocation?: InsertLocation | number, rowCount?: number): voidvoid在当前位置插入行,默认向后插入 1 行;第一个参数传数字时表示行数。
addColumns(insertLocation?: InsertLocation | number, columnCount?: number): voidvoid在当前位置插入列,默认向右插入 1 列;第一个参数传数字时表示列数。
deleteRows(rowCount?: number): voidvoid删除当前行,默认删除 1 行。
deleteColumns(columnCount?: number): voidvoid删除当前列,默认删除 1 列。
mergeCells(): voidvoid合并当前选中的单元格。
unmergeCells(): voidvoid取消合并单元格。
isInTable(): booleanboolean当前选区是否在表格内。
ts
type InsertLocation =
  | "Start"
  | "Before"
  | "Left"
  | "start"
  | "before"
  | "left"
  | "End"
  | "After"
  | "Right"
  | "end"
  | "after"
  | "right";

"Start""Before""Left" 及其小写形式表示向前或向左插入;其他值按默认 "End" 处理,即向后或向右插入。

Table 示例:

ts
app.Table.insertTable(3, 5);

if (app.Table.isInTable()) {
  app.Table.addColumns("End", 1);
  app.Table.addRows(2);
  app.Table.mergeCells();
}

Selection

方法签名返回说明
getSelectedText(options?: unknown): stringstring获取当前选区文本;没有有效选区时返回空字符串。
getParagraphInfo(pageIndex?: number): ParagraphInfoParagraphInfo获取段落所在行列和选区 ID。
clearSelection(): voidvoid清空页面选区高亮。
hideCursor(): voidvoid隐藏光标。
insertBreak(type?: BreakType): voidvoid插入分页符、分节符或分栏符。
ts
type ParagraphInfo = {
  row: number;
  col: number;
  selection: {
    startPosId?: string;
    endPosId?: string;
  };
};

type BreakType =
  | "Page"
  | "SectionNext"
  | "SectionContinuous"
  | "SectionEven"
  | "SectionOdd"
  | "Column";

Selection 示例:

ts
app.Selection.insertBreak("Page");
app.Selection.insertBreak("SectionNext");

const info = app.Selection.getParagraphInfo();
console.log(info.row, info.col);

Selection 支持的组件事件:

事件名payload
SELECTION_CHANGEDocxSelectionChange
ts
type DocxSelectionChange = {
  bold: boolean;
  italic: boolean;
  fontName: string;
  fontSize: number | string;
  fontColor: unknown;
  underline: boolean;
  strikeout: boolean;
  paraAlignHorizontal:
    | "left"
    | "center"
    | "right"
    | "justify"
    | "distribute"
    | undefined;
  canCopy: boolean;
};

Finder

方法签名返回说明
search(text: string, callback?: (...args: unknown[]) => void): voidvoid开始查找关键词;可选回调接收运行时返回的查找参数。
getSelectText(): string | undefinedstring | undefined获取当前选中文本;仅在选中文本长度大于 0 且小于 256 时返回。
selectNext(): voidvoid跳到下一个查找结果。
selectPrevious(): voidvoid跳到上一个查找结果。
getSearchStatus(): FinderStatusFinderStatus获取当前查找状态。
ts
type FinderStatus = {
  keyword: string;
  allFounds: unknown[];
  currentIndex: number;
  totalCount: number;
  loop: boolean;
  currentSelect: unknown;
  countNum?: number;
};

Finder 支持的组件事件:

事件名payload说明
DOCX_OPEN_FIND_UI文档请求打开查找 UI。

Finder 示例:

ts
const selectedWord = app.Finder.getSelectText();
app.Finder.search(selectedWord || "合同");
app.Finder.selectNext();

const status = app.Finder.getSearchStatus();
console.log(status.currentIndex, status.totalCount);

UndoRedo

方法签名返回说明
undo(): voidvoid撤销。
redo(): voidvoid重做。
canUndo(): booleanboolean是否可撤销。
canRedo(): booleanboolean是否可重做。

UndoRedo 支持的组件事件:

事件名payload
UNDO_REDO_STATE_CHANGE

示例:

ts
if (app.UndoRedo.canUndo()) {
  app.UndoRedo.undo();
}