質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Word

Microsoft WordはMicrosoftが開発した業務用の文書生成用のソフトウェアです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

PyCharm

エディター・開発ツール

Q&A

解決済

2回答

1997閲覧

Pythonで作成するWordのヘッダーを複数行にしたい

YUMA-NAGAO

総合スコア41

Word

Microsoft WordはMicrosoftが開発した業務用の文書生成用のソフトウェアです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

PyCharm

エディター・開発ツール

0グッド

1クリップ

投稿2020/02/18 10:07

編集2020/02/18 11:56

#前提・実現したいこと
下記の様なワードを自動生成したい

イメージ説明

現在は、このようなワードを自動的に生成出来ています。

イメージ説明

実現したいこととしては、
1,ヘッダーに二行以上にすること
2,色を黒にすること

この二点です。

#試したこと
ドキュメントなどを見て、ヘッダーに行を追加することは出来たが、2行以上の追加の仕方がわからない。
Working with Headers and Footers
ドキュメント
https://pc.atsuhiro-me.net/entry/2017/11/18/150925

#発生している問題・エラーメッセージ
指定の仕方が間違っているらしく、範囲外と出てくる。
エラーメッセージ
File "C:/Users/LearningPython/Word_exa.py", line 20, in <module>
header_text1 = header_section.paragraphs[1]
IndexError: list index out of range

#該当のソースコード

Python

1from docx import Document 2from docx.shared import Inches 3from docx.enum.text import WD_TAB_ALIGNMENT 4 5import datetime 6 7now_time = datetime.datetime.now() 8filename = now_time.strftime('%Y_%m%d' + '.docx') 9TodayDate = now_time.strftime('%Y/%m/%d') 10FilePath = r'C:\Users\デスクトップ/' 11 12doc = Document() 13 14header_section = doc.sections[0].header 15 16ToDate = header_section.paragraphs[0] 17ToDate.text = str(TodayDate) 18ToDate.alignment = WD_TAB_ALIGNMENT.RIGHT 19 20header_text1 = header_section.paragraphs[1] 21header_text1.text = '名前' 22header_text1.alignment = WD_TAB_ALIGNMENT.CENTER 23 24 25# 段落に見出し追加 26doc.add_heading('報告書', 0).alignment = WD_TAB_ALIGNMENT.CENTER 27 28# 段落に文章追加 29doc.add_heading('目的', 1) 30doc.add_paragraph('') 31 32doc.add_heading('本日の成果', 1) 33doc.add_paragraph('') 34 35doc.add_heading('課題', 1) 36doc.add_paragraph('') 37 38doc.save(FilePath + filename) 39

#教えていただきたいこと
3点あります。

1、どのようにサンプルコードを変えればいのか?
2、ググった時のキーワード
3、解決方法を導き方

自力で解決できるようになりたいので!

#教えて頂いた事を基に修正したプログラム

Python

1from docx import Document 2from docx.enum.text import WD_TAB_ALIGNMENT,WD_COLOR_INDEX 3 4import datetime 5 6now_time = datetime.datetime.now() 7filename = now_time.strftime('%Y_%m%d' + '.docx') 8TodayDate = now_time.strftime('%Y/%m/%d') 9FilePath = r'C:\Users\デスクトップ/' 10 11doc = Document() 12 13header_section = doc.sections[0].header 14 15# 正式な型 16# ToDate = header_section.paragraphs[0] 17# ToDate.text = str(TodayDate) 18# ToDate.alignment = WD_TAB_ALIGNMENT.RIGHT 19# 20# header_section.add_paragraph() 21# header_text1 = header_section.paragraphs[1] 22# header_text1.text = '名前' 23# header_text1.alignment = WD_TAB_ALIGNMENT.RIGHT 24 25# シンプルな方 26ToDate = header_section.paragraphs[0] 27ToDate.text = str(TodayDate) + '\n' + '名前' 28ToDate.alignment = WD_TAB_ALIGNMENT.RIGHT 29 30# 段落に見出し追加 31doc.add_heading('日報', 0).alignment = WD_TAB_ALIGNMENT.CENTER 32 33# 段落に文章追加 34doc.add_heading('目的', 1) 35doc.add_paragraph('') 36doc.add_paragraph('') 37doc.add_paragraph('') 38 39doc.add_heading('本日の成果', 1) 40doc.add_paragraph('') 41doc.add_paragraph('') 42doc.add_paragraph('') 43 44doc.add_heading('課題', 1) 45doc.add_paragraph('') 46doc.add_paragraph('') 47doc.add_paragraph('') 48 49doc.styles["Title"].font.color.theme_color = WD_COLOR_INDEX.BLACK 50doc.styles["Heading 1"].font.color.theme_color = WD_COLOR_INDEX.BLACK 51 52doc.save(FilePath +'ss'+ filename)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

t_obara

2020/02/18 10:32

ワードで複数行にする場合は改行を入力して行うので、改行コードを挿入してみてはいかがでしょうか。
guest

回答2

0

ベストアンサー

ヘッダを二行にする方法

とりあえず2つ見つけました。

解決策1

このライブラリは触ったことはなかったのですが、プログラミング歴10年くらいの勘でやってみました。

python

1ToDate = header_section.paragraphs[0] 2ToDate.text = str(TodayDate) + "\n" + "名前" 3ToDate.alignment = WD_TAB_ALIGNMENT.RIGHT

できたしこれでいい気もする。けど、安直と言えば安直。

解決策2

段落を増やす方法を考えます。とりあえずヘッダの型を確認。

python

1# 他にいくらでも良いやり方がありますが、もっとも原始的な確認方法はこれ 2print(type(header_section)) # <class 'docx.section._Header'> 3print(type(header_section.paragraphs)) # <class 'list'>

リファレンス見に行きます。

Section objects — python-docx 0.8.10 documentation

いきなり使えそうなものを見つけました。

add_paragraph(text=u'', style=None)¶

Return a paragraph newly added to the end of the content in this container, having text in a single run if present, and having paragraph style style. If style is None, no paragraph style is applied, which has the same effect as applying the ‘Normal’ style.

とりあえずこれ使って解決。

python

1header_section.add_paragraph() 2header_text1 = header_section.paragraphs[1] 3header_text1.text = '名前' 4header_text1.alignment = WD_TAB_ALIGNMENT.CENTER

色を黒にする方法

こういうときは「何があるんだろうな」という気持ちでリファレンスのトップを見ます。すると「User Guide」という超親切そうなものと「API Documentation」という超役に立つものが見つかるので、先頭から読むか、適当に当たりをつけてつまみ食いします。そんな感じです。

しばらく調べた結果、

python

1doc.styles["Title"].font.color.theme_color = WD_COLOR_INDEX.BLACK 2doc.styles["Heading 1"].font.color.theme_color = WD_COLOR_INDEX.BLACK

でいいことがわかりました。


教えていただきたいことの書式にしたがってはいませんが、解決の過程は私にしては真面目に書いた方なのでご容赦ください。

投稿2020/02/18 11:08

hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YUMA-NAGAO

2020/02/18 11:56

ご丁寧にご回答頂きありがとうございました!!! ヘッダーを二行にする方法は、2の方が正式な形でしょうけど、わかりやすさを考慮して、1を使います!! なんとなくの気持ちでリファレンスを見れば良いんですね!! そうします!
guest

0

docx パッケージを使ったことはなく、直截的な回答ではありませんが、私ならヘッダーを2行にしたdocxを作成して、docx パッケージを使ってそのヘッダーがどうなっているのかを調べてから、同じような形式でヘッダーを作りますね。
正式ドキュメント(※)のチラ見では、docx パッケージにheaderを見れるようです。
※ Header and Footer

投稿2020/02/18 10:33

ikapy

総合スコア1167

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YUMA-NAGAO

2020/02/18 11:58

ご回答頂きありがとうございます。 hayatakaさんの方がわかりやすいので、ベストアンサーではないです。 すいません!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問