I am writing a novel in a Google Doc. When complete, it will have probably have in excess of 75 chapters. I am not writing those chapters sequentially. Consequently, I am not attempting to use Chapter numbers, but rather a placeholder of "Chapter_" for each chapter heading (to be used as a search term when I am ready to replace the placeholders).
However, as I get further into the process, I will want to periodically number the chapters sequentially. Rather than do this manually, I would like to be able to automate the process with a Google script.
The following script is almost there, except that it numbers all of the chapters as "Chapter 1." I suspect I need to load an array with the chapter numbers, but despite much research, I can not figure out how to do that.
function onOpen() {
var ui = DocumentApp.getUi();
ui.createMenu('Custom')
.addItem('Renumber Chapters', 'reChapter')
.addToUi();
}
function reChapter(){
var doc = DocumentApp.getActiveDocument();
body = doc.getBody();
var n = 30;
Logger.log(n);
for (i = 0; i < n; i++) {
num = i+1
newText = "Chapter "+num+"";
body.replaceText("Chapter_", newText);
}
}
At first, I thought perhaps the loop was not running, but upon checking my log, it is:
2:46:16 PM Notice Execution started
2:46:16 PM Info 30.0
2:46:16 PM Info 0.0
2:46:16 PM Info 1.0
2:46:16 PM Info 2.0
2:46:16 PM Info 3.0
Any help would be much appreciated.
Note: My starting point for this code was something close, but not quite on point at: another stackoverflow post/query
Just to be clear, rather than the chapters being renumbered as:
Chapter 1
Chapter 2
Chapter 3
and so on
They are coming out:
Chapter 1
Chapter 1
Chapter 1
etc.
body.replaceText()replaces all occurrences at once (see documentation). So, the first loop does all the replacing, and then the remaining loops do nothing. An alternative approach is shown in the answer here: Google App Script replaceText to replace only first occurrence of matched string. In other words, use their "find first" technique in your loop.Chapter_placeholders is a one-shot process. Once the placeholders have gone, then you will need a different script function if you want to renumber your chapters again. I am not too familiar with Google Docs, but... do they not have something built-in which can renumber or sort by chapter headings (based on style types, etc.)?