Google Apps Script snippets ᕦʕ •ᴥ•ʔᕤ

Check/uncheck the entire checklist in Google Documents

Currently it is unknown if the checklist can be manipulated in Docs. Clark Lind suggests to replace a list item with a copy of one of them (which is in expected state – check/uncheck). We need to know the id – see printListIds() – of the list in order to be able to change it. And also we need to know which element is in the right state. The code used the last one.

Important. The code does not support paragraph deep copying.


 * Check/uncheck the entire checklist in the Document
 * @param {GoogleAppsScript.Document.Document} doc A Document
 * @param {string} index The checklist id
function uncheckListById_(doc, id) {
  const body = doc.getBody();
  const lists = body.getListItems().filter((l) => l.getListId() === id);
  const last = lists.splice(-1)[0];
  lists.reverse().forEach((item) => {
    const copy = last.copy();
    body.insertListItem(body.getChildIndex(item), copy);

Run it

/* global uncheckListById_ */

 * Run the snippet
function run() {
  uncheckListById_(DocumentApp.getActiveDocument(), 'kix.yy1s6bgaip7h');

 * Prints ids of lists in the current Document
function printListIds() {

 * Gets ids of lists in the current Document
 * @param {globalThis.DocumentApp.Document} doc
function getListIds_(doc) {
  return doc
    .reduce((a, c) => {
      const id = c.getListId();
      if (a.indexOf(id) === -1) a.push(id);
      return a;
    }, []);

Ui triggers

 * Creates the user menu for handy use.
function onOpen() {
    .addItem('Mark the list as its last item', 'run')