Documents


Insert some text

doc.body.insertText("This is me inserting some text into my document. \n", "Start") 
doc.body.getRange('Content').select();
doc.body.search("document",{matchCase:true, matchWholeWord:true}).getFirst().select();
let myResults = doc.body.search("document", { matchCase: true, matchWholeWord: true })
myResults.load(['items','text']);
await context.sync();
myResults.items.forEach(function(rng){
    console.log(rng.text)
})

doc.body.load(['style']);
await context.sync();

insert base64 encoded .docx at the beginning of the content body.

var body = ctx.document.body; 
body.insertFileFromBase64(getBase64(), Word.InsertLocation.start);

save a document

Word.run(function (context) { 
    var thisDocument = context.document;
    context.load(thisDocument, 'saved');
    
    return context.sync().then(function () {
        
        if (thisDocument.saved === false) {
            // Queue a command to save this document.
            thisDocument.save();
            
            return context.sync().then(function () {
                console.log('Saved the document');
            });
        } else {
            console.log('The document has not changed since the last save.');
        }
    });
})

Built-in Document Properties

$("#run").click(() => tryCatch(getProperties)); 

async function getProperties() {
  await Word.run(async (context) => {
    let builtInProperties = context.document.properties;
    builtInProperties.load("*"); // Let's get all!

    await context.sync();
    console.log(JSON.stringify(builtInProperties, null, 4));
  });
}

async function tryCatch(callback) {
  try {
    await callback();
  } catch (error) {
    console.error(error);
  }
}

Custom Document Properties

$("#number").click(() => tryCatch(insertNumericProperty)); 
$("#string").click(() => tryCatch(insertStringProperty));
$("#read").click(() => tryCatch(readCustomDocumentProperties));

async function insertNumericProperty() {
  await Word.run(async (context) => {
    context.document.properties.customProperties.add("Numeric Property", 1234);

    await context.sync();
    console.log("Property added");
  });
}

async function insertStringProperty() {
  await Word.run(async (context) => {
    context.document.properties.customProperties.add("String Property", "Hello World!");

    await context.sync();
    console.log("Property added");
  });
}

async function readCustomDocumentProperties() {
  await Word.run(async (context) => {
    let properties = context.document.properties.customProperties;
    properties.load("key,type,value");

    await context.sync();
    for (var i = 0; i < properties.items.length; i++)
      console.log(
        "Property Name:" +
          properties.items[i].key +
          "; Type=" +
          properties.items[i].type +
          "; Property Value=" +
          properties.items[i].value
      );
  });
}

async function tryCatch(callback) {
  try {
    await callback();
  } catch (error) {
    console.error(error);
  }
}

Document Assembly

$("#insert-header").click(() => tryCatch(insertHeader)); 
$("#add-paragraphs").click(() => tryCatch(addParagraphs));
$("#add-content-controls").click(() => tryCatch(addContentControls));
$("#change-customer").click(() => tryCatch(changeCustomer));
$("#add-footer").click(() => tryCatch(addFooter));

async function insertHeader() {
  await Word.run(async (context) => {
    let header = context.document.body.insertText(
      "This is a sample Heading 1 Title!!\n",
      "Start" /*this means at the beginning of the body */
    );
    header.styleBuiltIn = Word.Style.heading1;

    await context.sync();
  });
}

async function addParagraphs() {
  await Word.run(async (context) => {
    let paragraph = context.document.body.insertParagraph("Timeline", "End");
    paragraph.style = "Heading 2";
    let paragraph2 = context.document.body.insertParagraph(
      "The Services shall commence on July 31, 2015, and shall continue through July 29, 2015.",
      "End"
    );
    paragraph2.style = "Normal";
    let paragraph3 = context.document.body.insertParagraph("Project Costs by Phase", "End");
    paragraph3.style = "Heading 2";
    let paragraph4 = context.document.body.insertParagraph("<Add Project Costs Here>", "End");
    paragraph4.style = "Normal";
    paragraph4.font.highlightColor = "#FFFF00";
    let contentControl = paragraph4.insertContentControl();
    contentControl.title = "ProjectCosts";
    let paragraph5 = context.document.body.insertParagraph("Project Team", "End");
    paragraph5.style = "Heading 2";
    paragraph5.font.highlightColor = "#FFFFFF";
    let paragraph6 = context.document.body.insertParagraph("Terms of Work", "End");
    paragraph6.style = "Heading 1";
    let paragraph7 = context.document.body.insertParagraph(
      "Contractor shall provide the Services and Deliverable(s) as follows:",
      "End"
    );
    paragraph7.style = "Normal";
    let paragraph8 = context.document.body.insertParagraph("Out-of-Pocket Expenses / Invoice Procedures", "End");
    paragraph8.style = "Heading 2";
    let paragraph9 = context.document.body.insertParagraph(
      "Client will be invoiced monthly for the consulting services.",
      "End"
    );
    paragraph9.style = "Normal";
    context.document.body.insertBreak("Page", "End");

    await context.sync();
  });
}

async function addContentControls() {
  await Word.run(async (context) => {
    let results = context.document.body.search("Contractor");
    results.load("font/bold");

    let customerContentControls = context.document.contentControls.getByTag("customer");
    customerContentControls.load("text");
    await context.sync();

    if (customerContentControls.items.length === 0) {
      for (var i = 0; i < results.items.length; i++) {
        results.items[i].font.bold = true;
        var cc = results.items[i].insertContentControl();
        cc.tag = "customer"; // This value is used in the next step of this sample.
        cc.title = "Customer Name " + i;
      }
    }
    await context.sync();
  });
}

async function changeCustomer() {
  await Word.run(async (context) => {
    let contentControls = context.document.contentControls.getByTag("customer");
    contentControls.load("text");

    await context.sync();

    for (let i = 0; i < contentControls.items.length; i++) {
      contentControls.items[i].insertText("Fabrikam", "Replace");
    }

    await context.sync();
  });
}

async function addFooter() {
  await Word.run(async (context) => {
    context.document.sections
      .getFirst()
      .getFooter("Primary")
      .insertParagraph("Confidential", "End");

    await context.sync();
  });
}

async function tryCatch(callback) {
  try {
    await callback();
  } catch (error) {
    console.error(error);
  }
}

Set Multiple Properties at Once

$("#set-multiple-properties-with-object").click(() => tryCatch(setMultiplePropertiesWithObject)); 
$("#copy-properties-from-paragraph").click(() => tryCatch(copyPropertiesFromParagraph));
$("#setup").click(() => tryCatch(setup));

async function setMultiplePropertiesWithObject() {
  await Word.run(async (context) => {
    const paragraph = context.document.body.paragraphs.getFirst();
    paragraph.set({
      leftIndent: 30,
      font: {
        bold: true,
        color: "red"
      }
    });

    await context.sync();
  });
}

async function copyPropertiesFromParagraph() {
  await Word.run(async (context) => {
    const firstParagraph = context.document.body.paragraphs.getFirst();
    const secondParagraph = firstParagraph.getNext();
    firstParagraph.load("text, font/color, font/bold, leftIndent");

    await context.sync();

    secondParagraph.set(firstParagraph);

    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);
  }
}


async function performSearch() { 
  let searchTerm = <...>;

  await Word.run(async (context) => {
    let searchItems = context.document.body.search(
       searchTerm, {matchCase: false, matchWholeWord: true});
    searchItems.load("text");
    await context.sync();

    let fullSentences: Word.Range[] = [];
    searchItems.items.forEach(range => {
      let sentence = range.getTextRanges(
      [".", "?", "!", ",", ";"]).getFirst();
      sentence.load("text");
      fullSentences.push(sentence);
    });
    await context.sync();

    let $searchResults = $("#search-results").empty();
    fullSentences.forEach(range => {
      let $button = $("<a href='javascript:void(0)'>")
        .text(range.text)
        .click(() =>
          tryCatch(() => selectAndFormatRange(range)));
      $searchResults.append($button);
    });
 });
}

function selectAndFormatRange(range: Word.Range) {
  console.log("TODO");
}



© 2022 Better Solutions Limited. All Rights Reserved. © 2022 Better Solutions Limited TopPrevNext