[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
(DTPtechNote:1231) [AS Indesign CS2] Table Replace
勉強部屋で指摘されたんですけど、Table Replaceが Indesign CS2でちょっと調子わるかったです。
えっと、いつかまとめよう^^
(*
Table Replace (c)2003-2005 www.seuzo.jp
2003.6.5 YUJIさんの要請でちょっと書いてみた。
2005.10.11 Indesign CS2用
InDesignの表中の内容を差し替えます。
クリップボードのタブ区切りテキストを表の各セルにペーストします
●使い方
1)タブ(もしくは改行)区切りのテキストをクリップボードにコピーしておきます。
2)差し替えたい表のセルを選択しておきます。
3)このスクリプトを走らせます。
*)
tell application "Adobe InDesign CS2_J"
activate
--クリップボードの確認と取り込み
if (clipboard info for string) is not {} then --クリップボードのテキストが空でなかったら
set clip_str to (the clipboard) as Unicode text --変数にセットしちゃう
if clip_str ends with return then --選択範囲の最後が改行文字なら
set clip_str to text 1 thru -2 of clip_str --最後の改行文字だけを削除
end if
else
my my_error("クリップボードが空です", true) --クリップボードが空なら中止
end if
--リスト処理
set old_dlimit to AppleScript's text item delimiters --現在のデリミタを保存
try
set AppleScript's text item delimiters to {return} --デリミタを変更
set tmp_list to every text item of clip_str --デリミタでリストにへんかん
set AppleScript's text item delimiters to {tab} --デリミタを変更
set cell_list to {}
repeat with i in tmp_list
set contents of i to my my_replace(contents of i, "【改行】", return) --【改行】という文字列を「改行文字」に変換
set cell_list to cell_list & (every text item of contents of i) --デリミタでリストにへんかん
end repeat
on error errMsg number errNum
set AppleScript's text item delimiters to old_dlimit --デリミタをリストア
my my_error(errMsg & return & errNum, true) --エラーが起こったら中止
end try
set AppleScript's text item delimiters to old_dlimit --デリミタをリストア
--確認
if (not (exists selection)) or ¬
class of selection is not cell and ¬
class of selection is not table and ¬
class of selection is not row and ¬
class of selection is not column then
my my_error("セルを選択してください", true) --セル以外を選択しているなら中止
end if
set count_cell_list to length of cell_list --クリップボードのセルの数
set count_table to count cell of selection --テーブルの選択セル
if count_cell_list is not count_table then --セル数とタブ区切りテキストの数が違うなら
if count_table > count_cell_list then --セルの数の方が多い
my my_error("選択しているセルの方が" & (count_table - count_cell_list) & "個多いです。" & return & "それでも処理を続けますか?", false)
else
my my_error("選択しているセルの方が" & (count_cell_list - count_table) & "個少ないです。" & return & "それでも処理を続けますか?", false)
end if
end if
--実行
try
set contents of selection to cell_list
on error errMsg number errNum
my my_error(errMsg & return & errNum, true) --エラーが起こったら中止
end try
end tell
----------------------------------●文字列置換
to my_replace(theText, orgStr, newStr)
set oldDelim to AppleScript's text item delimiters
set AppleScript's text item delimiters to orgStr
set tmpList to every text item of theText
set AppleScript's text item delimiters to newStr
set tmpStr to tmpList as text
set AppleScript's text item delimiters to oldDelim
return tmpStr
end my_replace
----------------------------------●エラー処理
on my_error(err_str, my_stop)
if my_stop then
set my_stop to {"中止"}
else
set my_stop to {"中止", "続行"}
end if
tell application "Adobe InDesign CS2_J"
activate
set ans to button returned of (display dialog err_str buttons my_stop) --警告ダイアログ出してストップ
if ans is "中止" then error number -128
end tell
end my_error