全頁の特定の文字に文字スタイルをつけたい

[9608]全頁の特定の文字に文字スタイルをつけたい 投稿者:tomtom 投稿日:2019/04/28 10:55:19
過去に「一括で文字スタイルをかけたい」があったので
・・・・・・・・・
(function(){
//検索文字列の指定
sKeyword = "positive";
//変更スタイルの指定
sChrStyleName = "non_break";

//単語の検索
aHitWord = app.activeDocument.search( sKeyword, true, true, false, false );
//ヒットした単語のスタイルを変更
for( i=0; i < aHitWord.length; i++ ){
aHitWord[i].appliedCharacterStyle = sChrStyleName;
}
})();
・・・・・・・・・・・
としたのですが、「app.activeDocument.search」が関数ではありません。と言うエラーになりました。
できれば全頁の「positive」と「diameter」と言う文字に「non_break」という文字スタイルを付けたいのです。
よろしくお願いします。
「search」メソッドはInDesignのバージョンが2~CS2のときのものですので、CS3以降では使えないです。
changeTextもしくはchangeGrepメソッドを使います。
[9610]Re: 全頁の特定の文字に文字スタイルをつけたい 投稿者:tomtom 投稿日:2019/04/29 20:43:21
ありがとうございます。

今度は、下記の「特定の文字を指定したスタイルに設定する」とあったので試した見ましたが、

「selObj[i].paragraphs[j].insertionPoints.itemByRange().applyStyleが関数ではありません。」
と言うエラーがでます。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
(function (){
var checkWord = "positive"; // スタイルを適用する文字
var charStyleName = "non_break"; // 適用するスタイル名
var selObj = app.selection;
var cStyle = app.activeDocument.characterStyles.item(charStyleName);

for (var i=0; i<selObj.length; i++){
for (var j=0; j<selObj[i].paragraphs.length; j++){
var txt = selObj[i].paragraphs[j].contents;

var p = txt.indexOf(checkWord);
while (p > -1){
selObj[i].paragraphs[j].insertionPoints.itemByRange(p, p+checkWord.length).applyStyle(cStyle);
p = txt.indexOf(checkWord, p + checkWord.length);
}
}
}
})();
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
どこに問題があるのでしょうか?
全然わからなくて申し訳ございません。
applyStyle()メソッドもInDesignのバージョンが2~CS2のときのものです。
どのバージョンを使われているのか分からないですが、お使いのバージョンに対応した資料を使わないと、永遠に分からないですよ。
お勧めの入門書(PDF版)があるのですが、ここでは営業活動が禁止されているので……

私ならこうするというのを書いておきますので、参考にしてください。CS3以降であれば動くはずです。

app.findGrepPreferences.findWhat = "positive|diameter";
app.changeGrepPreferences.appliedCharacterStyle = app.documents[0].characterStyles.itemByName("non_break");
app.documents[0].changeGrep();
あ、設定クリアを入れるのを忘れてました。
先頭に次の2行を追加してください。
app.findGrepPreferences = NothingEnum.NOTHING;
app.changeGrepPreferences = NothingEnum.NOTHING;
[9613]Re: 全頁の特定の文字に文字スタイルをつけたい 投稿者:tomtom 投稿日:2019/05/02 19:53:23
ご連絡ありがとうございます。pdfダウンロードしました。
(勉強したいと思います)
CS5を使用していますので、書いていただいたものでエラーは出ませんでした。
しかし、特定の文字「positive」自体が消えてなくなりました。
文字はそのままで、特定の文字に文字スタイルをつける方法教えていただけますか。
よろしくお願いします。
[9614]Re: 全頁の特定の文字に文字スタイルをつけたい 投稿者:tomtom 投稿日:2019/05/02 21:28:41
すみません 間違いました。

app.findGrepPreferences = NothingEnum.NOTHING;
app.changeGrepPreferences = NothingEnum.NOTHING;
app.findGrepPreferences.findWhat = "positive|diameter";
app.documents[0].characterStyles.itemByName("non_break");
app.documents[0].changeGrep();
ですと、特定の文字「positive」自体が消えてしまい

app.findGrepPreferences = NothingEnum.NOTHING;
app.changeGrepPreferences = NothingEnum.NOTHING;
app.findGrepPreferences.findWhat = "positive|diameter";
app.changeGrepPreferences.appliedCharacterStyle=app.documents[0].characterStyles.itemByName("non_break");
app.documents[0].changeGrep();

だと、
appliedCharacterStyleの値が無効。予想される値はString, CharacterStyle or NothingEnum enumerator ですが、値 nothingを受け取りました。
となります。
何がおかしいのでしょうか?
よろしくお願いします。
下の方のコードで合っています。私の方では問題なく動きます。

エラーは、文字スタイル「non_break」がないと言っているので、文字スタイル名とコード中のスタイル名が一致しているか確認してください。
[9616]Re: 全頁の特定の文字に文字スタイルをつけたい 投稿者:tomtom 投稿日:2019/05/03 07:03:44
原因がわかりました。
文字スタイル「non_break」がフォルダ内に収められていました。
移動しましたら動きました。
いろいろありがとうございました。
指南書読んで勉強したいと思います。
話の流れから、安易な策を出すようにも取られそうでアレですが、
スクリプトのバージョン指定をしてやることで大昔の物でもそこそこ動いたりしますので参考までに。

var orgVer = app.scriptPreferences.version; //元のバージョン
app.scriptPreferences.version = "4"; //CS2

//ここでどっかから拾ってきた超古いスクリプトを実行

app.scriptPreferences.version = orgVer; //バージョンを戻す

バージョン変更のやりっ放しは非常に危険なので、必ず処理後に戻すことが肝要です。
また、処理の途中でエラーで頓挫した場合、別途バージョンを戻すだけのスクリプトを実行するかInDesignを再起動する必要があります。

あくまで参考まで。
この記事の書き込み元へのリンク (コメントや質問などはこちらへどうぞ)

このページをシェア