【入門編】【上級者向け】段落の「書式設定」をJSON形式でシリアライズし、外部システムやWeb APIと連携する仕組み – Word VBA解析バイブル

スポンサーリンク

Word VBAを「APIの言語」で操る。段落書式をJSON化して世界を繋ぐ極限の技術

こんにちは。自動化の現場で血肉を削ってきた皆さんに、今日は少しだけ「一段上の景色」をお見せしましょう。

多くの人がWord VBAを「マクロの記録」で終わらせてしまいます。しかし、真のエンジニアにとって、Wordのドキュメントは単なる文書ではなく、「構造化されたデータの塊」です。

今日は、Wordの段落(Paragraph)の書式をJSON形式でシリアライズ(抽出・変換)し、外部システムやWeb APIと連携するための「データ変換エンジン」の設計思想を伝授します。

なぜ「Wordの書式」をJSONにするのか?

Wordの書式設定は、内部的に巨大で複雑なオブジェクトツリーを持っています。これをそのまま外部のWebシステムに持っていこうとしても、XMLやHTMLの断片では限界があります。

JSON化する最大のメリットは「再現性の分離」です。

  • Wordに依存しない設定値(フォントサイズ、行間、インデントなど)を保持できる。
  • 外部システム(ReactやVueなどのWebアプリ)で、同じ書式設定をプレビューできる。
  • チーム間での「デザイン規定」をJSONファイルで管理し、Wordで即座に適用(デシリアライズ)できる。

これができれば、あなたは「Word職人」から「ドキュメントエンジニア」へと進化します。

1. 概念図:WordからJSONへの変換パイプライン

[Word Paragraph Object]

[VBA Property Mapper] (ここが核心!)

[JSON String]

[External System / API]

このパイプラインを構築するには、Wordの `Paragraph.Format` オブジェクトを泥臭く読み解く必要があります。

2. 実装:段落書式をJSONへ抽出するエンジン

まずは、現在の段落の書式をJSON文字列に変換するVBAコードです。`ScriptControl`を使う方法もありますが、今回は汎用性を重視してシンプルな文字列構築を行います。

‘ 【重要】参照設定不要。軽量・高速なJSON生成器
Public Function ParagraphToJson(para As Paragraph) As String
Dim fmt As ParagraphFormat
Set fmt = para.Format

Dim json As String
json = “{”
json = json & “””lineSpacing””: ” & fmt.LineSpacing & “,”
json = json & “””leftIndent””: ” & fmt.LeftIndent & “,”
json = json & “””alignment””: ” & fmt.Alignment & “,”
json = json & “””spaceBefore””: ” & fmt.SpaceBefore
json = json & “}”

ParagraphToJson = json
End Function

‘ 実行用プロシージャ
Sub ExportParagraphFormat()
Dim currentPara As Paragraph
Set currentPara = Selection.Paragraphs(1)

Debug.Print ParagraphToJson(currentPara)
MsgBox “JSONデータをイミディエイトウィンドウに出力しました。”
End Sub

コードの解説

  • `Paragraph.Format` オブジェクト: ここには段落の全ての「呼吸」が詰まっています。`SpaceBefore`(前後の間隔)や `LineSpacing` は、Wordの内部単位(ポイント)で返されます。
  • なぜシンプルに書くのか: VBAで複雑なJSONライブラリを入れると、配布先でライブラリのパスエラーが多発します。本番環境では、外部依存を極限まで減らすのが「伝説のエンジニア」の流儀です。

3. 陥りやすい罠:ここをクリアすれば一人前!

初心者が必ずハマるポイントを伝授します。

① 「単位」の幻想

WordのVBAが返す数値は、基本的に「ポイント(pt)」です。しかし、UI上の設定では「mm」や「cm」で見えるため、外部システムと連携する際は「ポイントからミリメートルへの換算係数(1pt ≒ 0.3527mm)」を定数として持っておく必要があります。

② プロパティの「未定義」値

`fmt.LineSpacing` が `wdUndefined` を返すことがあります。これは「選択範囲内に複数の書式が混在している」ことを意味します。ここをスルーするとJSONが壊れるため、必ず `If` 文でチェックする癖をつけましょう。

4. 次のステップ:JSONを「適用」する

抽出(シリアライズ)ができれば、次は「適用(デシリアライズ)」です。JSONをパースして `Paragraph.Format` に値を代入すれば、外部で作ったデザインをWordに即座に反映できます。

‘ 擬似コード:JSONから書式を適用するイメージ
Sub ApplyFormatFromJson(para As Paragraph, json As String)
‘ 実際にはここでJSONパース処理を行う(正規表現や簡易分割)
‘ para.Format.LeftIndent = parsedValue(“leftIndent”)
‘ para.Format.Alignment = parsedValue(“alignment”)

‘ プロパティへの代入は、適用後に必ず画面を更新する意識を
para.Format.SpaceBefore = 12
End Sub

まとめ:あなたはもう「マクロの記録」に頼らない

Word VBAを単なる「自動入力ツール」として使うのはもう卒業です。
データをJSONという共通言語に変換し、WordとWebの世界を橋渡しする。この技術を身につければ、あなたの作るドキュメントシステムは、企業の基幹システムの一部として機能するようになります。

まずは今回のコードをコピペして、自分のWordでJSONが吐き出される快感を確認してください。そこから先は、あなたの創造力次第です。

「ここをクリアすれば、Word VBAの基本はバッチリですよ」。
また何かあれば、いつでも聞きに来てくださいね。応援しています。

タイトルとURLをコピーしました