Word
This documents the Word module and how to use it from JavaScript flows.
Requires Manatee v2.0 or greater
This version of the Html module cannot be used with Manatee v1.29 or earlier.
You can load the module using the following code:
var c = Module.load("Word", {version: "X.Y.Z"});
Open and inspect a document
To parse and inspect a document, use the open
method:
var doc = c.open("path/to/document.docx");
If you need to edit the document, you can use the open
method with the editable: true
option:
var doc = c.open("path/to/document.docx", {editable: true});
Remember to close()
all documents you’ve opened
If you don’t you wont be able to access the document until Manatee is restarted.
The returned doc
is a document-object-model of a sorts of the document in question. You can use it to retrieve all paragraphs, tables, lists, etc. in the document.
Each node in the inspect()
output has a type
property that indicates the type of node. The following types are supported:
document
: the root node of the documentparagraph
: a paragraphtable
: a tablelist
: a listlistitem
: an item in a listtext
: a text node
In addition you can invoke the toHtml()
method on each node to get a simplified HTML representation of the node.
Closing a document
When you are done with a document, you must close it using the close
method:
doc.close();
Always close all documents opened.
Edit a document
You can replace text in a document using the replace
method:
doc.replace("find", "replace");
Remember to open the document with the editable: true
option
If you don’t, the replace
method will throw an error.
var doc = c.open("path/to/document.docx", { editable: true });
You can also replace text using a regular expression:
doc.replace(/find/g, "replace");
or use a function to replace text:
doc.replace(/find/g, function (match) {
return match.toUpperCase();
});
You can also supply a map of values to be replaced:
doc.replace({
"find1": "replace1",
"find2": "replace2"
});
WARNING
The replace
will modify the file in-place so if you need the original file, make a copy before opening it:
Fs.cp("path/to/document.docx", "path/to/document.docx.bak");
var doc = c.open("path/to/document.docx", { editable: true });
...
In addition to the replace
function you can also modify text more directly.
Each text
node has a text
property that you can use to get or set the text of the node:
var doc = c.open("path/to/document.docx");
var t = doc.Children[0]; // here we assume the first node is a text node
t.text = "Hello World";
// NB: You need to explictly save the document (save will also close it)
doc.save();