DOCX APIs are called through the app returned by widget.render():
const { widget } = await OfficeSdk.openfile({ docId: "demo-docx", fileName: "demo.docx", file });
const app = await widget.mount("#office-container").render();
Components#
| Component | Description |
|---|---|
Document |
Export, zoom, page view, page navigation, page setup, copy/cut/paste, paragraph marks, page break display, and section break display |
Paragraph |
Font, text style, paragraph alignment, line spacing, bullets, and numbering |
Table |
Table insertion, deletion, row/column operations, merge, and unmerge |
Selection |
Selection, cursor, break insertion, and selection change events |
Finder |
Search, previous/next result, and search status |
UndoRedo |
Undo, redo, and availability state |
Quick Example#
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("contract");
app.Finder.selectNext();
Event example:
function onSelectionChange(info) {
console.log("selection", info);
}
app.Selection.addEventListener("SELECTION_CHANGE", onSelectionChange);
app.Selection.removeEventListener("SELECTION_CHANGE", onSelectionChange);
Document#
| Method | Signature | Returns | Description |
|---|---|---|---|
exportDocument |
(): Promise<void> |
Promise<void> |
Exports the original document. |
exportPdf |
(printOptions?: unknown): Promise<void> |
Promise<void> |
Exports PDF with print options. |
setZoom |
(value: number): void |
void |
Sets zoom percentage. Common values include 80, 100, and 120. |
getZoom |
(): number |
number |
Gets the current zoom percentage. |
focusEditor |
(): void |
void |
Moves focus back to the editor area. |
updateVisibleArea |
(): void |
void |
Recalculates the visible area. |
setPageView |
(mode: "single" \| "multi" \| "wide"): void |
void |
Switches between single-page, multi-page, and page-width views. |
goToPage |
(pageNum: number): void |
void |
Goes to a page. pageNum starts from 1. |
getCurrentPagePosition |
(pageIndex?: number): PagePosition \| {} |
PagePosition \| {} |
Gets page information. pageIndex is zero-based; if omitted, the current page is used. The current implementation does not reliably distinguish an explicit 0 from an omitted value. |
setPageOrientation |
(value: "Portrait" \| "Landscape"): void |
void |
Sets portrait or landscape orientation. |
setPageSize |
(width: number, height: number): void |
void |
Sets page width and height. Built-in UI passes centimeter values. |
copy |
(): Promise<void> |
Promise<void> |
Triggers copy in the editor area. |
cut |
(): Promise<void> |
Promise<void> |
Triggers cut in the editor area. |
paste |
(): Promise<void> |
Promise<void> |
Triggers paste in the editor area. |
startReadOnly |
(): void |
void |
Enters read-only state. |
endReadOnly |
(): void |
void |
Exits read-only state. |
isReadOnly |
(): boolean |
boolean |
Gets the current read-only state. |
setShowParagraphMarks |
(value: boolean): void |
void |
Sets whether paragraph marks are visible. |
getShowParagraphMarks |
(): boolean |
boolean |
Gets paragraph mark visibility. |
setShowPageBreak |
(value: boolean): void |
void |
Sets whether page break marks are visible. |
getShowPageBreak |
(): boolean |
boolean |
Gets page break mark visibility. |
setShowSectionBreak |
(value: boolean): void |
void |
Sets whether section break marks are visible. |
getShowSectionBreak |
(): boolean |
boolean |
Gets section break mark visibility. |
PagePosition:
type PagePosition = {
pageNum: number;
pageCnt: number;
total: number;
};
Document example:
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 component events:
| Event Name | Payload | Description |
|---|---|---|
DOCX_PAGE_POSITION_CHANGE |
None | Current page position changed. |
DOCX_FIRST_PART_LOADING |
(isLoading: boolean) |
First batch page loading state. |
DOCX_END_LOADING |
(count: number) |
All pages finished loading. |
DOCUMENT_EXPORT_READY |
None | Export completed. |
DOCUMENT_EDITING_ENABLED |
None | The document entered editable state. |
DOCUMENT_EDITING_DISABLED |
None | The document exited editable state. |
DOCX_ZOOM_CHANGE |
None | Zoom changed. |
DOCX_PART_LOADING |
(pageIndex: number, ratio: number) |
Chunk loading progress. ratio is in the 0 to 1 range. |
exportPdf(...) requires a secure context (normally HTTPS or localhost), window.queryLocalFonts, and permission to access local fonts. If these requirements are not met, the current implementation does not perform the PDF export.
Paragraph#
| Method | Signature | Returns | Description |
|---|---|---|---|
setBold |
(value?: boolean): void |
void |
Sets or toggles bold. If omitted, toggles based on the current selection state. |
setItalic |
(value?: boolean): void |
void |
Sets or toggles italic. If omitted, toggles based on the current selection state. |
setUnderline |
(lineType?: string): void |
void |
Sets or clears underline. The default line type is "thick". |
setStrikeThrough |
(value?: boolean): void |
void |
Sets or toggles strikethrough. |
setFontSize |
(value: string \| number): void |
void |
Sets font size. Empty or non-numeric values are ignored. |
setFontName |
(value: string): void |
void |
Sets font family. |
setFontColor |
(value: DocxColor): void |
void |
Sets font color. Supports RGB or theme color objects. |
getColorPalette |
(): { theme: unknown[]; standard: unknown[] } |
{ theme; standard } |
Gets theme colors and standard colors. |
setAlignment |
(value: ParagraphAlignment): boolean |
boolean |
Sets horizontal paragraph alignment. |
getAlignment |
(): ParagraphAlignment \| undefined |
ParagraphAlignment \| undefined |
Gets current horizontal paragraph alignment. |
setLineSpacing |
(value: number): void |
void |
Sets line spacing multiplier. Common values include 1, 1.15, 1.5, and 2. |
setBulletList |
(index?: number): boolean \| undefined |
boolean \| undefined |
Sets or clears bullet list. Default index = -1. |
setNumberedList |
(index?: number): boolean \| undefined |
boolean \| undefined |
Sets or clears numbering. Default index = -1. |
Color and alignment parameters:
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 numeric values match the PPTX alignment enum: 0 right, 1 left, 2 center, 3 justified, 4 distributed.
Paragraph example:
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#
| Method | Signature | Returns | Description |
|---|---|---|---|
insertTable |
(rows?: number, columns?: number): void |
void |
Inserts a table. Default is 3 x 4. |
delete |
(): void |
void |
Deletes the current table. |
addRows |
(insertLocation?: InsertLocation \| number, rowCount?: number): void |
void |
Inserts rows at the current position. Defaults to inserting 1 row after; if the first argument is a number, it is treated as row count. |
addColumns |
(insertLocation?: InsertLocation \| number, columnCount?: number): void |
void |
Inserts columns at the current position. Defaults to inserting 1 column to the right; if the first argument is a number, it is treated as column count. |
deleteRows |
(rowCount?: number): void |
void |
Deletes current rows. Defaults to 1 row. |
deleteColumns |
(columnCount?: number): void |
void |
Deletes current columns. Defaults to 1 column. |
mergeCells |
(): void |
void |
Merges the currently selected cells. |
unmergeCells |
(): void |
void |
Unmerges cells. |
isInTable |
(): boolean |
boolean |
Whether the current selection is inside a table. |
type InsertLocation =
| "Start"
| "Before"
| "Left"
| "start"
| "before"
| "left"
| "End"
| "After"
| "Right"
| "end"
| "after"
| "right";
"Start", "Before", "Left", and their lowercase forms insert before or to the left. Other values use the default "End" behavior, inserting after or to the right.
Table example:
app.Table.insertTable(3, 5);
if (app.Table.isInTable()) {
app.Table.addColumns("End", 1);
app.Table.addRows(2);
app.Table.mergeCells();
}
Selection#
| Method | Signature | Returns | Description |
|---|---|---|---|
getSelectedText |
(options?: unknown): string |
string |
Gets text from the current selection. Returns an empty string when there is no valid selection. |
getParagraphInfo |
(pageIndex?: number): ParagraphInfo |
ParagraphInfo |
Gets row, column, and selection ID information for the paragraph. |
clearSelection |
(): void |
void |
Clears selection highlights on the page. |
hideCursor |
(): void |
void |
Hides the cursor. |
insertBreak |
(type?: BreakType): void |
void |
Inserts a page break, section break, or column break. |
type ParagraphInfo = {
row: number;
col: number;
selection: {
startPosId?: string;
endPosId?: string;
};
};
type BreakType =
| "Page"
| "SectionNext"
| "SectionContinuous"
| "SectionEven"
| "SectionOdd"
| "Column";
Selection example:
app.Selection.insertBreak("Page");
app.Selection.insertBreak("SectionNext");
const info = app.Selection.getParagraphInfo();
console.log(info.row, info.col);
Selection component events:
| Event Name | Payload |
|---|---|
SELECTION_CHANGE |
DocxSelectionChange |
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#
| Method | Signature | Returns | Description |
|---|---|---|---|
search |
(text: string, callback?: (...args: unknown[]) => void): void |
void |
Starts searching for a keyword. Optional callback receives runtime-provided search arguments. |
getSelectText |
(): string \| undefined |
string \| undefined |
Gets the currently selected text. Only returns when selected text length is greater than 0 and less than 256. |
selectNext |
(): void |
void |
Moves to the next search result. |
selectPrevious |
(): void |
void |
Moves to the previous search result. |
getSearchStatus |
(): FinderStatus |
FinderStatus |
Gets current search status. |
type FinderStatus = {
keyword: string;
allFounds: unknown[];
currentIndex: number;
totalCount: number;
loop: boolean;
currentSelect: unknown;
countNum?: number;
};
Finder component events:
| Event Name | Payload | Description |
|---|---|---|
DOCX_OPEN_FIND_UI |
None | The document requests opening the find UI. |
Finder example:
const selectedWord = app.Finder.getSelectText();
app.Finder.search(selectedWord || "contract");
app.Finder.selectNext();
const status = app.Finder.getSearchStatus();
console.log(status.currentIndex, status.totalCount);
UndoRedo#
| Method | Signature | Returns | Description |
|---|---|---|---|
undo |
(): void |
void |
Undo. |
redo |
(): void |
void |
Redo. |
canUndo |
(): boolean |
boolean |
Whether undo is available. |
canRedo |
(): boolean |
boolean |
Whether redo is available. |
UndoRedo component events:
| Event Name | Payload |
|---|---|
UNDO_REDO_STATE_CHANGE |
None |
Example:
if (app.UndoRedo.canUndo()) {
app.UndoRedo.undo();
}