DocxTemplate を使用して Word のテーブルを Python で埋めようとしていますが、正しく行うにはいくつかの問題があります。下の図では、2 つの辞書を使用して 1 つのテーブルにデータを入力したいと考えています。
2 つの辞書はループで埋められ、最後にテンプレート ドキュメントを記述します。私の辞書を作成するための入力ドキュメントは、SQL で記述された DB 抽出です。私の主な問題は、2 つの異なる辞書のデータでテーブルを埋めたいときです。以下のコードでは、値を含む 2 つの辞書を例として示します。
# -*- coding: utf8 -*-
#
#
from docxtpl import DocxTemplate
if __name__ == "__main__":
document = DocxTemplate("template.docx")
DicoOccuTable = {'`num_carnet_adresses`': '`annuaire_telephonique`\n`carnet_adresses`\n`carnet_adresses_complement',
'`num_eleve`': '`CFA_apprentissage_ctrl_coherence`\n`CFA_apprentissage_ctrl_examen`}
DicoChamp = {'`num_carnet_adresses`': 72, '`num_eleve`': 66}
template_values = {}
#
template_values["keys"] = [[{"name":cle, "occu":val} for cle,val in DicoChamp.items()],
[{"table":vals} for cles,vals in DicoOccuTable.items()]]
#
document.render(template_values)
document.save('output/' + nomTable.replace('`','') + '.docx')
その結果、テーブルの 2 つの行が作成されますが、中には何も書き込まれていません... Python で作業を行ってから 1 週間しか経っていないため、ここでさまざまなオブジェクトを適切に管理していないと感じています。 . 私を助けるために何か提案があれば、私はそれを感謝します!
辞書を作成するためのループをここに置きます。なぜ間違ってコーディングしたのかを理解するのに役立つかもしれません:)
for c in ChampList:
with open("db_reference.sql", "r") as f:
listTable = []
line = f.readlines()
for l in line:
if 'CREATE TABLE' in l:
begin = True
linecreateTable = l
x = linecreateTable.split()
nomTable = x[2]
elif c in l and begin == True:
listTable.append(nomTable)
elif ') ENGINE=MyISAM DEFAULT CHARSET=latin1;' in l:
begin = False
nbreOccu=len(listTable)
Tables = "\n".join(listTable)
DicoChamp.update({c:nbreOccu})
DicoOccuTable.update({c:Tables})
# DicoChamp = {c:nbreOccu}
template_values = {}
どうもありがとうございます !