【Python×Word】python-docxによるスタイルの適用とユーザー定義の方法

スポンサーリンク
Python外部ライブラリ(python-docx)ドキュメントスタイル書式設定 python-docx

MS-Office WordをPythonで操作する「python-docx」ライブラリを解説します。

これまでに、python-docxを使って、「文章を作成する」、「画像や表を挿入する」そして「セクションによるページ管理をする」方法について取り上げてきました。

関連記事へのリンクはこちらになります。

< 連載Python×Word 目次 >
  • 連載1】ライブラリの導入とドキュメント(本文)作成の基本について >>
    1. python-docxのオブジェクトの階層構造 >>
    2. 段落による文章の管理 >>
    3. 文字ごとの書式設定 >>
  • 【連載2】ドキュメントに画像やテーブル・セクションを導入する >>
    1. 画像をインライン挿入する >>
    2. テーブルを挿入する >>
    3. セクションでドキュメント構成を管理する >>
  • 【連載3】スタイルの活用と登録する方法 >>
    1. 組込みスタイルを適用する >>
    2. 段落のスタイル >>
    3. 文字のスタイル >>
    4. テーブルスタイル >>
    5. ユーザー定義スタイルの登録 >>

さて、連載3回目となる今回は「ドキュメントにスタイルを適用する」また「ユーザーが独自スタイルを定義する」方法を解説していきます。

スタイルを活用するメリットには、

  • ドキュメント全体に統一感をもたせ、見栄えを整えることができる。
  • 同じスタイルを適用した複数の文章に対して、修正内容を一度に反映することができる。
  • 紛らわしい書式の設定を一度スタイルとして登録すれば、以降ドキュメント内で再利用できる。(コード減らし、よりシンプルにできる)

といったものがあります。

WordのUIでは以下のメニュー項目でスタイルの設定ができます。

「python-docxライブラリ」は、これらの操作に関する機能を提供しています。

Word_UI_スタイルの書式設定
図1 Word UIによるスタイル設定メニュー

これまでの解説の中でも、文章やテーブルを管理する、各オブジェクト(Paragraph, Ran, Table)に対し 引数:stylesytleプロパティ(属性) を使ってデフォルトスタイル(組込みスタイル)を設定してきました。

python-docxライブライには Styleオブジェクト というスタイルを管理するオブジェクトが用意されています。Wordに予め定義されたスタイルを適用することは勿論のこと、ユーザーが独自に書式スタイルをカスタム定義することもできます。

今回の記事は、この「スタイルの活用方法」について、より深く解説していきます。

先に要点をまとめておくと、本記事では次のようなことについて触れています。

この記事で学べること
  • python-docxで設定できるStyleオブジェクトの種類とその概要について
  • 組込みスタイル(built-in style)のリファレンス一覧
  • ユーザー定義スタイル(custom style)の追加と関連プロパティについて

本サイトでの紹介例は一例です。また、関数などの省略可能なオプション引数などについては割愛していますので、詳細や不明点などは必要に応じて公式サイトなどを参照してください。

<公式サイト>https://python-docx.readthedocs.io/en/latest/

それでは、次節からは具体的な Styleオブジェクト の取り扱いについて詳しく解説していきます。

スポンサーリンク

1. スタイル(Styleオブジェクト)の概要

スタイルを「適用する」または「定義する」などの操作は Styleオブジェクト で管理されます。

本節では、まずStyleオブジェクト種類とその階層構造について触れた上で、具体的なスタイルの適用手順について再度確認します。

1.1 Styleオブジェクトの種別とその構成

ドキュメントファイル内で定義されている、すべてのスタイル書式は、

Documentオブジェクト配下の、Stylesオブジェクト (末尾にsが付加されます)に配置されています。

Stylesオブジェクトは、Styleオブジェクトを要素とするイテラブルなオブジェクト(コレクション)です。(図2を参照)

Styleオブジェクト

Documentオブジェクト.stylesプロパティ

戻り値: Stylesオブジェクト

(Styleオブジェクトを要素とするコレクション・イテラブルなオブジェクト)

python-docx_Document-Stylesオブジェクトの関係_rev0.2
図2 Documentオブジェクト配下のStylesコレクション

Wordドキュメントの構成レイヤー・要素である段落・単語(文字)・テーブル(表)には、それぞれ固有スタイルがあり明確に区分されています。

段落レイヤーは _ParagraphStyleオブジェクト、単語(文字)レイヤーは _CharacterStyleオブジェクトで、 またテーブル要素は _TableStyleオブジェクト とそれぞれ個別オブジェクトとなります。

また、これらのオブジェクトは全て BaseStyleオブジェクト から継承するかたちで作られていますが、あまり意識する必要はありません。(図3)

python-docx_Styleオブジェクトの種類(機能別)_rev0.2
図3 Styleオブジェクトの機能による分類

以上が、機能別のスタイル分類になります。

さらに、Styleオブジェクトには「Wordにあらかじめスタイル定義がなされているもの」と「ユーザー自身が独自に定義(カスタム)するもの」の2つの定義の仕方があります。

それぞれ、「Built-in styles」と「Custom styles」と公式サイトでは区別していますので、本記事もそれに合わせています。

python-docx_Styleオブジェクトの種類(定義別)_rev0.2
図4 Styleオブジェクトの定義方法による分類

段落、単語(文字)、テーブル、どの機能別スタイルにおいてもユーザー独自スタイル(Custom styles)を定義することができます。図5 スタイルの機能_定義区分の整理

python-docx_Styleオブジェクトの機能_定義手法のマトリックス
図5 スタイルの機能_定義区分の整理

Built-in styles」についてはこの後の第2節で、「Custom styles」によるスタイル書式の定義については第3節で詳しく解説します。

1.2 スタイル(Styleオブジェクト)を適用する

スタイルを導入するメリットと概要が分かったところで、今度はスタイルを実際に適用する手順について解説します。スタイル(Styleオブジェクト)を適用する方法には次の2通りがあります。

  1. 段落(単語)を追加する際に、メソッドの「引数style」にて指定する。
  2. 段落(単語)オブジェクトの「styleプロパティ」で設定する

【1. メソッドの「引数style」でスタイルを指定

段落や文字、テーブルなどのオブジェクトを追加する add_paragraph()メソッド , add_table()メソッド などには、オプショナルな 引数:style があります。

引数styleに「‘Meiryo UI’」などのようにスタイル名(文字列)で指定することで、オブジェクトの追加とともに、そのスタイルが適用されます。

Styleオブジェクト

段落(Paragraph)

Documentオブジェクト.add_paragraph(text, style)

引数: text:段落のテキストを設定する

引数: style:段落のスタイルを指定する  (※共にオプショナル引数)


文字(Run)

Paragraphオブジェクト.add_run (text, style)

引数: text: 文字を設定する

引数: style: 文字のスタイル書式を指定する  (※共にオプショナル引数)


テーブル(Table)

Documentオブジェクト.add_table(rows, cols, style)

引数:rows:表の行数を指定する

引数:cols:表の列数を指定する

引数:style:表に設定するスタイルを指定する  (オプショナル引数)

いずれも、引数styleは省略可能で、省略した場合はDefaultスタイルが適用されます。


【2. 対象オブジェクトのstyleプロパティで設定

段落・文字・テーブルの対象オブジェクトが提供する styleプロパティ を使っても設定することができます。また、現在の適用中のスタイル名も取得できます。

書式は次のとおりです、属性に設定する形式は「‘Meiryo UI’」などのようにスタイル名(文字列)、もしくはStylesコレクション[‘Meiryo UI’]のようにStyleオブジェクトを指定します。

対象オブジェクトプロパティ設定・取得
段落(Paragraphオブジェクト)styleプロパティ段落のスタイルの取得と設定
スタイル名Styleオブジェクトで設定
文字(Runオブジェクト)styleプロパティ文字のスタイルの取得と設定
スタイル名Styleオブジェクトで設定
表(Tableオブジェクト)styleプロパティ表のスタイルの取得と設定
スタイル名Styleオブジェクトで設定
表1 style属性によるスタイルの適用

SAMPLE(1)

スタイルの適用例を実際のサンプルコードで確認してみましょう。

段落(Paragraph)と文字(Run)を追加しながら、メソッドの引数指定、またはプロパティによるスタイル書式の適用例を確認頂けます。(List1)

※なお、コードのコメントにある[A1][A2]・・・[B3]などの表記は、この後の実行結果と対応しています。

from docx import Document

doc = Document() # Documentオブジェクトの取得


# (A)--------------------------------------------------------------------------------
# メソッドの引数styleによるスタイルの設定


# 段落:スタイル名(Title)による指定・・・[A1]
pg1 = doc.add_paragraph('メソッド引数style=名前による設定', style='Title') 
print(pg1.style.name) # >>Title

# 文字:スタイル名(Subtitle Char)による指定・・・[A2]
run1 = pg1.add_run('add_run() 引数style=名前による設定', style='Subtitle Char')
print(run1.style.name) # >>Subtitle Char

#-----------------------------

# 段落:Styleオブジェクトによる指定・・・[A3]
pg2 = doc.add_paragraph('add_paragraph() 引数style=オブジェクトによる設定', style=doc.styles['Intense Quote'])
print(pg2.style.name) # >>Intense Quote


# (B)--------------------------------------------------------------------------------
# プロパティによるスタイルの設定と取得

# 段落: デフォルトスタイルの確認・・・[B1]
pg3 = doc.add_paragraph('段落:プロパティによるスタイルの設定')
print(pg3.style.name) # >>Normal

# 段落: スタイル名(Caption)による設定と取得
pg3.style = 'Caption' # styleプロパティでスタイル名'Caption’に設定
print(pg3.style.name) # >>Caption

#-----------------------------

# 文字:デフォルトスタイルの確認・・・[B2]
run3 = pg3.add_run('文字:プロパティによるスタイルの設定')
print(run3.style.name) # >>Default Paragraph Font

# 文字: スタイル名(Strong)による設定と取得
run3.style = 'Intense Emphasis'  # styleプロパティでスタイル名'Intense Emphasis’に設定
print(run3.style.name) # >>Intense Emphasis

#-----------------------------

# 段落: Styleオブジェクトによる設定・・・[B3]
pg4 = doc.add_paragraph('段落:プロパティによるスタイルの設定(オブジェクト)')
pg4.style = doc.styles['Body Text'] #  styleプロパティでオブジェクト'Body Text'を設定
print(pg4.style.name) # >>Body Text


doc.save('Styleを適用する.docx')

それでは、ポイントを解説します。

11,14行目:【引数styleに「スタイル名」を設定】

段落を add_paragraph()メソッド で追加すると同時に、引数:style に’Title’(タイトル)のようにスタイル名を文字列で指定しています。…[A1]

さらに、段落内に文字を add_run()メソッド で追加します。引数:style に‘Subtitle Char’(サブタイトル文字)を指定してスタイルを適用しています。…[A2]

21行目:【引数styleに「オブジェクト」を設定】

2つ目の段落を追加します。今度は、引数styleにStyleオブジェクトを設定してスタイルを適用させています。…[A3]

各ステップで name属性 でスタイル名を確認していますが、設定したとおりに反映されていることが確認できます。※Styleオブジェクト配下の主なメソッド・プロパティについては第3節で詳しく解説します。

33,39,50行目:【style属性にてスタイルを適用】

段落、文字を追加します。今度は各オブジェクトのstyleプロパティ経由でスタイルを設定しています。…[B1]~[B3]

先の引数指定の場合と同様、‘Caption’, ‘Intenses Emphasis’のように既定文字列を指定します。また、50行目のようにStyleオブジェクトで設定できることは引数指定と同じです。

<List1>の実行結果は次のようになりました。(図6)

Styleの設定.取得の確認
図6 List1の実行結果

指定したとおりのスタイル書式が適用されています。

[A1][A2]・・・[B3]などの表記はコードのコメントに対応しています。

A1: Title,  A2: Subtitle Char,  A3: Intense Wuote

B1: Normal → Caption, B2:Default Paragraph Font → Insense Emphasis/

B3: Body Text

以上、スタイルの概要と適用方法の解説をしてきました。これまでに「Built-in styles」(組込みスタイル)例がいくつか登場しましたが、次節ではWord(2016)の組込みスタイルをすべてを紹介します。

スポンサーリンク

2. 組込みスタイル(Built-in Styles)のデザインレシピ

Python_基本文法_内包表記

本節では組込みスタイル(Built-in Styles)のデザインを全て紹介します。

デザインレシピとしてお役立てください

Wordには、あらかじめ200程度のテンプレートとなるスタイルが組み込まれています。

前節のように、「スタイル名」をメソッドやプロパティに指定するだけで適用できるのはこの定義済みのスタイルがWordに組み込まれているからです。

スタイル名は、すべて英語による世界統一表記で、WordprocessingMLファイルに定義されています。python-docxライブラリもこれに準拠しています。

日本語に対応したWordUIに表示される日本語のスタイル名では指定できません。

世界統一表記と日本語のスタイル名の対応関係は、次のサイトからマクロをダウンロード・実行して頂くことで調べることができます。

参照先:DocTools Word Macros&Tips

https://www.thedoctools.com/word-macros-tips/word-macros/create-style-name-list/

なお、筆者の動作確認環境は「Microsoft Office Personal 2016」となります。環境の違いによっては見た目が異なる可能性がありますのであらかじめご了承ください。

2.1 段落スタイル(_ParagraphStyle)

段落の組込みスタイル( _ParagraphStyleオブジェクト )全36タイプの表示例を示しています。

スタイル指定を省略した場合は、デフォルトの ‘Normal’ が適用されます。また、段落スタイルには「Heading系」「BodyText系」「List系」などの系統があります。

Paragraph styles in default template

https://python-docx.readthedocs.io/en/latest/user/styles-understanding.html#paragraph-styles-in-default-template
Paragraph_Built-in-Style➀
図7 Paragraph styles in default template➀

Paragraph_Built-in-Style②
図8 Paragraph styles in default template②

Paragraph_Built-in-Style➂
図9 Paragraph styles in default template➂

2.2 文字スタイル(_CharacterStyle)

文字の組込みスタイル( _CharacterStyleオブジェクト )は全27タイプの表示例を示しています。

スタイル指定を省略した場合は、デフォルトの ‘DefaultParagraphFont’が適用されます。また、文字スタイルには「Heading系」「BodyText系」「Emphasis系」などの系統があります。

Character styles in default template

https://python-docx.readthedocs.io/en/latest/user/styles-understanding.html#character-styles-in-default-template
Character_Built-in-Style➀
図10 Character styles in default template➀

Character_Built-in-Style②
図11 Character styles in default template②

2.3 テーブルスタイル(_TableStyle)

テーブルの組込みスタイル( _TableStyleオブジェクト )は全100タイプと数多くあります。同一タイプで色違いの指定のものは割愛しています。

スタイル指定を省略した場合は、デフォルトの ‘Normal Table’が適用されます。

Table styles in default template

https://python-docx.readthedocs.io/en/latest/user/styles-understanding.html#table-Paragraph styles in default template
Table_Built-in-Style➀
図12 Table styles in default template➀

Table_Built-in-Style②
図13 Table styles in default template②

Table_Built-in-Style➂
図14 Table styles in default template➂

以上、組込みスタイル(Built-in Styles)の紹介でした。スタイルは既定のテンプレートを利用だけではなく、ユーザーにて自由に定義できるのでした。次節からはユーザー定義スタイル(Customstyles)について解説していきます。

スポンサーリンク

3. ユーザ定義スタイル(Custom styles)について

スタイルは既定のBuilt-in Styleの中から選択するもの以外にも、ユーザが独自に定義・カスタマイズし追加することも可能です。本節では、ユーザ定義スタイル( Custom styles )について解説します。

また、Styleオブジェクトを定義する上で必要となる、メソッドやプロパティの使い方ついても本節でまとめています。

3.1 ユーザ定義スタイルの追加と定義

スタイルを追加定義するには、まずStyleオブジェクトのコレクションである Stylesオブジェクト を取得した上で、その配下の add_styles()メソッド を次の書式のように実行します。

Styleオブジェクト

Documentオブジェクト.stylesプロパティ

戻り値: Stylesオブジェクト

(Styleオブジェクトを要素とするコレクション・イテラブルなオブジェクト)


Stylesオブジェクト.add_style(name, style_type)

引数: name :追加するスタイルの名前

引数: style_type: スタイルの種類をWD_STYLE_TYPEクラスの定義から選択

(文字:CHARACTER, 段落:PARAGRAPH, 表:TABLE)

戻り値: Styleオブジェクト

<1.1節>で解説しようにStyleオブジェクトは、ドキュメントの個別要素(段落、文字、テーブル)ごとに固有のStyleオブジェクトに分類され管理されています。

よって、add_style()メソッドでStyleオブジェクトを追加する際には、引数:style_type にどの個別要素に対応するスタイルなのかを明確に示す必要があります。WD_STYLE_TYPEクラス のEnum定義を渡します。(図15)

add_style()メソッドの引数指定
図15 add_style()メソッドの引数指定

さて、Styleオブジェクトの追加できましたが、この段階では既定の“デフォルト”スタイルが継承されています。ユーザーがカスタマイズするには、Styleオブジェクト配下に提供されてるメソッドやプロパティ(属性)を使います。

まずは、段落・文・テーブルのStyleオブジェクトに共通する主なメソッド/プロパティを紹介します。

base_style属性 はテンプレートとなるスタイルを指定できます、例えば、‘Body Text 2’と設定すると、‘Body Text 2’のスタイル書式を引き継ぎながら、ユーザーが変更したい設定で上書き(オバーライド)ができます。特に指定しなければ、Defaultスタイルがテンプレートになります。

また、font属性 は段落や文字のフォント書式を設定するのと同じようにFontオブジェクトに対して(書体、太字、斜体、下線)などを指定することができます。

<Fontオブジェクト>を参考にして下さい。

Styleオブジェクト(共通)機能その他詳細
nameプロパティスタイル名の取得
typeプロパティスタイルの種類を取得WD_STYLE_TYPEクラスのEnum定義を返す
PARAGRAPH[段落]、CHARACTER[文字/単語]、TABLE[テーブル]
base_styleプロパティベース(継承)とするBuilt-in-Stylesを
設定する
省略した場合は、各デフォルトスタイルが継承される
fontプロパティFontオブジェクト を取得し、フォント関連
の設定をする
通常の段落・文字に適用するFontオブジェクト(内部リンク)と同様
表2 Styleオブジェクト(共通)の主要な属性一覧

次に、段落(テーブルのセル内の段落も含む)のスタイル書式には、上記に加え、paragraph_format属性 があります。こちらも通常の段落の書式設定と同様に ParagraphFormatオブジェクト を経由して(配置やインデント、間隔)などの設定ができます。

<ParagraphFormatオブジェクト>を参考にして下さい。

さらに、段落スタイルには便利な属性( next_paragraph_style属性 )が用意されていて、現在の段落の次に追加する段落に適用するスタイルをあらかじめ既定しておくことができます。

見出し(‘Heading 1’)を入れたら、次に本文(‘Body Text’)といったように決まったルールがある場合に設定しておくと便利です。

Styleオブジェクト(共通)機能
paragraph_formatプロパティParagraph_Formatオブジェクトを取得し、フォーマットを設定します。
ParagraphオブジェクトのParagraph_Formatオブジェクトと同様です。
※_ParagraphStyle, _TableStyleのみ有効
next_paragraph_styleプロパティ段落を追加した際に適用するスタイルを設定します。
指定しない場合は、同じスタイルが適用されます。
※_ParagraphStyle, _TableStyleのみ有効
表3 Styleオブジェクト(段落のみ)の属性一覧

SAMPLE(2)

ここで、ユーザー定義スタイルについて、具体的にサンプルコードで確認してみましょう。

段落を1つ追加し、フォントや段落書式をカスタマイズして適用しています。

from docx import Document
from docx.enum.style import WD_STYLE_TYPE
from docx.shared import Pt, Inches, RGBColor    
from docx.enum.text import WD_ALIGN_PARAGRAPH


doc = Document()

styles = doc.styles # Stylesオブジェクト(Styleオブジェクトのコンテナ)を取得する

# add_style()メソッドで新規Styleオブジェクトを追加する
style = styles.add_style('Original-Style', WD_STYLE_TYPE.PARAGRAPH)


# base_styleプロパティで継承された既定スタイルを確認する
# 新規追加した場合は"None"が表示される(つまりDefaultスタイルが適用されている)
print(style.base_style) # >>None

# base_styleプロパティで既定スタイルを継承する
style.base_style = styles['Title']
print(style.base_style) # >>_ParagraphStyle('Title') id: 2408904452360


#---------------------------------------------------------------------------------
# Fontの定義

# 新規styleオブジェクトのフォント設定をするためにFontオブジェクトを取得する
font = style.font

# nameプロパティでフォントの取得と設定
print(font.name) # >>None
font.name = 'Meiryo UI'
print(font.name) # >>Meiryo UI

# sizeプロパティで文字サイズの取得と設定
print(font.size) # >>None
font.size = Pt(20)
print(font.size.pt) # >>10.0

# colorプロパティでフォント色の取得と設定
print(font.color.rgb) # >>None
font.color.rgb = RGBColor(255,0,0)
print(font.color.rgb) # >>FF0000

#---------------------------------------------------------------------------------
# Paragraph_Formattingの定義

# 新規styleオブジェクトの段落書式の設定をするためにParagraph-Formattingブジェクトを取得する
paragraph_format = style.paragraph_format

# alignmentプロパティで段落の位置揃えの取得と設定
print(paragraph_format.alignment) # >>None
paragraph_format.alignment = WD_ALIGN_PARAGRAPH.LEFT
print(paragraph_format.alignment) # >>LEFT(1)

# left_indentプロパティで段落の左インデントの取得と設定
print(paragraph_format.left_indent) # >>None
paragraph_format.left_indent = Inches(0.50)
print(paragraph_format.left_indent.inches) # >>0.5

#---------------------------------------------------------------------------------

# 新規追加したスタイルを段落に適用
doc.add_paragraph('Custom-Styleを定義し適用', style = style)

#print(len(styles)) # >>165
#style.delete()
#print(len(styles)) # >>164

#doc.add_paragraph('Custom-Styleを定義し適用', style = style)


doc.save('Custom Styleを定義する.docx')


print(len(styles)) # >>165
# delete()メソッドで追加スタイルを削除する
style.delete()
print(len(styles)) # >>164

# 削除されたスタイルを適用しようとしたので'AttributeError'が発生する 
#doc.add_paragraph('Custom-Styleを定義し適用', style = style) # 'NoneType' object has no attribute 'type'

それでは、ポイントを解説します。

12行目:【段落のStyleオブジェクトを取得】

add_style()メソッド にて新規スタイルを追加しています。その際、定義するスタイル名と種類を引数で指定します。ここでは、段落用のスタイルを‘original-style’として定義・追加しています。

17,21行目:【テンプレートの確認と設定】

base_styleプロパティ で、スタイルのテンプレート(継承したスタイル)を確認することができます。新規追加したスタイルでは、17行目のように初期値は‘None’と表示されます。これは、段落の‘Default’スタイルを継承している状態です。

テンプレートを変更したければ、20行目のように、既定のStyleオブジェクトを設定します。ここでは、’Title’をベースにして以降で書式をカスタマイズします。

28~43行目:【フォントの書式設定】

28行目 fontプロパティ にてFontオブジェクトを取得、変数fontに格納します。文体は name属性で、文字サイズは size属性、文字色は color属性 で設定できます。(‘Meiryo UI’, 20pt, 赤色)

49~59行目:【段落の書式(ParagraphFormat)設定】

49行目 paragraph_formatプロパティ にてParagraphFormatオブジェクトを取得、変数:paragraph_format に格納します。

位置揃えは alignment属性 で、インデント(左)は left_indent属性 で設定できます。

(左寄せ, 左にインデント0.5Inchi)

最後に、すべての既定スタイル数(165)を確認した後に、「delete()メソッド」で追加したスタイルを削除します。スタイル数が1つ減って(164)となったことを確認しています。

因みに、スタイルを削除すると、そのスタイルを適用していたオブジェクトは、“Default”スタイルに戻ります。


<List2>の実行結果は以下のようになりました。(図16)

テンプレート(‘Title’)をベースとして、フォントや段落の書式カスタマイズできています。

Custom-Styleの適用のコード例の実行結果
図16 List2の実行結果

以上、ユーザー定義スタイルの追加・作成方法について解説しました。次項では、スタイルをWordのUIに表示して、推奨リストやギャラリーに反映する方法について解説します。

3.2 Wordのメニュー一覧に表示する

ユーザーが定義したスタイルはWordのメニューの一覧やリストに表示させることができます。これによりカスタマイズした、スタイルをコードからだけでなく、WordのUI(ユーザインターフェース)から直接利用できるようになります。

表示できるのはスタイル一覧(the style gallery)と推奨リスト(list of recommended styles)になります。(図17)

スタイル一覧_推奨スタイル一覧のUI
図17 スタイル一覧と推奨リスト

表示設定に関連したプロパティには以下の5つがあります。

Styleオブジェクト機能
hiddenプロパティ対象スタイルを非表示にする(True:非表示/False:表示)
※スタイルの適用自体は可能
quick_styleプロパティ対象スタイルをUIの一覧へ表示させる(True:非表示/False:表示)
hiddenプロパティはFalseであることが前提
lockedプロパティ対象のスタイルを非表示・適用不可とする(True:保護/False:解除)
※Word書式の保護設定が有効になっていることが前提
unhide_when_usedプロパティスタイルを適用したタイミングで表示するようにする
(True:有効/False:無効)
priorityプロパティスタイル一覧の表示順位を指定する。Defaultは最優先
同じ順位のスタイルが複数ある場合は名前でソートされる
表4 Styleオブジェクトの表示に関する属性一覧

例えば「スタイル一覧」と「推奨リスト」を表示させるには、hiddenプロパティ は”Flase“、quick_styleプロパティ は”True“に設定する必要があります。

また、lockedプロパティ に“True”を指定すると表示はおろか、適用することもできなくなります。

その他の属性の組合せについて整理すると図18のようになります。

Styleオブジェクト_hidden,quick_styleプロパティ
図18 Word UIの表示・非表示するプロパティのまとめ

SAMPLE(3)

ここで、ユーザー定義したスタイルを一覧や推奨リストに表示する具体例をサンプルコードで確認してみましょう。

from docx import Document
from docx.enum.style import WD_STYLE_TYPE

doc=Document()
# Stylesオブジェクトの取得
styles = doc.styles

# add_style()メソッドでスタイル名('Original-A')のスタイルを追加する
style_A = styles.add_style('Original-A', WD_STYLE_TYPE.PARAGRAPH)

# add_style()メソッドでスタイル名('Original-B')のスタイルを追加する
style_B = styles.add_style('Original-B', WD_STYLE_TYPE.PARAGRAPH)

#------------------------------------------------------------
# 初期状態(Default)の属性値を確認する

print(style_A.hidden)      # >>False
print(style_A.locked)      # >>False
print(style_A.quick_style) # >>False
print(style_A.priority)    # >>None

#------------------------------------------------------------
# スタイル名('Original-A')の属性を設定する
# Word UI 「スタイル一覧」 「推奨リスト」に表示
# 表示優先度は最高レベル

style_A.hidden = False
style_A.quick_style = True
style_A.priority = 0

#------------------------------------------------------------
# スタイル名('Original-B')の属性を設定する
# Word UI 推奨リスト」のみに表示
# 表示優先度は最高レベル

style_B.hidden = False
style_B.quick_style = False
style_B.priority = 2

doc.save('WordUI_with_Custum-Style.docx')

それでは、ポイントを解説します。

9,12行目で、段落スタイルを2つ新規追加(“original-A”,” original-B”)します。

17~20行目:【表示に関する属性値(初期値)】

追加したスタイルの初期状態(Default)の属性値を確認しています。

hidden/quick_styleプロパティ が“False”なので推奨リストだけに表示される設定になっています。

27~29行目:【スタイル一覧、推奨リストに表示】

スタイル(“original-A”)の quick_styleプロパティ を“True”としてスタイル一覧+推奨リストに表示することを許可しています。また、priorityプロパティ に最大優先度を意味する「0」を設定することでトップ位置に表示させています。

36~38行目:【推奨リストと優先度の調整】

スタイル(“original-B”)の quick_styleプロパティ を“False”として、推奨リストにのみ表示させます。表示優先度は 「2」つまり3番目になるように設定しています。


<List3>の実行結果は以下のようになりました。(図19)

右のスタイル一覧には、スタイル(“original-A”)のみが表示され、左の推奨リストには2つのスタイルが共に表示できました。また、優先度も指定どおりになっています。

Word_UI_スタイルを登録
図19 List3の実行結果

以上が、ユーザー定義スタイルをWordのUIへ反映させる方法の解説となります。最後に本記事の内容をまとめておきましょう。

4. まとめ

いかがでしたでしょうか?

今回は「python-docx」ライブラリによるスタイルの適用手順と、ユーザー定義スタイルについて解説してきました。

ドキュメントは見た目の美しさが重要です。どんな良いコンテンツであっても不揃いなものであっては読者に届かないかもしれません。スタイルをうまく活用して、統一感のある見栄えに整えていきましょう。本記事が何かのお役に立てれば幸いです。

最後にポイントをまとめておきます。

. 段落、文字、表にスタイル(Styleオブジェクト)を設定することができる。さらに、スタイルにはライブラリに予め組み込まれた(built-in-Style)とユーザー自ら定義する(Custum-Style)の2種類がある。

. 組込みスタイル段落36種、文字27種類、表100種類と豊富に用意されている。

. ユーザー定義スタイルは、built-in-Styleをテンプレートとしつつもオリジナル書式にカスタマイズできる。また、Wordへの登録とUIへの表示方法をコード上で指定できる。

本連載は今回が最後ですが、また機会があればpython-docをつかった応用例を紹介したいと思います。お楽しみに。


また、Word以外にも「Excel」や「PowerPoint」を操作するためのライブラリも連載記事で解説しています。 Office3大ソフトとPythonを組合わせて作業効率を上げていきましょう!

Excelの連載についてはこちらから

PowerPointの連載についてはこちらから

ここまで、お読みいただきありがとうございました。

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