Javascript InDesign脚本如果段落样式,则提取故事

Javascript InDesign脚本如果段落样式,则提取故事,javascript,adobe-indesign,Javascript,Adobe Indesign,与下面的脚本斗争。我修改了找到的一个脚本,以便它将所有故事提取为txt文件,并使用段落中文本的文件名保存txt文件 事实证明,我们并不希望所有的故事都被提取出来,但我们确实希望的故事在第一段有一个固定的段落风格 我正在努力解决的部分是if语句的语法,它检查当前应用的段落样式是什么 感谢任何帮助,如果我的问题不清楚,很抱歉 main(); function main(){ //Make certain that user interaction (display of dialogs, etc.)

与下面的脚本斗争。我修改了找到的一个脚本,以便它将所有故事提取为txt文件,并使用段落中文本的文件名保存txt文件

事实证明,我们并不希望所有的故事都被提取出来,但我们确实希望的故事在第一段有一个固定的段落风格

我正在努力解决的部分是if语句的语法,它检查当前应用的段落样式是什么

感谢任何帮助,如果我的问题不清楚,很抱歉

main();
function main(){
//Make certain that user interaction (display of dialogs, etc.) is turned on.
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.interactWithAll;
if(app.documents.length != 0){
    if (app.activeDocument.stories.length != 0){
        myDisplayDialog();
    }
    else{
        alert("The document does not contain any text. Please open a document containing text and try again.");
    }
}
else{
    alert("No documents are open. Please open a document and try again.");
}
}
function myDisplayDialog(){
with(myDialog = app.dialogs.add({name:"ExportAllStories"})){
    //Add a dialog column.
    myDialogColumn = dialogColumns.add()    
    with(myDialogColumn){
        with(borderPanels.add()){
            staticTexts.add({staticLabel:"Export as:"});
            with(myExportFormatButtons = radiobuttonGroups.add()){
                radiobuttonControls.add({staticLabel:"Text Only", checkedState:true});
                radiobuttonControls.add({staticLabel:"RTF"});
                radiobuttonControls.add({staticLabel:"InDesign Tagged Text"});
            }
        }
    }
    myReturn = myDialog.show();
    if (myReturn == true){
        //Get the values from the dialog box.
        myExportFormat = myExportFormatButtons.selectedButton;
        myDialog.destroy;
        myFolder= Folder.selectDialog ("Choose a Folder");
        if((myFolder != null)&&(app.activeDocument.stories.length !=0)){
            myExportAllStories(myExportFormat, myFolder);
        }
    }
    else{
        myDialog.destroy();
    }
}
}
//myExportStories function takes care of exporting the stories.
//myExportFormat is a number from 0-2, where 0 = text only, 1 = rtf, and 3 = tagged text.
//myFolder is a reference to the folder in which you want to save your files.
function myExportAllStories(myExportFormat, myFolder){
for(myCounter = 0; myCounter < app.activeDocument.stories.length; myCounter++){
    myStory = app.activeDocument.stories.item(myCounter);
    myID = myStory.id;
    switch(myExportFormat){
        case 0:
            myFormat = ExportFormat.textType;
            myExtension = ".txt"
            break;
        case 1:
            myFormat = ExportFormat.RTF;
            myExtension = ".rtf"
            break;
        case 2:
            myFormat = ExportFormat.taggedText;
            myExtension = ".txt"
            break;
    }
    if(myStory.paragraphs[0].appliedParagraphStyle = "PRODUCT HEADING"){

        myFileName = myStory.paragraphs[0].contents;
        myFilePath = myFolder + "/" + myFileName;
        myFile = new File(myFilePath);
        myStory.exportFile(myFormat, myFile);
    }
}
}
main();
函数main(){
//确保用户交互(对话框显示等)已打开。
app.scriptPreferences.userInteractionLevel=userInteractionLevel.InteractionWithAll;
如果(app.documents.length!=0){
如果(app.activeDocument.stories.length!=0){
myDisplayDialog();
}
否则{
警报(“文档不包含任何文本。请打开包含文本的文档,然后重试。”);
}
}
否则{
警报(“没有打开任何文档。请打开文档并重试。”);
}
}
函数myDisplayDialog(){
使用(myDialog=app.dialogs.add({name:“ExportAllStories”})){
//添加一个对话框列。
myDialogColumn=dialogColumns.add()
带(myDialogColumn){
使用(borderPanels.add()){
添加({staticLabel:“导出为:”});
使用(myExportFormatButtons=radiobuttonGroups.add()){
添加({staticLabel:“纯文本”,checkedState:true});
添加({staticLabel:“RTF”});
添加({staticLabel:“InDesign Tagged Text”});
}
}
}
myReturn=myDialog.show();
if(myReturn==true){
//从对话框中获取值。
myExportFormat=myExportFormatButtons.selectedButton;
myDialog.destroy;
myFolder=Folder.selectDialog(“选择文件夹”);
如果((myFolder!=null)&&(app.activeDocument.stories.length!=0)){
myExportAllStories(myExportFormat,myFolder);
}
}
否则{
myDialog.destroy();
}
}
}
//myExportStories函数负责导出故事。
//myExportFormat是0-2之间的数字,其中0=仅文本,1=rtf,3=标记文本。
//myFolder是对要保存文件的文件夹的引用。
函数myExportAllStories(myExportFormat,myFolder){
对于(myCounter=0;myCounter
应用段落样式的类型是
[对象段落样式]
,因此您需要将其与另一个段落样式(即,
app.activeDocument.paragraphStyles.item(“产品标题”)
返回段落样式)进行比较,或者比较样式的名称

另外,不要使用
=
进行测试。单个
=
为“应用”;要测试(内部)相等性,请使用双精度
=
。(Javascript还有一个“严格相等”的比较:
=
,但在这种情况下不应使用它。)

如果将比较行更改为

if (myStory.paragraphs[0].appliedParagraphStyle.name == "PRODUCT HEADING")

此外,该行

myFileName = myStory.paragraphs[0].contents;
获取整个段落以用作文件名,通常这将包括结尾处的段落返回。(例外情况是当此段落是故事中的最后一段时。)由于使用此字符串作为新文件名,因此必须删除段落返回(如果存在)。这可以通过几种方式实现,但最简单的方法是使用正则表达式替换:

myFileName = myStory.paragraphs[0].contents.replace(/\s*$/,'');

因为这也将免费删除末尾的所有多余空格和标签。

非常感谢。我知道我很接近。然而,我现在有一个不同的问题。它可以工作,但文件名的末尾有一个软回车,所以Finder(mac)会将每个文件都视为.txt文件,但在编辑文件名时,它是正确的。我怎么能抓住第一段的内容,但去掉结尾的一个字符?哈,我错过了。补充!谢谢你,我已经把这个标记为我原来问题的答案。但我尝试添加另一个。替换行以删除斜杠,但它抛出了一个错误。如何从第一段中删除“/”作为文件名?啊——正斜杠是Javascript正则表达式中的一个特殊字符:它开始和结束表达式!所以你必须用反斜杠来逃避它。为了只匹配一个斜杠,您可以使用类似于这种无意的ASCII艺术:
/\/
。要删除任意数量的,请使用
。替换(//\//g',)
。谢谢,现在可以了。虽然我们还有另一个问题,但不知道是什么问题,我无法寻求帮助。