title1
navigation bar3



[ 1 | 2 | 3-p1 | 3-p2 | 3-p3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 ] [日経マック連載Index ]

 

《 使用しているフォントの名前を得る 》
辞書を見ると、fontという属性があるようですから、これをいじってみたいと思います

 tell application "EGWORD6.0" to get font of document "ミッキー"

これでフォントが取ってこれるはずですね。あれっ、動きません。

先生
documentの属性にfontがあったかな。

あっ、ない。
character、word、paragraphとかでないとfontっていう属性がないんですね。ではparagraphを指定してみます。

 tell application "EGWORD6.0"
     to get font of paragraph 1 of document "ミッキー"

ほら見て下さい。"Osaka"っていうフォント名が返って来ました。

先生
一応動くことは動くようだがね。でもおかしいと思わないかい。この段落のフォントは全部Osakaだったかなぁ。
あっ、そうですね 。
最初の「ハーイ」と「ミッキー・マウス」はOsakaですが、ほかは細明朝体です。ということは、先生?
先生
paragraphとかwordを指定すると、その先頭の文字の属性を持って来てしまうんだ。
単語ごとにフォントを知りたければ、こんな風にすればいいよ。

 tell application "EGWORD6.0" to get font of
   character 1 of every word of line 1 of document "ミッキー"

これで、それぞれの単語のフォントがリストになって返ってくる。
every wordではなくてevery characterにすれば、1文字ずつのフォント情報も分かる。
そうそう、getで得た結果は「result」という名前の変数に入るのを忘れずにね。

TOP


《 文字数を数える 》
ほかに文書情報を得る方法はどんなものがあるんでしょうか?
先生
例えば,countなんていう命令がある。

 tell application "EGWORD6.0"
   to count characters of paragraph 2 of document "ミッキー"


というスクリプトを動かすと,今開かれている「ミッキー」という書類の2つ目の段落の文字数を返してくるよ。



《 フォントを変更する 》
フォントを変える場合は単にsetすればよいのでしょうか。

 tell application "EGWORD6.0" to set font
    of paragraph 5 of document "ミッキー" to "HG行書体"

先生
ちゃんと動くようじゃないか。

ついでに文字サイズを変更してみます。

 tell application "EGWORD6.0"
     to set size of word 1 of document "ミッキー" to 72

先生、できました。これでだいぶ感じがつかめたような気がします。

TOP


《 文字を切り貼りする 》
先生
次は、set以外の「命令(command)」を使って、文字をコピーしたり移動させたりしてみよう。
どんな命令があるか分かるかい?
コピーと言うと「copy」ですか。
先生
うん、copyもそうなんだが、ほかにもduplicateとかmoveだとか、似たようなコマンドがいくつかあるんだね。
とりあえずはcopyでやらせてください。2つ目の段落の最初の単語を,文章の最後にコピーしてみます。

 tell application "EGWORD6.0" to copy word 1
     of paragraph 2 of document "ミッキー" to paragraph 4

ガァーン!先生、paragraph 4にはsetできないって言ってますけど。

先生
それはね、君がコピーしようとした場所にすでに別のオブジェクトが存在するからなんだな。コピーする時には空白の場所を指定してやる必要がある。つまり、このスクリプトでいえば,最後の段落の「後」っていうことになるね。
そうしますと、「paragraph 4の後」っていうことですから、えっ、一体どうすればいいんですか?
先生
君が普段英語を書くようにやってみれば。
すると「after」なんていう前置詞が使えるんだ! これでどうだっ。

 tell application "EGWORD6.0" to copy word 1
   of paragraph 2 of document "ミッキー" to after paragraph 4

あれっ、やっぱり似たようなメッセージが出てしまいました。

先生
そうだろう。君の書いたスクリプトは正しく動く場合もあるんだが、厳密な意味では正しくはないんだから。
えっ、どういう意味ですか?
先生
オブジェクトを指定する「参照」は、そのオブジェクトまでの道順を正確に記述するのが原則なんだ。
アプリケーションによってはその辺を多少補ってくれるものもあるんだが、全部がそうではない。
ではどこが悪いんでしょう。
文書はちゃんと指定しているし、4つ目の段落の後に持って行くように書いたつもりなんですけれど…。
先生
ハッハッハ、ここではね、くどいように見えるんだがコピー先の位置にもちゃんと文書名を指定する必要があるんだ。
それと、今は段落が4つあるのが分かっているからいいけれど、数が分からないことがあるよね。
そんな時は、さっきのafterじゃないが、lastなんていう形容詞も使えるんだ。
あっそうかぁ、すると

 tell application "EGWORD6.0"
   to copy word 1 of paragraph 2 of document "ミッキー"
       to after last paragraph of document "ミッキー"

で、いいんですよね。あっできた。ちゃんと動きましたよ、先生っ!

先生
よくやったね。かなりコツが分かって来たでしょう。アプリケーションによって持っている命令やクラスに違いはあるが、辞書を見て見当をつければ、初めてのアプリケーションでも何とかなるものなんだ。ただ、ついでに言っておくんだが、同じワープロ・ソフトでもWordPerfectの場合には、copyを使う時にコピー元の文書を指定しておけば、後はその文書での操作が続く限り、いちいち再指定しなくても動くよ。
へぇー、ソフトによって曖昧なんですねぇ。そんなものなんですか。
先生
要するに「やってみるしかない」ってのが本音だな。初めて見るアプリケーションでは、属性や要素をgetしたりsetしたり、あるいはコマンドを実行してみて、「ほう、このソフトではこうスクリプトを書くのか」ってやっと見当がつくのが現実だ。
ってことは、今日勉強したことはすごく大事なんですね。


TOP

AppleScript救急隊事務局(ASQs) info-asqs@fsight.co.jp

主催 株式会社フォーサイト   後援 アップルコンピュータ株式会社

(c)1996-2010 The ForeSight Inc. All rights reserved.Appleは、米国アップルコンピュータ社の登録商標です。
AppleScriptは、米国アップルコンピュータ社の商標です。
その他記載の会社名・製品名・ソフトウェア名は一般にその会社の登録商標または商標です。