ラベル word の投稿を表示しています。 すべての投稿を表示
ラベル word の投稿を表示しています。 すべての投稿を表示

2010年4月10日土曜日

Word文書のチェックツール2: 指定以外のフォントが使われている場所を見つける

以前「Word文書のチェックツールを作ってみました→障害だらけ。。。」という記事でWord文書の中で指定されたフォント以外を使っている箇所を自動的に探すことをツールで自動化してみる試みについて書きました。

その中で、Range.MoveにWdUnits.CharacterFormattingを渡したときの挙動が不審だと言いましたが、やっと理解することができました。これは文字スタイルが変更されている箇所まで移動なんですね。そう言われると当たり前な気がしますが、ポイントは段落が変わっても、文字スタイルが「段落フォント」である限り、そこでは止まらないということです。

例えば、2つの段落に「見出し1」「本文」という段落スタイルが適用されていて、見出し1のフォント設定が「創英角ゴシックUB」、本文のフォント設定が「MS Pゴシック」だとしても、その間はCharacterFormattingは同じであると判断されます。うーん。便利なような不便なような。。。いや不便ですね :s

私の中でのイメージでは、段落スタイルと文字スタイルは親子関係にあって、1段落の中に複数の文字スタイルがあり、段落が切れると文字スタイルも一旦切れるものだと思っていました。

でも実際は違うんですね。段落スタイルと文字スタイルは完全に別物なんですね。文字スタイルと段落スタイルの片方だけ追っていても、フォントの変更は検出できないんですね。なんてことだ。。。:(

あと、このフォント一覧検出プロジェクト(!?)で試行錯誤してて思いましたが、マクロでの検索(Find)や移動(Move)って驚くほど遅いですね。びっくりします。

ただ文書を走査するだけなら、XML(WordML)に書き出してからDOM使った方が早いに決まっているんですけどね。それだと文書上の何ページの何行何列か分からないので、こんな手法を取らざるを得ないのです。

痛し痒し。。。

2009年5月30日土曜日

Word2007からBloggerに投稿するテスト

Wordの「新規作成」に「新しいブログの投稿」というメニューがありましたので、試しに投稿してみます。XHTMLっぽく投稿できるのでしょうか。

一部だけ太字にしてみるテスト。これがstrongタグになればOK。

リストを作ってみるテスト

  • リスト項目1
  • リスト項目2

うーん。まずなぜか記事全体をspanで囲っているのがいけてないですね。いきなりXHTML違反です。

でもpタグやstrongタグはちゃんとできているみたい。リストもOK。

Wordには組み込みスタイルとして「HTML アドレス」や「HTML 定義」と言った「HTML~」というスタイルがあります。もしかしたらこれを指定された文字列は自動的に<address>や<dfn>に変換されるのでは!? と期待したら残念、普通に<span style="~">であしらわれてしまいます。

結論: 使えない。

残念です。

2009年4月6日月曜日

Word文書のチェックツールを作ってみました→障害だらけ。。。

仕事で作成しているWordの文書は日本語は「MS Pゴシック」英数字は「Arial」じゃなきゃダメという書式(フォント)の決まりがあります。そのため、提出前にちゃんと指定されているフォントで書かれているか、ディスプレイをにらみながらチェックします。文字にアンチエイリアシング(or Clear Type)を使っていればパッと見てわかるんですが、そうでない人(何でそうしない??)は、300%ぐらいに拡大してにらみつけています。

まーこんなのちゃんとWordのスタイル機能使って作成していれば、チェックするまでもないんですが、たまにどこぞからコピーしてきた個所があると、コピー元のダメダメな書式が反映されてしまい、検閲に引っ掛かります。

さて、こんな作業に労力も掛けていられないので自動化してしまおうと企みました。VBAでちょちょいとできそうなので。私の場合はVBAではなくC# + COMですが。

要は文書内の「文字スタイル」を頭から走査して、そのフォントを確認すればいいわけです。何の複雑さもないですよねー :)

Word文書の操作を学ぶ

ヘルプを見ると、Word文書(Documentオブジェクト)に対する操作の多くは、操作範囲を表すRangeオブジェクトに対して行うと書いてあります。Excelと同じですね。また、そのRangeを移動するためのNextメソッドというのがあることも分かりました(他にも移動する手立てはたくさんあります)。これはExcelにはないWord独自のものですね。Nextメソッドの引数には、どういう単位で移動するかを表すWdUnits型の引数があります。例えば行単位ならWdUnits.wdRow、段落単位ならWdUnits.wdParagraphといった具合です。具体的なコードは以下の通り。

object wdUnit = WdUnits.wdParagraph;
object value = 1;
while ((range = range.Next(ref wdUnit, ref value)) != null)
{
  ErrorList.Items.Add(range.Text);
}

さらにヘルプを見ると(実際にはVisual StudioのInteliSenseが教えてくれたんですが)、WdUnits.wdCharacterFormattingという値があるじゃないですか。これが文字書式単位で移動するというパラメータのようです。もうこれで8割ぐらいできたも同然です :)

8割できたはずが、大きな壁

ところがどうにもうまく動きません!:o 上記のソースでいえば、range.Textで取ってきた値の一覧を見ると、文字書式毎の一覧になりません。というか、そもそも欠落だらけで、何単位で取ってきたのかもよく分かりません! wdCharacterFormattingがうまく動かない(=バグ)なのかと思い、試しにwdRowを指定してみると、実行時に「引数が違います」と怒られてしまいます。もうわけが分からない!!

WordのVBAに関する情報は少なく、この状況を打開できる術がありません。。純正ヘルプとMSDN以外では、日本語の情報はほとんどありません。

困った困った。。。

2009年3月8日日曜日

意味を主にしたデザインが必要な理由

昨日「意味を主にしたデザイン」について書きました。

今日は意味を主にしたデザインがなぜ必要なのかをもう少し詳しく説明(釈明)したいと思います。

装飾内容を統一、再定義するのに便利

以下はMicrosoft Office Word 2007で作られた文書です。見出し、本文で構成されていて、本文内には赤字や取り消し線の付いた青字の装飾がされた文字列があります。段落、文字列に対する装飾の設定は、全て「スタイル」機能を使っています。 太字で大きく書いてあるのは見出しだとすぐ分かりますね。取り消し線の付いた青字も何となく削除する文字列だと分かります。では赤字は何でしょうか。ぱっと見は分からないと思います。そこで文章の中身を見ると、何となく「修正結果」を表しているのではないか、と判断できます。

この文書に対して「修正個所は赤ではなく緑にしたい」とか「削除する文字列は表示しないようにしたい」とか、また「見出しの字をもう少し小さくしたい」とかの要望がある場合、もしスタイル機能を使っていなかったら、全ての設定を手で行う必要があります。また、もし「印刷用に修正箇所をいったん黒に戻して」なんて要求を受けた日にはどこが修正箇所か管理できなくなってしまいます。

段落、文字列に対する意味付けとしてスタイル機能を使っておけば、色の変更は一発でできますし、非表示も「隠し文字」に設定すればOKです。印刷用に一旦文字色を黒に統一するのなんてお茶の子さいさいです。

将来的にはGoogle Map、Amazon、Wikipediaと連携

他にもこんな使い方が想定できます。下は大塚愛さんのアルバム「Love Letter」に関するエントリです。このエントリ中で「Love Letter」という文字列に対して、Amazonへのリンクを貼っています。これは手動で貼ったものですが、将来的にはこの文字列に「CD」という意味を持たせておけば、Bloggerが勝手にAmazonへのリンクを貼るようになるかもしれません。ひょっとしたらブラウザ側で閲覧者が指定したCDショップへリンクする機能を実装するかもしれません。ジャケットの表示も自動でできるようになってほしいです。

同様に、住所やお店の名前はGoogle Mapやぐるなびへ、人名はWikipediaへ、といった具合に、いちいち参照先を指定せずとも、サーバなりブラウザなりが自動で適切なナビゲーションを行うことができるようになるかもしれません。そうなれば、文書構造は破壊されませんので、文書の見通しが良くなるだけでなく、書き手の負担も減ります。Amazon嫌いの人が勝手に意図せずAmazonに飛ばされることもなくなるかもしれません。

全てはセマンティックウェブのために

要はさっさとセマンティックウェブの考え方が浸透してくれればいいのですが、なかなかこういう考え方は広まりませんね。なおこのブログは全て手動でタグ打ちしているため、何から何まで非常にめんどうでなりません。早く意味を主にしたデザインのアプリケーションができることを祈っています。

2009年3月7日土曜日

HTMLは構造を表現する言語。意味はclassで指定すべき

マイコミジャーナルに、あまり使われていないHTMLタグについての記事がありました。

確かにあまり使われていませんね。私はせっかくあるんだからと積極的に使うようにしていますが、使おうとすると逆に使い方を調べるのに苦労するぐらい使われていません。

しかし、そもそもHTMLのタグだけで意味を表現しようとすること自体が間違っている気がします。HTMLは文章の構造を定義する言語なのですから、文章内で意味を持たせたい場合は、以下のようにタグのclassで意味を指定すればいいのではないでしょうか。

<span class="field string">名前</span>: <input>...

classで指定するようにすれば、自分の好きなようにいくらでも拡張可能ですから、いちいち「入力欄の説明に使うタグは何だっけ?」と迷うこともなくなります。また、HTML自体の構造もシンプルになります。こうすればlabelとかlegendとかは使わなくてもよくなります。

HTML5では文章構造を表すsectionやヘッダ、フッタを表すheader, footerなどがどかどかっと追加される予定みたいですが、ちゃんと使われるんでしょうかね。ブロック要素div、インライン要素span、表組みtable、リスト構造ul(もしくはol)さえあれば、何でも表現できますよ。きっと。

1つ実例を挙げたいと思います。以下をご覧ください。

上記はMicrosoft Wordで「新しいスタイル」を作るときの画面です。これを見ると「種類」には段落、文字、リンク、表、リストしかありません。Microsoftは、これだけあれば文章の構造化は可能である、と判断しているということです。

またWordには「スタイル」という、上述した「構造」に対する「装飾」を定義するための機能があります。HTMLとCSSみたいなものです。とてもシンプルです(複雑なのは使い方だけです :p )。Microsoftの製品を引き合いに出すと、何か悪い例を示しているような錯覚を感じる方もいるかもしれませんが、このデザイン、操作性が世のデファクトですから、仮に正しないとしても、間違ってはいないはずです。

もちろん、グラフの描画や複雑なレイアウトを構造化するのであれば、上述の構造だけでは足りないですが、一般にはそれだけで9割程度の要求を満たせると思います。シンプルに行きましょうよ。

2009年3月1日日曜日

意味を主にしたデザインの提案

Microsoft Office 2007のWordには上記のようなツールバーがあります。Wordに限らず、多くのアプリケーションで文章の書式を設定するときには、このようなツールバーを使いますよね。Bloggerの投稿フォームにも同じようなツールバーがあります。こういうデザインをWYSIWYG(What You See Is What You Get)って呼んだりします。見たままの効果を文章に反映できる、とても優れたデザインです。これらのツールバーには、お決まりのように「太字」「斜体」「フォントの色」「フォントのサイズ」「左寄せ」「中央揃え」などのボタンがあります。ある意味、文章の編集にはこのツールバーデザインがデファクトとなっているため、もはや誰もこれを不便だとは思わないと思います。

しかし私はあえてこのデザインに異論を唱えてみます。そもそも文章内の文字列を太字にしたり色を変えたりするのは、その文字列が大事な内容であったり、逆に婉曲したい内容であることを読者に示したいからです。人は文字列を装飾することで意味を持たせようとしているのですね。

であれば、装飾の変更単位も「太字」や「色の変更」ではなく、最初から「強調」や「婉曲」などの「意味を主にしたデザイン」にしてみてはどうでしょう。つまり意味とそれを表す装飾の分離をするということです。HTMLとCSSみたいなものですね(HTMLは意味ではなく構造を表す言語なので、ちょっと違いますが)。

具体的にこんなデザインにしてみてはいかがでしょうか。

ツールバーのボタンには、装飾ではなく、意味を示すアイコンを並べてみました。使い方はWYSIWYGツールバーと同じです。文字列、あるいは段落を選択してクリックするだけ。「強調」ボタンを押せば、文字列に「強調する内容である」という意味を付けられます。「強調」という意味を付けられた文字列がどのように装飾されるか(太字になるのか赤字になるのかなど)は、どこか別で定義をするようにします。例えば右にあるWordの「スタイル」ウィンドウのようなUIで。(Wordのスタイル機能も「スタイル名=意味」と思えば「意味を主にしたデザイン」を実現できているんですね。あまり使われていませんが。)

このデザインの利点は、同じような文書をいくつも書く場合(設計書、マニュアル、ニュース記事、真面目系(?)のブログ等)、同じデザインを複数の文書に適用できます。一方難点は、ツールバーのボタンを押しても何が起こるか想像できないということです。分かりやすさはWYSIWYGには遠く及びません。

ここまで書いてて思いましたが、HTML+CSSなら大体実現できるんですね :) Blogの投稿もHTMLでするんですから、もっと意味を主にしたデザインでできるようにしてくださいよ。(HTMLタグ直打ちは結構厳しいです。。。)