misima RESTful Web Service - Microsoft Office 2007

先日,Microsoft Word 2003 用の misima 旧字・旧仮名遣い変換 RESTful Web Service クライアントについて記した。今日,会社のお昼休みに,Microsoft Office 2007 でもその VBA コードを試してみた。結果は Word 2007 でそのままで動作した。Excel 2007 についても,選択セルのテキスト変換をするということに関して,Word における選択テキストの指定 Selection.TextSelection.Value に変更するだけで正常に動作した。なお,サーバ側の実装については,弊サイト記事『JAX-RS - misima RESTful Web Service の実装』を参照。

Excel 用/Word 用 VBA マクロコード

改めて VBA コードを示しておく。これは Excel 用のコードであるが,ハイライト表示した部分のコメント部分は Word 向けである。要するに,Selection.ValueSelection.Text に変更すれば Word 用になる。

Sub misimaConvert()
 
    ' XMLHTTPオブジェクトを生成
    Dim xmlHttp As Object
    Set xmlHttp = CreateObject("MSXML2.XMLHTTP")
  
    ' Excel 選択セル(Selection.Value)から送信XMLデータを組み立てる
    ' Word 選択テキスト(Selection.Text)から送信XMLデータを組み立てる
    ' misima変換オプションは "-s c -kyti -q"
    ' = 旧字UCS(s)/旧かな(k)/用語用字(y)/単純補正(t)/繰返符号(i)の各変換
    ' ユーザ識別コードはnoxinsomniae201402(暫定)
    Dim misimaXml As String
    misimaXml = "<?xml version=""1.0"" encoding=""UTF-8""?>" & _
        "<misimaRESTful>" & _
        "<misimaParam>-s c -kyti -q</misimaParam>" & _
        "<misimaTarget>" & Selection.Value & "</misimaTarget>" & _' Excel
        ' "<misimaTarget>" & Selection.Text & "</misimaTarget>" & _' Word
        "<misimaUsercode>noxinsomniae201402</misimaUsercode>" & _
        "</misimaRESTful>"
   
    ' misima RESTful Web ServiceにXMLデータをPOST(同期POST)
    Dim URI As String
    URI = "http://yasuda.homeip.net:8080/misimaRest/misima/convert"
    xmlHttp.Open "POST", URI, False
    xmlHttp.setRequestHeader "Content-Type", "text/xml;charset=utf-8"
    xmlHttp.send (misimaXml)
   
    ' 通信ステータスを判定し,200(正常)ならresponseTextで選択テキストを置換
    Dim statusCode As String
    statusCode = xmlHttp.Status
    If statusCode <> 200 Then
        MsgBox "misima RESTful Web Service エラー: " & statusCode
    Else
        Selection.Value = xmlHttp.responseText ' Excel
        ' Selection.Text = xmlHttp.responseText ' Word
    End If
    Set xmlHttp = Nothing
   
End Sub

このコードは Excel についてひとつの選択セルの変換だけが可能である。複数のセルの場合は Selection.Value オブジェクトでは取り扱えない。Word についても,表などの複数のセルに股がったテキストに対しては Selection.Text オブジェクトはエラーとなる。

Excel の VBA マクロも Visual Basic Editor で Word と同じように作成する。ただし,Word のように共通テンプレートに保存することはできず,個別のマクロ許可 Book ファイルに格納することになる。Visual Basic Editor 画面を図 1. に,Microsoft Excel (我が家の 2003 なんだけど,2007 でも OK である) での変換前後をそれぞれ図 2. 及び図 3. に示す。

20140320-xlsmac-1.png
図 1. Excel Visual Basic Editor
20140320-xlsmac-2.png
図 2. Excel misima 変換マクロ実行前
20140320-xlsmac-3.png
図 3. Excel misima 変換マクロ実行後

プロキシ環境

私の会社のネットワーク環境はプロキシ経由で広域インターネットと接続されている。他の多くの企業も同様だろう。ファイアウォールで外から中を守ることにその主眼があるが,一方で業務に関わりのない Web サイトの閲覧をブロックする重要な役割がある。仕事中に社員がエロサイトや2ちゃんねるなんかを見てはまずいからな。心ない社員がへんなサイトをワンクリしたおかげでウィルスが蔓延した,なんてことになったら企業としては恥である。

プロキシ環境では社外サイトをブラウザで閲覧しようとすると,プロキシのユーザ認証が求められる。misima RESTful Web Service も HTTP トランスポートを使う以上,プロキシ経由でこれにアクセスすることになるわけである。Office VBA XMLHTTP オブジェクトを用いると,IE プロキシ設定に基づいて,IE と同様プロキシ認証ダイアログにしかるべく応答すれば,きちんと misima RESTful Web Service サーバに接続できる。

クイックアクセスツールバーへのマクロ登録

Office 2007 (2010, 2013 も同じだろう) では,Office 2003 までと比べ,ユーザインタフェースが大きく変わり,メニューバー,ツールバーが Microsoft の謂うところのリボン・インタフェースとなった。これのカスタマイズには Office Custom UI Editor Tool を用いて,XML ベースのコードを書かなくてはならなくなった。それまでは,「ユーザー設定」機能によって,メニューバー,ツールバー,コンテキスト・メニューなどに対し,好みの機能にアクセスしやすいようにするカスタマイズが比較的容易に出来るようになっていた。それに比べ,新 Office ではカスタマイズの敷居が高くなってしまったのではなかろうか。

それでも,頻繁に使う機能をクイックアクセスツールバーに登録するくらいは簡単にできる。標準ではタイトルバーの左側隅に表示されているアイコンである。上記マクロモジュール misimaConvert も,Visual Basice Editor 上で作成・格納してあれば,以下のようにしてクイックアクセスツールバーに登録できる。

  1. Microsoft Office ボタン - Word のオプション (または Excel のオプション) クリックでオプション画面を表示させる。クイックアクセスツールバー右端にある矢印をクリックして表示されるメニューから,その他のコマンド(M)... を選択することでもオプション画面を表示できる。
  2. 左側の コマンドの選択(C) プルダウンにある マクロ から misimaConvert を選択し,追加(A) ボタンをクリックし,OK をクリックする。misimaConvert 用に好みのアイコンを選択してもよい。

Microsoft Office サポートページにある記事『クイック アクセス ツールバーをカスタマイズする』も参照のこと。

これでクイックアクセスツールバーに misimaConvert マクロのアイコンが表示される。Word ならテキストを選択し,Excel ならセルを選択し,このアイコンをクリックすると旧字・旧仮名遣い変換が実行され,選択部分が置換される。

頻繁ニ使フ機能ヲくいっくあくせすつーるばーニ登錄スルクラヰハ簡單ニデキル。標準デハたいとるばーノ左側隅ニ表示サレテヰルあいこんデアル。

[ 2015/02/02 付記 ]
misima RESTful Web Service は 2014/12 より友人のためだけの限定公開といたしました。上記ユーザ認証コードでは動作しません。