Используйте стиль заголовка абзаца для документа Google, чтобы задать имя диска - PullRequest
0 голосов
/ 28 апреля 2018

Я новичок в мире сценариев Google App. В настоящее время я работаю над выкладкой литературного журнала в InDesign. Чтобы превратить редакторы в черновик из одного gDoc в несколько файлов, которые легко разместить в indesign, я работаю над сценарием, который:

  1. проходит через gDoc и находит разрывы страниц
  2. создает новый документ в папке после разрыва страницы
  3. называет документ на основе стилей заголовка. заголовок 1 для заголовка, заголовок 2 для автора

Я успешно выполнил 1 и 2, но застрял на 3. Мой код адаптирован из ранее существовавшего кода, но я решил быть более модным, и теперь я так раздражен. Вот как выглядит мой тестовый документ:
testingDoc

вот мой код:

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"

...