003.【ID】選択したクエリ一括起動
書いたコード
#targetengine "doQueries" var myDoc = app.activeDocument; var myAllQuery = []; var myAllQueryNames = []; var myAllQueryMode = []; var myQueryFolder = new Folder(Folder.userData + "/Adobe/InDesign/Version " + getVersion() + "-J/ja_JP/Find-Change Queries"); var myQueryFolderTst = new Folder("C:/Users/prepress.JPC/AppData/Roaming/Adobe/InDesign/Version 8.0-J/ja_JP/Find-Change Queries"); var myFolderList = myQueryFolder.getFiles(); var myFolderListLen = myFolderList.length; for (var i = 0; i < myFolderListLen; i++) { createQueryList(myFolderList[i]); } var myDlg = new Window("palette", "クエリ一括起動"); var myAllQueryLen = myAllQueryNames.length; //~ var findRanges = ["ドキュメント","ストーリー"] var searchModes = ["Text", "Grep"] for (var k = 0; k < myAllQueryLen; k++) { var main = myDlg.add("group {alignChildren: 'left', orientation: 'row'}"); var listBox1 = main.add("dropdownlist", undefined, myAllQueryNames); var listBox2 = main.add("dropdownlist", undefined, searchModes); //~ var listBox3 = main.add ("dropdownlist", undefined, findRanges); } var start = myDlg.add("button", undefined, "実行"); start.onClick = function () { myDlg.close(); for (var m = 0; m < myAllQueryLen; m++) { if (myDlg.children[m].children[0].selection == null) { return; } else { var slctQ = myDlg.children[m].children[0].selection.text; //~ var indx = myAllQueryNames.indexOf(slctQ); // ExtendScriptではindexOfが使えない… //~ var slctQMode = myAllQueryMode[indx] var slctQMode = myDlg.children[m].children[1].selection.text; $.writeln(slctQMode.toUpperCase()) eval("app.loadFindChangeQuery('" + slctQ + "',SearchModes." + slctQMode.toUpperCase() + "_SEARCH)"); eval("myDoc.change" + slctQMode + "();") } } app.findGrepPreferences=NothingEnum.NOTHING app.changeGrepPreferences=NothingEnum.NOTHING app.findGrepPreferences.findWhat="" app.changeGrepPreferences.changeTo="" app.findTextPreferences=NothingEnum.NOTHING app.changeTextPreferences=NothingEnum.NOTHING app.findTextPreferences.findWhat="" app.changeTextPreferences.changeTo="" } myDlg.show(); function getVersion() { var version = parseFloat(app.version).toFixed(1); if (version !== 7.5) { var version = Math.floor(version) + ".0" } return version; } function createQueryList(tgtFolder) { var myFileList = tgtFolder.getFiles(); var myFileListLen = myFileList.length; if (myFileListLen > 0) { for (var j = 0; j < myFileListLen; j++) { getQueryInfo(myFileList[j]); } } } function getQueryInfo(tgtFile) { var queryName = File.decode(tgtFile.name) var myQuery = { name: queryName.replace(/\.xml/, ""), mode: tgtFile.parent.name }; myAllQueryNames.push(myQuery.name); myAllQueryMode.push(myQuery.mode); }
メモ
クエリxmlに保存されている内容
- 検索文字列
- 置換文字列
- 検索形式
- 置換形式
- ロックされたレイヤーを含める
- ロックされたストーリーを含める
- 非表示のレイヤーを含める
- マスターページを含める
- 脚注を含める
- カナを区別
- 全半角を区別
検索範囲は含まれない。
用語
モーダルダイアログ:ダイアログを閉じるまで該当アプリケーションを操作できない。 モーダレスダイアログ:ダイアログが表示されていても該当アプリケーションを操作できる。
ひっかかったところ
- ListBoxはwin10で機能しない
- 配列操作のメソッドの多くはExtendScriptで使えない 悲しみ
積み残し
- 検索範囲の指定
- 検索オプションの指定
- 大分まだるっこしい手順をとってしまった気がする