JavaScript - Snippets
Writing Text
Write text to the current user selection
Office.context.document.setSelectedDataAsync("Hello World!",
function (asyncResult) {
if (asyncResult.status == "failed") {
showMessage("Action failed with error: " + asyncResult.error.message);
}
});
Reading Text
Read text from the user current selection
Office.context.document.getSelectedDataAsync("text",
function (asyncResult) {
if (asyncResult.status == "failed") {
showMessage("Action failed with error: " + asyncResult.error.message);
}
else {
showMessage("Selected data: " + asyncResult.value);
}
});
insert a heading before some text
function doSomething() {
Word.run(function (context) {
var selection = context.document.getSelection();
var paragraphs = selection.paragraphs.load('text');
var paragraph = range.insertParagraph("Customer", Word.InsertLocation.before);
paragraph.styleBuiltIn = "Heading1";
clear the contents of the body.
var body = ctx.document.body;
body.clear();
load the text in document body.
var body = context.document.body;
context.load(body, 'text');
wrap the body in a content control.
var body = ctx.document.body;
body.insertContentControl();
insert HTML in to the beginning of the body.
var body = ctx.document.body;
body.insertHtml('<strong>This is text inserted with body.insertHtml()</strong>', Word.InsertLocation.start);
insert OOXML in to the beginning of the body.
var body = ctx.document.body;
body.insertOoxml("<w:p xmlns:w='http://schemas.microsoft.com/office/word/2003/wordml'><w:r><w:rPr><w:b/><w:b-cs/><w:color w:val='FF0000'/><w:sz w:val='28'/><w:sz-cs w:val='28'/></w:rPr><w:t>Hello world (this should be bold, red, size 14).</w:t></w:r></w:p>", Word.InsertLocation.start);
insert the paragraph at the end of the document body.
var body = ctx.document.body;
body.insertParagraph('Content of a new paragraph', Word.InsertLocation.end);
insert text in to the beginning of the body.
var body = ctx.document.body;
body.insertText('This is text inserted with body.insertText()', Word.InsertLocation.start);
load font and style information for the document body.
var body = ctx.document.body;
context.load(body, 'font/size, font/name, font/color, style');
Searching
link - learn.microsoft.com/en-us/office/dev/add-ins/word/search-option-guidance
await Word.run(async (context) => {
var body = context.document.body;
var options = Word.SearchOptions.newObject(context);
options.matchCase = false
var searchResults = context.document.body.search('video', options);
var searchResults = context.document.body.search('video you', {ignorePunct: true});
var searchResults = context.document.body.search('ly', {matchSuffix: true});
var searchResults = context.document.body.search('to*n', {matchWildcards: true});
context.load(searchResults, 'text, font');
searchResults.load('font');
await context.sync();
console.log('Found count: ' + searchResults.items.length);
for (var i = 0; i < searchResults.items.length; i++) {
searchResults.items[i].font.color = '#FF0000' // Change color to Red, purple
searchResults.items[i].font.highlightColor = '#FFFF00';
searchResults.items[i].font.bold = true;
}
await context.sync();
}).catch((error) => {
console.log('Error: ' + JSON.stringify(error));
if (error instanceof OfficeExtension.Error) {
console.log('Debug info: ' + JSON.stringify(error.debugInfo));
}
});
inserting html into the selection
var htmlText =
'<h1><strong>Insert Html</strong></h1>' +
'<h2><em>Office Extensibility Platform</em></h2>' +
'<p>This is an example of how the InsertHtml method works.</p>' +
'<table>' +
'<tr><td>Check</td><td>out</td></tr>' +
'<tr><td>this</td><td>table</td></tr>' +
'</table>';
var range = context.document.getSelection();
range.insertHtml(htmlText, Word.InsertLocation.end);
inserting text into the selection
var textSample = 'This is an example of the insert text method. This is a method ' +
'which allows users to insert text into a selection.';
var range = context.document.getSelection();
range.insertText(textSample, Word.InsertLocation.end);
change the current selection's font name.
var selection = context.document.getSelection();
selection.font.name = 'Arial';
selection.font.bold = true;
Clear the contents of the first paragraph
Word.run(function (context) {
var paragraphs = context.document.body.paragraphs;
context.load(paragraphs, 'style');
return context.sync().then(function () {
paragraphs._GetItem(0).clear();
return context.sync().then(function () {
console.log('Cleared the contents of the first paragraph.');
});
});
})
format line spacing
Word.run(function (context) {
var paragraphs = context.document.body.paragraphs;
context.load(paragraphs, 'style');
return context.sync().then(function () {
var paragraph = paragraphs._GetItem(0);
paragraph.linespacing = 36;
return context.sync().then(function () {
console.log('Changed the paragraph line spacing.');
});
});
})
Get Paragraph from Insertion Point
$("#get-paragraph").click(() => tryCatch(getParagraph));
$("#get-sentences").click(() => tryCatch(getSentences));
$("#setup").click(() => tryCatch(setup));
async function getParagraph() {
await Word.run(async (context) => {
// The collection of paragraphs of the current selection returns the full paragraphs contained in it.
let paragraph = context.document.getSelection().paragraphs.getFirst();
paragraph.load("text");
await context.sync();
console.log(paragraph.text);
});
}
async function getSentences() {
await Word.run(async (context) => {
let sentences = context.document
.getSelection()
.getTextRanges(["."] /* Using the "." as delimiter */, false /*means without trimming spaces*/);
sentences.load("$none");
await context.sync();
let sentencesToTheEndOfParagraph = sentences.items[0]
.getRange()
.expandTo(
context.document
.getSelection()
.paragraphs.getFirst()
.getRange("End")
)
.getTextRanges(["."], false /* Don't trim spaces*/);
sentencesToTheEndOfParagraph.load("text");
await context.sync();
for (let i = 0; i < sentencesToTheEndOfParagraph.items.length; i++) {
console.log(sentencesToTheEndOfParagraph.items[i].text);
}
});
}
async function setup() {
await Word.run(async (context) => {
context.document.body.clear();
context.document.body.insertParagraph(
"Video provides a powerful way to help you prove your point.",
"Start"
);
context.document.body.paragraphs
.getLast()
.insertText(
"To make your document look professionally produced.",
"Replace"
);
});
}
async function tryCatch(callback) {
try {
await callback();
} catch (error) {
console.error(error);
}
}
Insert Content at Different Locations
$("#setup").click(() => tryCatch(setup));
$("#before").click(() => tryCatch(before));
$("#start").click(() => tryCatch(start));
$("#end").click(() => tryCatch(end));
$("#after").click(() => tryCatch(after));
$("#replace").click(() => tryCatch(replace));
async function before() {
await Word.run(async (context) => {
let range = context.document.body.paragraphs.getFirst().insertParagraph("This is Before", "Before");
range.font.highlightColor = "yellow";
await context.sync();
});
}
async function start() {
await Word.run(async (context) => {
// This button assumes before() ran.
// Get the next paragraph and insert text at the beginning. Note that there are invalid locations depending on the object. For instance, insertParagraph and "before" on a paragraph object is not a valid combination.
let range = context.document.body.paragraphs
.getFirst()
.getNext()
.insertText("This is Start", "Start");
range.font.highlightColor = "blue";
range.font.color = "white";
await context.sync();
});
}
async function end() {
await Word.run(async (context) => {
let range = context.document.body.paragraphs
.getFirst()
.getNext()
.insertText(" This is End", "End");
range.font.highlightColor = "green";
range.font.color = "white";
await context.sync();
});
}
async function after() {
await Word.run(async (context) => {
let range = context.document.body.paragraphs
.getFirst()
.getNext()
.insertParagraph("This is After", "After");
range.font.highlightColor = "red";
range.font.color = "white";
await context.sync();
});
}
async function replace() {
await Word.run(async (context) => {
let range = context.document.body.paragraphs.getLast().insertText("Just replaced the last paragraph!", "Replace");
range.font.highlightColor = "black";
range.font.color = "white";
await context.sync();
});
}
async function setup() {
await Word.run(async (context) => {
context.document.body.clear();
context.document.body.insertParagraph(
"Video provides a powerful way to help you prove your point.",
"Start"
);
context.document.body.paragraphs
.getLast()
.insertText(
"To make your document look professionally produced.",
"Replace"
);
});
}
async function tryCatch(callback) {
try {
await callback();
} catch (error) {
console.error(error);
}
}
Paragraph Properties
$("#indent").click(() => tryCatch(indent));
$("#spacing").click(() => tryCatch(spacing));
$("#space-after").click(() => tryCatch(spaceAfter));
$("#align").click(() => tryCatch(align));
$("#setup").click(() => tryCatch(setup));
async function indent() {
await Word.run(async (context) => {
context.document.body.paragraphs.getFirst().leftIndent = 75; //units = points
return context.sync();
});
}
async function spacing() {
await Word.run(async (context) => {
context.document.body.paragraphs.getFirst().lineSpacing = 20;
await context.sync();
});
}
async function spaceAfter() {
await Word.run(async (context) => {
context.document.body.paragraphs.getFirst().spaceAfter = 20;
await context.sync();
});
}
async function align() {
await Word.run(async (context) => {
context.document.body.paragraphs.getLast().alignment = "Centered";
await context.sync();
});
}
async function setup() {
await Word.run(async (context) => {
context.document.body.clear();
context.document.body.insertParagraph(
"Video provides a powerful way to help you prove your point",
"Start"
);
context.document.body.paragraphs
.getLast()
.insertText(
"To make your document look professionally produced.",
"Replace"
);
context.document.body.paragraphs.getFirst().alignment = "Left";
context.document.body.paragraphs.getLast().alignment = "Left";
});
}
async function tryCatch(callback) {
try {
await callback();
} catch (error) {
console.error(error);
}
}
Search
$("#setup").click(() => tryCatch(setup));
$("#basic-search").click(() => tryCatch(basicSearch));
$("#wildcard-search").click(() => tryCatch(wildcardSearch));
async function basicSearch() {
await Word.run(async (context) => {
let results = context.document.body.search("Online");
results.load("length");
await context.sync();
for (let i = 0; i < results.items.length; i++) {
results.items[i].font.highlightColor = "yellow";
}
await context.sync();
});
}
async function wildcardSearch() {
await Word.run(async (context) => {
let results = context.document.body.search("$*.[0-9][0-9]", { matchWildcards: true });
results.load("length");
await context.sync();
for (let i = 0; i < results.items.length; i++) {
results.items[i].font.highlightColor = "red";
results.items[i].font.color = "white";
}
await context.sync();
});
}
async function setup() {
await Word.run(async (context) => {
context.document.body.clear();
context.document.body.insertParagraph(
"Video provides a powerful way to help you prove your point.",
"Start"
);
context.document.body.paragraphs
.getLast()
.insertText(
"To make your document look professionally produced.",
"Replace"
);
await context.sync();
});
}
async function tryCatch(callback) {
try {
await callback();
} catch (error) {
console.error(error);
}
}
Get Word Count
$("#setup").click(() => tryCatch(setup));
$("#count").click(() => tryCatch(run));
async function run() {
await Word.run(async (context) => {
let paragraphs = context.document.body.paragraphs;
paragraphs.load("text");
await context.sync();
let text = [];
paragraphs.items.forEach((item) => {
let paragraph = item.text.trim();
if (paragraph) {
paragraph.split(" ").forEach((term) => {
let currentTerm = term.trim();
if (currentTerm) {
text.push(currentTerm);
}
});
}
});
let makeTextDistinct = new Set(text);
let distinctText = Array.from(makeTextDistinct);
let allSearchResults = [];
for (let i = 0; i < distinctText.length; i++) {
let results = context.document.body.search(distinctText[i], { matchCase: true, matchWholeWord: true });
results.load("text");
let correlatedResults = {
searchTerm: distinctText[i],
hits: results
};
allSearchResults.push(correlatedResults);
}
await context.sync();
allSearchResults.forEach((result) => {
let length = result.hits.items.length;
console.log("Search term: " + result.searchTerm + " => Count: " + length);
});
});
}
async function setup() {
await Word.run(async (context) => {
context.document.body.clear();
context.document.body.insertParagraph(
"Video provides a powerful way to help you prove your point.",
"Start"
);
context.document.body.insertParagraph(
"To make your document look professionally produced.",
"End"
);
});
}
/** Default helper for invoking an action and handling errors. */
async function tryCatch(callback) {
try {
await callback();
} catch (error) {
console.error(error);
}
}
Scroll to a Range
$("#setup").click(() => tryCatch(setup));
$("#scroll").click(() => tryCatch(scroll));
$("#scroll-end").click(() => tryCatch(scrollEnd));
async function scroll() {
await Word.run(async (context) => {
context.document.body.paragraphs.getLast().select();
await context.sync();
});
}
async function scrollEnd() {
await Word.run(async (context) => {
context.document.body.paragraphs.getLast().select("End");
await context.sync();
});
}
async function setup() {
await Word.run(async (context) => {
context.document.body.clear();
let firstSentence = context.document.body.insertParagraph(
"Video provides a powerful way to help you prove your point.",
"Start"
);
firstSentence.insertBreak(Word.BreakType.page, "After");
context.document.body.paragraphs
.getLast()
.insertText(
"To make your document look professionally produced.",
"Replace"
);
});
}
async function tryCatch(callback) {
try {
await callback();
} catch (error) {
console.error(error);
}
}
Split a Paragraph into Ranges
$("#setup").click(() => tryCatch(setup));
$("#highlight").click(() => tryCatch(highlightWords));
async function highlightWords() {
await Word.run(async (context) => {
let paragraph = context.document.body.paragraphs.getFirst();
let words = paragraph.split([" "], true /* trimDelimiters*/, true /* trimSpaces */);
words.load("text");
await context.sync();
for (let i = 0; i < words.items.length; i++) {
if (i >= 1) {
words.items[i - 1].font.highlightColor = "#FFFFFF";
}
words.items[i].font.highlightColor = "#FFFF00";
await context.sync();
await pause(200);
}
});
}
function pause(milliseconds) {
return new Promise((resolve) => setTimeout(resolve, milliseconds));
}
async function setup() {
await Word.run(async (context) => {
context.document.body.clear();
context.document.body.insertParagraph(
"Video provides a powerful way to help you prove your point.",
"Start"
);
context.document.body.paragraphs
.getLast()
.insertText(
"To make your document look professionally produced",
"Replace"
);
});
}
async function tryCatch(callback) {
try {
await callback();
} catch (error) {
console.error(error);
}
}
© 2026 Better Solutions Limited. All Rights Reserved. © 2026 Better Solutions Limited TopPrev