Я новичок в мире сценариев Google App. В настоящее время я работаю над выкладкой литературного журнала в InDesign. Чтобы превратить редакторы в черновик из одного gDoc в несколько файлов, которые легко разместить в indesign, я работаю над сценарием, который:
- проходит через gDoc и находит разрывы страниц
- создает новый документ в папке после разрыва страницы
- называет документ на основе стилей заголовка. заголовок 1 для заголовка, заголовок 2 для автора
Я успешно выполнил 1 и 2, но застрял на 3. Мой код адаптирован из ранее существовавшего кода, но я решил быть более модным, и теперь я так раздражен. Вот как выглядит мой тестовый документ:
вот мой код:
function getFolderName(){
var response = DocumentApp.getUi().prompt("Enter a folder name");
if (response.getSelectedButton() == DocumentApp.getUi().Button.OK)
return DriveApp.createFolder(response.getResponseText());
return null;
}
function nameSplitSave() {
var folder = getFolderName();
if (folder == null)
return false;
var pBrk = DocumentApp.ElementType.PAGE_BREAK;
var drive = DriveApp.getRootFolder();
var doc = DocumentApp.getActiveDocument();
var body = doc.getBody();
var par = body.getParagraphs();
var entry = 1, title = 0, artist = 0;
var page = DocumentApp.create("Entry" + title + artist);
for (var i = 0; i < par.length; i++){
var hasbreak = false;
var head1 = DocumentApp.ParagraphHeading.HEADING1;
var head2 = DocumentApp.ParagraphHeading.HEADING2;
var curPar = par[i];
Logger.log('curPar '+ curPar);
Logger.log('curPar heading style is '+ curPar.getHeading() + 'heading1' + head1 + 'heading2' + head2);
if (curPar.getHeading() == head1)
title = curPar;
else if (curPar.getHeading() == head2)
artist = curPar;
else {
title ='orange';
artist ='fart';
}
for (var j = 0; j < par[i].getNumChildren(); j++) {
var child = par[i].getChild(j);
if (child.getType() == pBrk) {
hasbreak = true;
break;
}
}
if (!hasbreak) {
var seppar = par[i].copy();
page.getBody().appendParagraph(seppar);
} else {
var par1 = par[i].copy();
var par2 = par[1].copy();
var hitbreak = false;
for (var i1 = 0; i1 < par1.getNumChildren(); i1++) {
if (par1.getChild(i1).getType() == pBrk)
hitbreak = true;
if (hitbreak)
par1.removeChild(par1.getChild(i1));
}
hitbreak = false;
for (var i1 = 0; i1 < par2.getNumChildren(); i1++) {
if (par2.getChild(i1).getType() == pBrk)
hitbreak = true;
if (!hitbreak || par2.getChild(i1).getType() == pBrk)
par2.removeChild(par2.getChild(i1));
}
page.getBody().appendParagraph(par1);
page.saveAndClose();
//Add file to folder
var file = DriveApp.getFileById(page.getId());
folder.addFile(file);
drive.removeFile(file);
entry++;
page = DocumentApp.create("Entry" + title + artist);
page.getBody().appendParagraph(par2);
}
}
page.saveAndClose();
var file = DriveApp.getFileById(page.getId());
folder.addFile(file);
drive.removeFile(file);
}
когда я запускаю тест логгера, он показывает следующее сообщение:
curPar Paragraph
curPar heading style is Heading 1heading1Heading 1heading2Heading 2
curPar Paragraph
curPar heading style is Heading 2heading1Heading 1heading2Heading 2
curPar Paragraph
curPar heading style is Normalheading1Heading 1heading2Heading 2
Я не могу на всю жизнь понять, что я делаю неправильно. любая помощь приветствуется!
Основная проблема заключается в том, что при сохранении файла вместо сохранения как:
EntryHeadingTest1TitleHeadingTest2Author
Сохраняется как
Entry00
И если есть несколько страниц, вместо того, чтобы сохраняться с именами заголовков, они все сохраняются как
Entryorangefart
Что я не понимаю, так это в моем операторе if-else if-else
, похоже, что curPar
и head1
равны true
в логгере, но файл все еще сохраняется как "Entry00" и "Entryorangefart"