Javascript 使用谷歌文档&x27;设置驱动器文件名的段落标题样式
我是谷歌应用程序脚本的新手。我目前正在inDesign上设计一本文学期刊。为了在indesign中轻松地将编辑器草稿从单个gDoc转换为多个文件,我正在编写一个脚本: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
这是我的密码:
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