[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
(DTPtechNote:1455) Re: [AS Indesign CS2] Table Replace 0.4
YUJI@勉強部屋さんからご指摘をいただいてちょっと書き直しました。
unicode非対応アプリでうまくペーストできないのを修正。
#実は前から気がついているんだけど、Indesign CS2のテキストをクリップボードにコピーしてるとき、ペーストに失敗する。おそらくいろんなスタイル情報が付加されすぎてるのと、Indesign CS2上のクリップボードと整合性がとれていないもよう。一度エディタなどに吐き出すと正常になるのだけど、、、これは次回の課題にしよう。osascriptでは逃げられなかった^^
(*
Table Replace 0.4 (c)2003-2006 www.seuzo.jp
2003.6.5 YUJIさんの要請でちょっと書いてみた。
2005.10.11 Indesign CS2用
2006.08.15 unicodeを持つ文字を正しくコピーするようにした。
2006.09.03 unicode非対応アプリケーションの不具合を修正
InDesignの表中の内容を差し替えます。
クリップボードのタブ区切りテキストを表の各セルにペーストします
●使い方
1)タブ(もしくは改行)区切りのテキストをクリップボードにコピーしておきます。
2)差し替えたい表のセルを選択しておきます。
3)このスクリプトを走らせます。
*)
--do shell script "/usr/bin/osascript -e 'clipboard info for string'" --おまじない
set tmp_uni to clipboard info for Unicode text
set tmp_str to clipboard info for string
--クリップボードの確認と取り込み
if tmp_uni is not {} or tmp_str is not {} then --クリップボードのテキストが空でなかったら
set clip_str to the clipboard as Unicode text --変数にセットしちゃう
if clip_str ends with return then --最後が改行だったら
set clip_str to Unicode 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 --デリミタをリストア
tell application "Adobe InDesign CS2_J"
activate
--確認
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 Unicode 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 with icon 0) --警告ダイアログ出してストップ
if ans is "中止" then error number -128
end tell
end my_error