[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

(DTPtechNote:1439) Re: [AS Indesign CS2] Table Replace



長屋さんという方からご指摘を受けて、Unicode文字を正しくコピーするようにしました。
ただし、吉野家の土吉などのバリアントはやはりうまくコピーできません。
とりあえず、こちらにあげてみます。テストしてみてください。

(*
Table Replace	(c)2003-2006 www.seuzo.jp
2003.6.5	YUJIさんの要請でちょっと書いてみた。
2005.10.11	Indesign CS2用
2006.08.15	unicodeを持つ文字を正しくコピーするようにした。

InDesignの表中の内容を差し替えます。
クリップボードのタブ区切りテキストを表の各セルにペーストします
●使い方
1)タブ(もしくは改行)区切りのテキストをクリップボードにコピーしておきます。
2)差し替えたい表のセルを選択しておきます。
3)このスクリプトを走らせます。
*)

tell application "Adobe InDesign CS2_J"
	activate
	
	--クリップボードの確認と取り込み
	if (clipboard info for Unicode text) is not {} then --クリップボードのテキストが空でなかったら
		set clip_str to the clipboard as Unicode text --as ヌclass ut16ネ --変数にセットしちゃう
		
		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 --デリミタをリストア
	
	--確認
	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) --警告ダイアログ出してストップ
		if ans is "中止" then error number -128
	end tell
end my_error