チュートリアル

簡単にライブラリーを使用するためのチュートリアルコレクション

チュートリアル»Python»Spire.Doc for Python»変換»Python コードを Word に変換(構文ハイライト対応)
2026-03-17

Python コードを Word に変換(構文ハイライト対応)

Python コードを Word ファイルに変換

開発者は、技術ドキュメント、チュートリアル、コードレビュー、社内レポート、またはクライアント向け資料のために、Word ドキュメント内に Python コードを含める必要がよくあります。小さなコードスニペットであれば手動のコピー&ペーストでも対応できますが、長いスクリプトや複数のファイルを扱う場合は、自動化された方法のほうが一貫性、フォーマット制御、拡張性の面で優れています。

このチュートリアルでは、Python を使用して Python コードを Word ドキュメントにエクスポートする複数の実用的な方法を紹介します。各方法にはそれぞれ利点があり、フォーマット、自動化、構文ハイライト、可読性など、どの要素を重視するかによって選択できます。

このページの内容

必要なライブラリのインストール

例を実行する前に、必要な依存関係をインストールします。

pip install spire.doc pygments

ライブラリ概要

  • Spire.Doc for Python — Word ドキュメントをプログラムで作成・操作するためのライブラリ。
  • Pygments — RTF、HTML、画像形式で構文ハイライト付きコードを生成するためのライブラリ。
  • Pathlib (標準ライブラリ)— ディスク上の Python ファイルを読み取るために使用。
  • textwrap (標準ライブラリ)— 画像生成前に長いコード行を折り返すために使用。

Pythonコードをプレーンテキストとして Word にエクスポート

プレーンテキストの挿入は、 Word にコードを埋め込む最もシンプルな方法です。インデントや改行などのフォーマットを保持しながら、コードを編集可能な状態で挿入できます。

方法1:Python コードを Word ドキュメントに直接挿入

この方法では .py ファイルを読み込み、等幅フォントを適用して Word に直接挿入します。

from pathlib import Path
from spire.doc import *

# Pythonファイルを読み込む
code_string = Path("demo.py").read_text(encoding="utf-8")

# Wordドキュメントを作成
doc = Document()

# セクションを追加
section = doc.AddSection()
section.PageSetup.Margins.All = 60

# 段落を追加
paragraph = section.AddParagraph()

# コード文字列を段落に挿入
paragraph.AppendText(code_string)

# 段落スタイルを作成
style = ParagraphStyle(doc)
style.Name = "code"
style.CharacterFormat.FontName = "Consolas"
style.CharacterFormat.FontSize = 12
style.ParagraphFormat.LineSpacing = 12
doc.Styles.Add(style)

# 段落にスタイルを適用
paragraph.ApplyStyle("code")

# ドキュメントを保存
doc.SaveToFile("Output.docx", FileFormat.Docx2019)
doc.Dispose()

仕組み

この方法では Python コードをプレーンテキストとして扱い、そのまま Word の段落に挿入します。スクリプトは .py ファイルを Path.read_text() で読み込み、インデント、空行、全体構造を保持します。

テキスト挿入後、カスタム段落スタイルを作成して適用します。Consolas のような等幅フォントを使用することで、コードの整列と可読性が向上します。また、固定の行間を設定することで、行ごとのフォーマットを安定させます。

中間フォーマットを使用しないため、この方法は最もシンプルで高速です。ただし、構文ハイライトやセマンティックスタイルは適用されず、 Word では単なるフォーマット済みテキストとして表示されます。

効果図:

Python コードを Word に挿入

あなたはこれも好きかもしれません:Python を使用して構造化された Word 文書を作成する方法

方法2:Markdown でラップしたコードから Word ファイルを生成

Markdown を既に使用しているワークフローでは、フェンス付きコードブロックを使用すると、スクリプトを Word ドキュメントへ構造的に変換できます。

from pathlib import Path
from spire.doc import *

# Pythonファイルを読み込む
code = Path("demo.py").read_text(encoding="utf-8")

# Markdown形式に変換
md_content = f"```python\n{code}\n```"
Path("temp.md").write_text(md_content, encoding="utf-8")

# MarkdownファイルをWordに読み込む
doc = Document()
doc.LoadFromFile("temp.md")

# ページ設定を更新
doc.Sections[0].PageSetup.Margins.All = 60

# DOCX形式で保存
doc.SaveToFile("Output.docx", FileFormat.Docx)
doc.Dispose()

仕組み

この方法ではテキストを直接挿入する代わりに、 Python コードを Markdown のコードブロック(```python)でラップします。その後、生成した Markdown ファイルを Spire.Doc の Markdown 解析機能を使用して Word に読み込みます。

Word が Markdown をインポートすると、インデントや改行などのコードフォーマットは自動的に保持されます。この方法は、 Markdown ベースのドキュメントや、見出し・リスト・説明文とコードを一緒に管理するワークフローに適しています。

ただし、Markdown 自体は Word 内で自動的に構文カラーリングを適用しないため、結果としてはプレーンコードのフォーマットになります。ただし、ドキュメントパイプラインの管理はより簡単になります。

効果図:

Markdown でラップされたコードを Word に変換

構文ハイライト付き Python コードを Word に追加

構文ハイライトを使用すると、コードの可読性と理解しやすさが向上します。Pygments を統合することで、 Python スクリプトを Word に埋め込む前にスタイル付きフォーマットへ変換できます。

このセクションでは、RTF、HTML、画像レンダリングの3つの方法を紹介します。それぞれフォーマット目的によって適した用途があります。

方法1:RTF を使用した整形済みコードブロック

RTF を使用すると、構文ハイライト付きコードを Word 内で編集可能な状態のまま保持できます。

from pathlib import Path
from pygments import highlight
from pygments.lexers import PythonLexer
from pygments.formatters import RtfFormatter
from spire.doc import *

# Pythonファイルを読み込む
code = Path("demo.py").read_text(encoding="utf-8")

# フォントを設定
formatter = RtfFormatter(fontface="Consolas")

# レキサー(構文解析器)を指定
rtf_text = highlight(code, PythonLexer(), formatter)

# フォントサイズを設定(24 = 12pt)
rtf_text = rtf_text.replace(r"\f0", r"\f0\fs24")

# Wordドキュメントを作成
doc = Document()

# セクションを追加
section = doc.AddSection()
section.PageSetup.Margins.All = 60

# 段落を追加
paragraph = section.AddParagraph()

# RTF形式の構文ハイライトコードを挿入
paragraph.AppendRTF(rtf_text)

# ドキュメントを保存
doc.SaveToFile("Output.docx", FileFormat.Docx2019)
doc.Dispose()

仕組み

Pygments は lexer(字句解析器) を使用して Python 構文を解析し、キーワード、文字列、コメントなどのトークンを識別します。RTFフォーマッタは、それらのトークンに対応する色やフォントを RTF 制御コードとして出力します。

生成されたRTF文字列は AppendRTF() を使用して Word に直接挿入されます。RTF は Word ネイティブ互換フォーマットのため、追加のレンダリング処理なしでフォント、色、行間などが保持されます。

フォントサイズは RTF 制御コード(例:\fs24)を変更することで制御でき、外観を細かく調整できます。この方法では、Word 内で編集可能かつ選択可能な構文ハイライト付きコードを作成できます。

効果図:

RTF を使用して構文ハイライト付きコードを Word に変換

方法2:HTML フォーマットによる構文ハイライト

HTML レンダリングでは、よりリッチな構文ハイライトと自動テキスト折り返しが可能です。

from pathlib import Path
from pygments import highlight
from pygments.lexers import PythonLexer
from pygments.formatters import HtmlFormatter
from spire.doc import *

# Pythonファイルを読み込む
code = Path("demo.py").read_text(encoding="utf-8")

# 構文ハイライト付きHTMLを生成
html_text = highlight(code, PythonLexer(), HtmlFormatter(full=True))

# Wordドキュメントを作成
doc = Document()

# セクションを追加
section = doc.AddSection()
section.PageSetup.Margins.All = 60

# 段落を追加
paragraph = section.AddParagraph()

# HTMLをWordに挿入
paragraph.AppendHTML(html_text)

# ドキュメントを保存
doc.SaveToFile("Output.docx", FileFormat.Docx2019)
doc.Dispose()

仕組み

ここでは、Pygments の HtmlFormatter を使用して Python コードをスタイル付き HTML へ変換します。HTML には構文色やフォーマットを表すCSSまたはインラインスタイルが含まれます。

Spire.Doc はこの HTML を解析し、Word ドキュメント内のフォーマットへ変換します。HTML 要素は Word のスタイル構造へ変換されるため、Web 上のコードブロックに近い見た目を再現できます。

この方法は、Web コンテンツ、静的ドキュメントサイト、または Markdown → HTML ワークフローから生成されたコードを Word へ取り込む場合に特に適しています。

効果図:

HTML を使用して構文ハイライト付きコードを Word に変換

あなたはこれも好きかもしれません:Python:HTML を Word に変換する方法

方法3:構文ハイライト付きコードを画像として挿入

編集可能性よりも見た目の一貫性を重視する場合、コードを画像としてレンダリングして挿入する方法があります。

from pathlib import Path
import textwrap
from pygments import highlight
from pygments.lexers import PythonLexer
from pygments.formatters import ImageFormatter
from spire.doc import *

# Pythonファイルを読み込む
code = Path("demo.py").read_text(encoding="utf-8")

# 長い行を手動で折り返す関数
def wrap_code_lines(code_text, max_width=75):
    wrapped_lines = []
    for line in code_text.splitlines():
        if len(line) > max_width:
            wrapped_lines.extend(textwrap.wrap(
                line,
                width=max_width,
                replace_whitespace=False,
                drop_whitespace=False
            ))
        else:
            wrapped_lines.append(line)
    return "\n".join(wrapped_lines)

code = wrap_code_lines(code, max_width=75)

# 画像生成の設定
formatter = ImageFormatter(
    font_name="Consolas",
    font_size=18,
    scale=2,
    image_pad=10,
    line_pad=2,
    background_color="#ffffff"
)

# 構文ハイライト画像を生成
img_bytes = highlight(code, PythonLexer(), formatter)

with open("code.png", "wb") as f:
    f.write(img_bytes)

# Wordドキュメントを作成
doc = Document()
section = doc.AddSection()
section.PageSetup.Margins.All = 60

# Wordに画像を挿入
paragraph = section.AddParagraph()
picture = paragraph.AppendPicture("code.png")

# 画像をページ幅に合わせる
page_width = (
    section.PageSetup.PageSize.Width
    - section.PageSetup.Margins.Left
    - section.PageSetup.Margins.Right
)
picture.Width = page_width

# ドキュメントを保存
doc.SaveToFile("Output.docx", FileFormat.Docx2019)
doc.Dispose()

仕組み

この方法では、コードをテキストではなく画像として生成します。Pygments の ImageFormatter を使用すると、フォント、色、余白、解像度などを完全に制御した構文ハイライト画像を作成できます。

画像生成では自動折り返しが行われないため、Python の textwrap モジュールを使用して長いコード行を事前に折り返します。これにより、ページ幅を超える大きな画像が生成されるのを防ぎます。

Word に挿入した後、画像の幅をページの印刷可能領域に合わせて自動調整します。コードはグラフィックとして埋め込まれるため、プラットフォーム間で見た目が完全に一致しますが、テキストとしての編集はできなくなります。

効果図:

構文ハイライト付きコードを画像として Word に挿入

まとめ

Python コードを Word ドキュメントに変換する方法はいくつかあり、目的に応じて選択できます。プレーンテキストはシンプルで柔軟性が高く、RTF や HTML は構文ハイライト付きの読みやすいドキュメントを作成できます。画像ベースのコードブロックは、視覚的なフォーマットを完全に固定したい場合に適しています。

一般的なドキュメント作成ワークフローでは次の使い分けが推奨されます。

  • プレーンテキスト :編集可能な技術ドキュメント
  • HTML / RTF :構文ハイライト付きドキュメント
  • 画像 :見た目の一貫性を重視する場合

よくある質問(FAQ)

チュートリアルに最適な方法はどれですか?

HTML または RTF 方式が、選択可能なテキストと明確な構文ハイライトを提供します。

インデントや空行を保持するには?

.read_text() を使用して .py ファイルをそのまま読み込み、行を削除・変更しないようにします。

画像として挿入したコードが小さくなるのはなぜですか?

Word はページ幅に合わせて画像を縮小するためです。画像のスケールや折り返し幅を調整すると読みやすくなります。

Word 内のコードをコピーできますか?

可能です。ただし、コードを画像として挿入した場合はコピーできません。

Markdown は必須ですか?

必須ではありません。Markdown はドキュメントパイプラインを利用する場合に便利なオプションです。

生成したドキュメントをPDFとして出力できますか?

はい。Document.SaveToFile() メソッドで出力形式を PDF に指定するだけです。

無料ライセンスを取得

評価版の制限なく Spire.Doc for Python の機能をすべて体験するには、30日間の無料トライアルライセンスをリクエスト してください。

Read 9 times