Skip to main content
Participating Frequently
July 11, 2023
Answered

Script to extract a list of all spelling errors in a document?

Do you know of a script, utility or method to extract a list of all spelling errors, according to InDesign’s spellchecking engine, detected inside a document or a bunch of documents?

This topic is closed to new replies. Start a new post to keep the conversation going.
Peter Kahrel
Peter KahrelCorrect answer
Community Expert
July 11, 2023

Here's a script that collects all words caught by the spell checker and places them in a new document.  It's a horrible thing, very slow, and  right up there in the top-10 of ugly solutions. But it works. It came out of a discussion a few years ago here

https://community.adobe.com/t5/indesign/how-to-compare-a-word-with-indesign-user-dictionary-words/m-p/10450665?page=1

which petered out after a few exchanges.

 

(function () {
  
  const props = app.spellPreferences.properties;
  const spellWindow = app.menuActions.item ('$ID/Check Spelling...');
  
  var typos = [];
  var knownTypo = {};
  
  function record (typo) {
    if (!knownTypo[typo]) {
      knownTypo[typo] = true;
      typos.push (typo);
    }
  }

  // Begin ----------------------------------------------
  
  // Hide the layout window to speed things up
  app.windows[0].minimize();
  
  app.spellPreferences.properties = {
    checkCapitalizedSentences: false,
    checkCapitalizedWords: false,
    checkRepeatedWords: false,
    checkMisspelledWords: true
  }

  spellWindow.invoke();
  if (!app.selection.length) { // No spelling errors, nothing to do
    exit();
  }

  // If there's a typo, it's now selected
  record (app.selection[0].contents);
  
  var i = app.selection[0].index; // The location of the typo
  spellWindow.invoke();
  while (app.selection[0].index !== i) { // Stop when we catch the same word
    i = app.selection[0].index;
    record (app.selection[0].contents);
    spellWindow.invoke(); // Go to the next typo
  }
  app.selection = null;
  
  // Restore the layout window and the spell preferences
  app.activate();
  app.spellPreferences.properties = props;
  
  // Create a new document and add the typos.
  app.documents.add().textFrames.add ({
    geometricBounds: app.documents[0].pages[0].bounds,
    contents: typos.sort().join('\r'),
  });
  
}());

 

7 replies

Robert at ID-Tasker
Legend
September 11, 2024

I am guessing all of the text is in textframes. If so, the page number should be available with app.selection[0].parentTextFrames[0].parentPage.documentOffset. Unless I am misunderstanding the structure.

You need to add that to this line in whatever syntax you would like.

record (app.selection[0].contents);

Note that the documentOffset starts at 0 so it will be one less than the actual page number.

Maybe  something like this:

var page = parseInt(app.selection[0].parentTextFrames[0].parentPage.documentOffset)+1;
record(app.selection[0].contents + ": " + page);

 


@John D Herzog

 

There is a new thread: 

 

https://community.adobe.com/t5/indesign-discussions/can-someone-edit-this-script-so-it-includes-associated-page-numbers/td-p/14854508 

 

Translate
John D Herzog
Inspiring
September 11, 2024

I am guessing all of the text is in textframes. If so, the page number should be available with app.selection[0].parentTextFrames[0].parentPage.documentOffset. Unless I am misunderstanding the structure.

You need to add that to this line in whatever syntax you would like.

record (app.selection[0].contents);

Note that the documentOffset starts at 0 so it will be one less than the actual page number.

Maybe  something like this:

var page = parseInt(app.selection[0].parentTextFrames[0].parentPage.documentOffset)+1;
record(app.selection[0].contents + ": " + page);

 

Translate
Peter Kahrel
Community Expert
Peter KahrelCommunity ExpertCorrect answer
Community Expert
July 11, 2023

Here's a script that collects all words caught by the spell checker and places them in a new document.  It's a horrible thing, very slow, and  right up there in the top-10 of ugly solutions. But it works. It came out of a discussion a few years ago here

https://community.adobe.com/t5/indesign/how-to-compare-a-word-with-indesign-user-dictionary-words/m-p/10450665?page=1

which petered out after a few exchanges.

 

(function () {
  
  const props = app.spellPreferences.properties;
  const spellWindow = app.menuActions.item ('$ID/Check Spelling...');
  
  var typos = [];
  var knownTypo = {};
  
  function record (typo) {
    if (!knownTypo[typo]) {
      knownTypo[typo] = true;
      typos.push (typo);
    }
  }

  // Begin ----------------------------------------------
  
  // Hide the layout window to speed things up
  app.windows[0].minimize();
  
  app.spellPreferences.properties = {
    checkCapitalizedSentences: false,
    checkCapitalizedWords: false,
    checkRepeatedWords: false,
    checkMisspelledWords: true
  }

  spellWindow.invoke();
  if (!app.selection.length) { // No spelling errors, nothing to do
    exit();
  }

  // If there's a typo, it's now selected
  record (app.selection[0].contents);
  
  var i = app.selection[0].index; // The location of the typo
  spellWindow.invoke();
  while (app.selection[0].index !== i) { // Stop when we catch the same word
    i = app.selection[0].index;
    record (app.selection[0].contents);
    spellWindow.invoke(); // Go to the next typo
  }
  app.selection = null;
  
  // Restore the layout window and the spell preferences
  app.activate();
  app.spellPreferences.properties = props;
  
  // Create a new document and add the typos.
  app.documents.add().textFrames.add ({
    geometricBounds: app.documents[0].pages[0].bounds,
    contents: typos.sort().join('\r'),
  });
  
}());

 

Translate
Participating Frequently
July 11, 2023

Awesome! Thank you so much, Peter, for the prompt response and for all your awesome scripts and shared knowledge!

Translate
Geоrge
Legend
July 11, 2023

https://redokun.com/blog/indesign-spell-check#scripts-check-document-indesign

 

>> List of misspelled words. Theunis DeJong developed this script that creates a list of all the words in your document that don't exist in the InDesign dictionary.

 

 

Translate
Remember, never say you can't do something in InDesign, it's always just a question of finding the right workaround to get the job done. © David Blatner
Participating Frequently
July 11, 2023

Thank you, but both scripts in linked as "List of misspelled words" in that page don't do (nor claim to do if I read their description in the subsequent page they can be downloaded from) what the page says. They gather all words in a document—also the ones spelled correctly.

Translate