InDesign 表のセル内容が負数の場合は赤文字にする AppleScript
2-5 01 表のセル内容が負数の場合は赤文字にする(P.127)
- 作者: (株)シータス,古籏一浩
- 出版社/メーカー: 技術評論社
- 発売日: 2008/11/25
- メディア: 大型本
- 購入: 5人 クリック: 91回
- この商品を含むブログ (8件) を見る
=== 書籍の JavaScript を AppleScript で書き直します ===
部品作製
- InDesign ドキュメント
- AppleScript ハンドラ(色に関するもの)
-- プロセスカラーを追加する on addProcessColor(myName, myCMYK) set cNames to colorNames() if myName is not in cNames then tell document 1 of application "Adobe InDesign CS6" make new color with properties {name:myName, model:process, space:CMYK, color value:myCMYK} end tell else activate display dialog "Color:[" & myName & "]は既に存在します。" & return & "(追加できません)" end if end addProcessColor -- 全ての色名を返す on colorNames() tell document 1 of application "Adobe InDesign CS6" name of every color end tell end colorNames -- 指定された名前のカラーオブジェクトを返す -- 見つからなければ color 1 を返す on getColor(cName) tell document 1 of application "Adobe InDesign CS6" try color cName on error color 1 end try end tell end getColor
- AppleScript ハンドラ等(表に関するもの)
表を扱う専用のAppleScriptライブラリを用意するのが望ましいが、今回はベタに書く。
-- オブジェクト内の全ての表を返す on tableList(myObj) tell document 1 of application "Adobe InDesign CS6" every table of myObj end tell end tableList -- 表内の全てのセルを調査する on tableWalk(myTable) set myColor to getColor("KINAKA") set {cMax, rMax} to tableSize(myTable) repeat with rIdx from 1 to rMax repeat with cIdx from 1 to cMax set myCell to tCell(myTable, cIdx, rIdx) minus2red(myCell, myColor) end repeat end repeat end tableWalk -- 表の大きさを返す(横,縦のセル数) on tableSize(myTable) tell application "Adobe InDesign CS6" {number of columns, number of rows} of myTable end tell end tableSize -- [cIdx]番目の項目の[rIdx]行目のセルオブジェクトを返す on tCell(myTable, cIdx, rIdx) tell application "Adobe InDesign CS6" cell cIdx of row rIdx of myTable end tell end tCell -- セルの1文字目が「-」なら、文字色を変更する on minus2red(myCell, myColor) tell application "Adobe InDesign CS6" if contents of first character of myCell is "-" then set fill color of every character of myCell to myColor end if end tell end minus2red
- テーブル・セルオブジェクトの叩き方あれこれ
-- 指定したテキストフレーム内の全てのテーブルオブジェクトを取得する tell document 1 of application "Adobe InDesign CS6" set myTF to text frame 1 of page 1 end tell set tableList to tableList(myTF) tell application "Adobe InDesign CS6" -- table 1 tell item 1 of tableList set t1cNum to number of column -- 表の項目数 set t1rNum to number of rows -- 表の行数 cell 2 of row 2 -- 2行目の2項目目のセルオブジェクト set t1cVal to contents of cell 2 of row 2 -- 2行目の2項目目のセルオブジェクトの内容 end tell -- table 2 のセル(2項目目の3行目) set myCell to tCell(item 2 of tableList, 2, 3) of me tell myCell set cVal to contents of first character --セルの最初の文字 set cLen to number of every character of contents --セル内の文字数 fill color of character 1 --セルの最初の文字色 set cColor to name of fill color of character 1 --セルの最初の文字色の名前 end tell end tell log "--------------- TABLE 1 ---------------" log "T1-表の項目数: " & t1cNum log "T1-表の 行数: " & t1rNum log "T1-C2R2: " & t1cVal log "--------------- TABLE 2 CELL(2,3) ---------------" log "T2-C2R3-char 1: " & cVal log "T2-C2R3-length: " & cLen log "T2-C2R3-color: " & cColor
部品が揃ったので、実行
on run {} my setUp() my main() my tearDown() end run on setUp() tell document 1 of application "Adobe InDesign CS6" select every text frame of page 1 end tell end setUp on main() -- 色を追加 addProcessColor("KINAKA", {0, 100, 100, 0}) -- 指定したテキストフレーム内の全てのテーブルオブジェクトを取得する tell document 1 of application "Adobe InDesign CS6" set myTF to text frame 1 of page 1 end tell set tableList to tableList(myTF) -- テーブル数分繰り返す set loop to number of tableList tell application "Adobe InDesign CS6" repeat with i from 1 to loop tableWalk(item i of tableList) of me end repeat end tell end main on tearDown() activate display dialog "Script 終了" giving up after 3 end tearDown
実行結果
- OS X 10.8.5
- Adobe InDesign CS6, version: 8.0.2.413
InDesign 段落の先頭の文字が「■」ならスタイルを適用 AppleScript
2-4 04 選択された段落の先頭の文字が「■」ならスタイルを適用する(P.124)
- 作者: (株)シータス,古籏一浩
- 出版社/メーカー: 技術評論社
- 発売日: 2008/11/25
- メディア: 大型本
- 購入: 5人 クリック: 91回
- この商品を含むブログ (8件) を見る
=== 書籍の JavaScript を AppleScript で書き直しています ===
部品作製
- InDesign ドキュメント
- InDesign 段落スタイル
- AppleScript ハンドラ
-- 各段落の先頭が「■」なら段落スタイルを適用 to applyParagraphStyle(myObj, checkMark) tell application "Adobe InDesign CS6" -- 段落スタイルを変数に保存 set pStyle to paragraph style "段落見出し" of document 1 tell myObj -- 行数分繰り返す set loop to number of every paragraph repeat with i from 1 to loop -- 行頭文字 = ■? set myChar to first character of paragraph i if myChar is checkMark then -- << javascript >> .applyParagraphStyle(pStyle) apply paragraph style paragraph i using pStyle end if end repeat end tell end tell end applyParagraphStyle
段落スタイル、文字スタイル、swatchなどの情報はそれぞれのファイルで保持しているので、 … of document 1 という記述になります。(of document 1 を削除して実行するとエラーに落ちます)
部品が揃ったので、実行
on run {} my setUp() my main() my tearDown() end run on setUp() tell document 1 of application "Adobe InDesign CS6" select every text frame of page 1 end tell end setUp on main() set checkMark to "■" tell document 1 of application "Adobe InDesign CS6" set myList to selection -- 選択されたオブジェクトを変数に保存 set loop to number of every item of myList repeat with i from 1 to loop set myTF to item i of myList applyParagraphStyle(myTF, checkMark) of me end repeat end tell end main on tearDown() activate display dialog "Script 終了" giving up after 3 end tearDown
実行結果
- OS X 10.8.5
- Adobe InDesign CS6, version: 8.0.2.413
InDesign 文末の句点「。」を削除 AppleScript
2-4 04 選択されたテキストフレーム内の文章の最後が「。」なら削除する(P.123)
- 作者: (株)シータス,古籏一浩
- 出版社/メーカー: 技術評論社
- 発売日: 2008/11/25
- メディア: 大型本
- 購入: 5人 クリック: 91回
- この商品を含むブログ (8件) を見る
=== 書籍の JavaScript を AppleScript で書き直してみます ===
部品作製
- InDesign ドキュメント
- AppleScript ハンドラ
-- 各段落の先頭が全角スペース(複数)なら削除 to removeLastMark(myObj, cutChar) tell application "Adobe InDesign CS6" tell myObj -- 文末の文字を取得 set lastChar to last character of last paragraph if lastChar is cutChar then -- 文末の文字を空に set contents of last character of last paragraph to "" set myMsg to "文末の「。」を削除しました。" & return else set myMsg to "" end if select myObj if overflows is true then display dialog myMsg & "このテキストフレームはオーバーフローしています" else display dialog myMsg & "このテキストフレームはオーバーフローしていません" end if end tell end tell end removeLastMark -- 文字列の先頭の[myChar]の文字数を返す on getPrefixLength(myStr, myChar) log myStr set loop to number of myStr repeat with i from 1 to loop if character i of myStr is not myChar then return i - 1 end if end repeat return 0 end getPrefixLength
部品が揃ったので、実行
on run {} my setUp() my main() my tearDown() end run on setUp() tell document 1 of application "Adobe InDesign CS6" select every text frame of page 1 end tell end setUp on main() set cutChar to "。" tell document 1 of application "Adobe InDesign CS6" set myList to selection -- 選択されたオブジェクトを変数に保存 set loop to number of every item of myList repeat with i from 1 to loop set myTF to item i of myList removeLastMark(myTF, cutChar) of me end repeat end tell end main on tearDown() activate display dialog "Script 終了" giving up after 3 end tearDown
実行結果
- OS X 10.8.5
- Adobe InDesign CS6, version: 8.0.2.413
InDesign 段落先頭の全角スペース(複数)を削除 AppleScript
2-4 03 テキストフレーム内の段落の先頭の文字が全角空白(複数)なら削除する(P.122)
- 作者: (株)シータス,古籏一浩
- 出版社/メーカー: 技術評論社
- 発売日: 2008/11/25
- メディア: 大型本
- 購入: 5人 クリック: 91回
- この商品を含むブログ (8件) を見る
=== 書籍の JavaScript を AppleScript で書き直してみます ===
部品作製
- InDesign ドキュメント
- AppleScript ハンドラ
-- 各段落の先頭が全角スペース(複数)なら削除 to removeBeginningSpaces(myObj, cutChar) tell application "Adobe InDesign CS6" tell myObj set loop to number of paragraph repeat with i from 1 to loop tell paragraph i set endPos to getPrefixLength(contents, cutChar) of me log "endPos: " & endPos if endPos > 0 then set startPos to 1 set contents of (text from character startPos to character endPos) to "" end if end tell end repeat end tell end tell end removeBeginningSpaces -- 文字列の先頭の[myChar]の文字数を返す on getPrefixLength(myStr, myChar) log myStr set loop to number of myStr repeat with i from 1 to loop if character i of myStr is not myChar then return i - 1 end if end repeat return 0 end getPrefixLength
部品が揃ったので、まとめ
set cutChar to " " tell application "Adobe InDesign CS6" tell active document set myObj to text frame 1 end tell end tell removeBeginningSpaces(myObj, cutChar)
実行結果
- OS X 10.8.5
- Adobe InDesign CS6, version: 8.0.2.413
InDesign 選択された段落に番号を振る(桁数指定) AppleScript
2-4 02 選択された段落に指定した桁数の番号を振る(P.121)
- 作者: (株)シータス,古籏一浩
- 出版社/メーカー: 技術評論社
- 発売日: 2008/11/25
- メディア: 大型本
- 購入: 5人 クリック: 91回
- この商品を含むブログ (8件) を見る
=== 書籍の JavaScript を AppleScript で書き直してみます ===
部品作製
- InDesign ドキュメント
- AppleScript ハンドラ
-- 指定した桁数(0を左に追加)に整形した数(文字列)を返す on zeroPadding(myNum, pSize) set pStr to {} repeat pSize times set end of pStr to "0" end repeat set pStr to pStr as string set myNum to myNum as string set mySize to length of myNum if mySize ≥ pSize then -- 数値の桁数が多い場合はそのまま返す return myNum end if set fixStr to pStr & myNum set fixSize to length of fixStr characters (fixSize - pSize + 1) thru (fixSize) of fixStr as string end zeroPadding -- オブジェクト内の段落[pFrom]から[pTo]までを選択 -- pToが0の場合は、最終段落まで -- pToがマイナスの場合は、最終段落 - pTo段落まで to selectParagraph(myObj, pFrom, pTo) tell application "Adobe InDesign CS6" tell myObj if pTo = 0 then set pTo to number of paragraph if pTo < 0 then set pTo to (number of paragraph) + pTo select (text from paragraph pFrom to paragraph pTo) end tell end tell end selectParagraph -- 選択された段落に行番号を追加 to addParagraphNumbers2(mySep, pSize) tell application "Adobe InDesign CS6" set loop to number of paragraph of selection repeat with i from 1 to loop set myNumber to zeroPadding(i, pSize) of me set contents of insertion point 1 of paragraph i of selection to ("" & myNumber & mySep) end repeat end tell end addParagraphNumbers2
部品が揃ったので、まとめ
display dialog "桁数を入れてください" default answer "3" set pSize to text returned of result as number if pSize < 3 then set pSize to 3 set myPrefix to {} repeat pSize times set end of myPrefix to "0" end repeat set myPrefix to myPrefix as string tell application "Adobe InDesign CS6" tell active document set myObj to text frame 1 end tell end tell selectParagraph(myObj, 4, -1) addParagraphNumbers2(" : ", pSize)
実行結果
- OS X 10.8.5
- Adobe InDesign CS6, version: 8.0.2.413