Copy link to clipboard
Copied
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?
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
which petered out after a few exchanges.
(function () {
const props = app.spellPreferences.properties;
const spellWindo
...
Copy link to clipboard
Copied
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.
Copy link to clipboard
Copied
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.
Copy link to clipboard
Copied
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
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'),
});
}());
Copy link to clipboard
Copied
Awesome! Thank you so much, Peter, for the prompt response and for all your awesome scripts and shared knowledge!
Copy link to clipboard
Copied
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);
Copy link to clipboard
Copied
Copy link to clipboard
Copied
On a PC - probably on a Mac as well - if there is WORD installed - it might be quicker to copy text to WORD and perform spellchecking there? WORD returns collection of all spellcheck errors.