Javascript 使用谷歌文档&x27;设置驱动器文件名的段落标题样式

Javascript 使用谷歌文档&x27;设置驱动器文件名的段落标题样式,javascript,google-apps-script,google-docs,Javascript,Google Apps Script,Google Docs,我是谷歌应用程序脚本的新手。我目前正在inDesign上设计一本文学期刊。为了在indesign中轻松地将编辑器草稿从单个gDoc转换为多个文件,我正在编写一个脚本: 通过gDoc查找分页符 在分页符后在文件夹中创建新文档 根据标题样式命名文档。标题1为标题,标题2为作者 我已经成功地完成了1和2,但我被困在3。我的代码是从一个已经存在的代码改编而来的,但是我决定更加花哨,现在我非常恼火。这就是我的测试文档的外观: 这是我的密码: function getFolderName(){ v

我是谷歌应用程序脚本的新手。我目前正在inDesign上设计一本文学期刊。为了在indesign中轻松地将编辑器草稿从单个gDoc转换为多个文件,我正在编写一个脚本:

  • 通过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);
    }
    
    我一辈子都不知道自己做错了什么。感谢您的帮助

    主要问题是,当文件保存时,不是保存为:
    条目标题测试1标题标题测试2作者 它另存为
    Entry00

    如果有多个页面,则不使用标题名称保存,而是全部保存为
    Entryorangefart


    我不明白的是,在我的
    if-else if-else
    语句中,似乎
    curPar
    head1
    在记录器中是相等的
    true
    ,但文件仍保存为“Entry00”和“Entryorangefart”

    有什么问题?您可以使用“标题1”、“标题2”和“普通”作为段落样式。这看起来很好。@tehhowch抱歉,我忘记添加我的主要问题了,谢谢你的评论。我稍微编辑了你的代码,删除了
    UI()
    Doc()
    函数,以简化你的演示。请注意,您对页面的初始分配,
    var page=DocumentApp.create(“条目”+标题+作者),在for循环之外,意味着第一个文档总是
    Entry00
    。非常感谢@tehhowch!你的修复效果很好!我不知道如何接受您的修复作为答案,请将您所做的修复作为答案发布:确定您在原始代码中的错误位置以及更正的方法。
    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