Python Doc документ, сформировать Doc документ, заполнить Doc документ по меткам(шаблону), все это можно сделать и в нашем любимом Python (ノ´ з `)ノ
Хаха, да я шучу, я люблю C#, но в силу новых задач, я использую Python.
И так, нам потребуется docxtpl, т.к я использую Visual Studio, мне просто нужно ввести название и установить. Если у Вас не Visual Studio юзаем magic: pip install docxtpl или сюда
Далее отправляемся в наш код и подключаем либу.
from docxtpl import DocxTemplate
Мануал по самой либе ищем так же тут.
Мне требовалось от библиотеки самое банально, вставить данные по меткам(маркерам). И здесь нету подводных камней и игры с бубном, просто и легко, листинг кода ниже.
def ReadDocxIP(datapost):
""" Описание вашего метода"""
dir = os.path.dirname(__file__) // Папка откуда берем документ
file_path = os.path.join(dir,'zayavkaIPhouse.docx') // Берем документ
doc = DocxTemplate(file_path) // Объявляем че-та-там
dictinonary = {} // эт для магии
for k,v in datapost.dict().items():
dictinonary.update({k: v})
if (dictinonary['type_object'] == 'makeHouse'):
dictinonary['rebuildHouse'] = '☐'
dictinonary['buildHouse'] = '☐'
dictinonary['makeHouse'] = '■'
if (dictinonary['type_object'] == 'rebuildHouse'):
dictinonary['rebuildHouse'] = '■'
dictinonary['buildHouse'] = '☐'
dictinonary['makeHouse'] = '☐'
if (dictinonary['type_object'] == 'buildHouse'):
dictinonary['rebuildHouse'] = '☐'
dictinonary['buildHouse'] = '■'
dictinonary['makeHouse'] = '☐'
if(dictinonary['type_system'] == 'water'):
dictinonary['water'] = '■'
dictinonary['drainwater'] = '☐'
if (dictinonary['type_system'] == 'drainwater'):
dictinonary['water'] == '☐'
dictinonary['drainwater'] = '■'
if (dictinonary['project'] == 'project_yes'):
dictinonary['project_yes'] = '■'
dictinonary['project_no'] = '☐'
if (dictinonary['project'] == 'project_no'):
dictinonary['project_yes'] = '☐'
dictinonary['project_no'] = '■'
// А вот с этого момента начинается замена данных
context = {'makeHouse':dictinonary['makeHouse'],
'rebuildHouse': dictinonary['rebuildHouse'],
'buildHouse': dictinonary['buildHouse'],
'water':dictinonary['water'],
'drainwater':dictinonary['drainwater'],
'u_fio':dictinonary['u_fio'],
'u_code_passport':dictinonary['u_code_passport'],
'u_seriya_passport':dictinonary['u_seriya_passport'],
'u_take_passport':dictinonary['u_take_passport'],
'u_date_passport':dictinonary['u_date_passport'],
'u_group_passport':dictinonary['u_group_passport'],
'u_adres_reg':dictinonary['u_adres_reg'],
'u_phone':dictinonary['u_phone'],
'u_inn':dictinonary['u_inn'],
'u_email':dictinonary['u_email'],
'u_object_connect':dictinonary['u_object_connect'],
'u_object_adres':dictinonary['u_object_adres'],
'u_target_object':"Жилое",
'u_hight':dictinonary['u_hight'],
'u_floor':dictinonary['u_floor'],
'u_waterPower':dictinonary['u_waterPower'],
'u_drainwaterPower':dictinonary['u_drainwaterPower'],
'u_poliv':dictinonary['u_poliv'],
'u_polivOblast':dictinonary['u_polivOblast'],
'u_basseyn':dictinonary['u_basseyn'],
'u_basseynSize':dictinonary['u_basseynSize'],
'u_year':dictinonary['u_year'],
'project_yes':dictinonary['project_yes'],
'project_no':dictinonary['project_no'],
}
doc.render(context) // загоняем в документ
// а тут я сохраняюсь
fio = dictinonary['u_fio']
if not os.path.exists(dir+"/"+fio):
os.makedirs(dir+"/"+fio)
doc.save(dir+"/"+fio+"/"+""+fio+".docx")
Вся основная магия, это:
context = {'Название метки': 'Ваши данные'}
В общем, все легко и? Правильно, просто.
Финиш
Ну вот и все :)
И помните! Лайк + подписка, мотивируют лучше чем найденная ";"