I'm trying to create a simple script that prefills a template into a Google doc at the cursor point. I'm a bit stuck on how to add text and list items at the same time. Here is what I have:
function onOpen() {
var ui = DocumentApp.getUi();
// Or FormApp or SpreadsheetApp.
ui.createMenu('Templates')
.addItem('Insert Template', 'insertTemplate')
.addToUi();
}
function insertTemplate() {
var cursor = DocumentApp.getActiveDocument().getCursor();
if (cursor) {
var element = cursor.insertText("Some Header\n")
element.setBold(true);
var options = {weekday: 'long', year: 'numeric', month: 'long', day: 'numeric'};
var today = new Date();
dateStr = today.toLocaleDateString("en-US", options) + '\n\n';
var element = cursor.insertText(dateStr);
element.setBold(true);
var body = DocumentApp.getActiveDocument().getBody();
colors = ["blue", "red", "yellow"]
colors.forEach( function(color) {
body.appendListItem(color + ": ").setGlyphType(DocumentApp.GlyphType.BULLET);
});
} else {
DocumentApp.getUi().alert('Cannot find a cursor in the document.');
}
}
It correctly outputs something like:
Feb 12, 2019
Some Header
* blue
* red
* yellow
Now I want to append yet another simple line of text after the list but if I do it with cursor, it appends it before the date. How can I find the last position of the last item and insert text after it?
Feb 12, 2019 Some Header * blue * red * yellow sample text <--- here
If my understanding is correct, how about this modification? In this modification, I used the following flow.
dateStr
, "Some Header\\n"
and a list to the next child index.I think that there are several solutions for your situation. So please think of this as just one of them.
function insertTemplate() { var doc = DocumentApp.getActiveDocument(); // Added var cursor = doc.getCursor(); // Modified if (cursor) { var options = {weekday: 'long', year: 'numeric', month: 'long', day: 'numeric'}; var today = new Date(); dateStr = today.toLocaleDateString("en-US", options) + '\\n\\n'; var body = doc.getBody(); // Below script was modified. var offset = body.getChildIndex(cursor.getElement()); body.insertParagraph(offset, dateStr); body.insertParagraph(++offset, "Some Header\\n"); colors = ["blue", "red", "yellow"] colors.forEach(function(color, i) { body.insertListItem(++offset, color + ": ").setGlyphType(DocumentApp.GlyphType.BULLET); }); body.insertParagraph(--offset + colors.length, "sample text"); // Please set the text here. } else { DocumentApp.getUi().alert('Cannot find a cursor in the document.'); } }
dateStr
, this was used from your script.If I misunderstood your question and this was not the result you want, I apologize.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.