def test_pages(self): document = MailMerge( path.join(path.dirname(__file__), 'test_merge_pages.docx')) self.assertEqual(document.get_merge_fields(), {'fieldname'}) document.merge_pages([ { 'fieldname': "xyz" }, { 'fieldname': "abc" }, { 'fieldname': "2b v ~2b" }, ]) with tempfile.TemporaryFile() as outfile: document.write(outfile) expected_tree = etree.fromstring( '<w:document xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:ns1="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" mc:Ignorable="w14 wp14"><w:body><w:p w:rsidP="007B2B98" w:rsidR="00EC3BBB" w:rsidRDefault="00651722" w:rsidRPr="00651722"><w:r><w:t xml:space="preserve">This is a template for the </w:t></w:r><w:r><w:t>xyz</w:t></w:r><w:r><w:t xml:space="preserve"> merge_list test case</w:t></w:r><w:bookmarkStart w:id="0" w:name="_GoBack" /><w:bookmarkEnd w:id="0" /></w:p><w:sectPr w:rsidR="00EC3BBB" w:rsidRPr="00651722"><w:headerReference ns1:id="rId7" w:type="default" /><w:footerReference ns1:id="rId8" w:type="default" /><w:pgSz w:h="15840" w:w="12240" /><w:pgMar w:bottom="1440" w:footer="708" w:gutter="0" w:header="708" w:left="1440" w:right="1440" w:top="1440" /><w:cols w:space="708" /><w:docGrid w:linePitch="360" /></w:sectPr></w:body><w:br w:type="page" /><w:body><w:p w:rsidP="007B2B98" w:rsidR="00EC3BBB" w:rsidRDefault="00651722" w:rsidRPr="00651722"><w:r><w:t xml:space="preserve">This is a template for the </w:t></w:r><w:r><w:t>abc</w:t></w:r><w:r><w:t xml:space="preserve"> merge_list test case</w:t></w:r><w:bookmarkStart w:id="0" w:name="_GoBack" /><w:bookmarkEnd w:id="0" /></w:p><w:sectPr w:rsidR="00EC3BBB" w:rsidRPr="00651722"><w:headerReference ns1:id="rId7" w:type="default" /><w:footerReference ns1:id="rId8" w:type="default" /><w:pgSz w:h="15840" w:w="12240" /><w:pgMar w:bottom="1440" w:footer="708" w:gutter="0" w:header="708" w:left="1440" w:right="1440" w:top="1440" /><w:cols w:space="708" /><w:docGrid w:linePitch="360" /></w:sectPr></w:body><w:br w:type="page" /><w:body><w:p w:rsidP="007B2B98" w:rsidR="00EC3BBB" w:rsidRDefault="00651722" w:rsidRPr="00651722"><w:r><w:t xml:space="preserve">This is a template for the </w:t></w:r><w:r><w:t>2b v ~2b</w:t></w:r><w:r><w:t xml:space="preserve"> merge_list test case</w:t></w:r><w:bookmarkStart w:id="0" w:name="_GoBack" /><w:bookmarkEnd w:id="0" /></w:p><w:sectPr w:rsidR="00EC3BBB" w:rsidRPr="00651722"><w:headerReference ns1:id="rId7" w:type="default" /><w:footerReference ns1:id="rId8" w:type="default" /><w:pgSz w:h="15840" w:w="12240" /><w:pgMar w:bottom="1440" w:footer="708" w:gutter="0" w:header="708" w:left="1440" w:right="1440" w:top="1440" /><w:cols w:space="708" /><w:docGrid w:linePitch="360" /></w:sectPr></w:body></w:document>' ) # noqa self.assert_equal_tree(expected_tree, get_document_body_part(document).getroot())
def test_pages_with_multiple_pages(self): """ This also tests that merge_pages produces a multiple paged document, however this template already contains two pages. So the result should be 3 * 2 pages. """ document = MailMerge( path.join(path.dirname(__file__), 'test_merge_pages_paged.docx')) self.assertEqual(document.get_merge_fields(), {'fieldname'}) document.merge_pages([ { 'fieldname': "xyz" }, { 'fieldname': "abc" }, { 'fieldname': "2b v ~2b" }, ]) with tempfile.TemporaryFile() as outfile: document.write(outfile) expected_tree = ElementTree.fromstring( '<w:document xmlns:ns1="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"><w:body><w:p w:rsidP="007B2B98" w:rsidR="00507D2F" w:rsidRDefault="00651722"><w:r><w:t xml:space="preserve">This is a template for the </w:t></w:r><w:r><w:t>xyz</w:t></w:r><w:r><w:t xml:space="preserve"> merge_list test case</w:t></w:r><w:r w:rsidR="00507D2F"><w:t>, page 1</w:t></w:r></w:p><w:p w:rsidR="00507D2F" w:rsidRDefault="00507D2F"><w:r><w:br w:type="page" /></w:r></w:p><w:p w:rsidP="007B2B98" w:rsidR="00EC3BBB" w:rsidRDefault="00507D2F" w:rsidRPr="00651722"><w:r><w:lastRenderedPageBreak /><w:t xml:space="preserve">This is a template for the </w:t></w:r><w:r><w:t>xyz</w:t></w:r><w:r><w:t xml:space="preserve"> merge_list test case</w:t></w:r><w:r><w:t>, page 2</w:t></w:r><w:bookmarkStart w:id="0" w:name="_GoBack" /><w:bookmarkEnd w:id="0" /></w:p><w:sectPr w:rsidR="00EC3BBB" w:rsidRPr="00651722"><w:headerReference ns1:id="rId7" w:type="default" /><w:footerReference ns1:id="rId8" w:type="default" /><w:pgSz w:h="15840" w:w="12240" /><w:pgMar w:bottom="1440" w:footer="708" w:gutter="0" w:header="708" w:left="1440" w:right="1440" w:top="1440" /><w:cols w:space="708" /><w:docGrid w:linePitch="360" /></w:sectPr></w:body><w:br w:type="page" /><w:body><w:p w:rsidP="007B2B98" w:rsidR="00507D2F" w:rsidRDefault="00651722"><w:r><w:t xml:space="preserve">This is a template for the </w:t></w:r><w:r><w:t>abc</w:t></w:r><w:r><w:t xml:space="preserve"> merge_list test case</w:t></w:r><w:r w:rsidR="00507D2F"><w:t>, page 1</w:t></w:r></w:p><w:p w:rsidR="00507D2F" w:rsidRDefault="00507D2F"><w:r><w:br w:type="page" /></w:r></w:p><w:p w:rsidP="007B2B98" w:rsidR="00EC3BBB" w:rsidRDefault="00507D2F" w:rsidRPr="00651722"><w:r><w:lastRenderedPageBreak /><w:t xml:space="preserve">This is a template for the </w:t></w:r><w:r><w:t>abc</w:t></w:r><w:r><w:t xml:space="preserve"> merge_list test case</w:t></w:r><w:r><w:t>, page 2</w:t></w:r><w:bookmarkStart w:id="0" w:name="_GoBack" /><w:bookmarkEnd w:id="0" /></w:p><w:sectPr w:rsidR="00EC3BBB" w:rsidRPr="00651722"><w:headerReference ns1:id="rId7" w:type="default" /><w:footerReference ns1:id="rId8" w:type="default" /><w:pgSz w:h="15840" w:w="12240" /><w:pgMar w:bottom="1440" w:footer="708" w:gutter="0" w:header="708" w:left="1440" w:right="1440" w:top="1440" /><w:cols w:space="708" /><w:docGrid w:linePitch="360" /></w:sectPr></w:body><w:br w:type="page" /><w:body><w:p w:rsidP="007B2B98" w:rsidR="00507D2F" w:rsidRDefault="00651722"><w:r><w:t xml:space="preserve">This is a template for the </w:t></w:r><w:r><w:t>2b v ~2b</w:t></w:r><w:r><w:t xml:space="preserve"> merge_list test case</w:t></w:r><w:r w:rsidR="00507D2F"><w:t>, page 1</w:t></w:r></w:p><w:p w:rsidR="00507D2F" w:rsidRDefault="00507D2F"><w:r><w:br w:type="page" /></w:r></w:p><w:p w:rsidP="007B2B98" w:rsidR="00EC3BBB" w:rsidRDefault="00507D2F" w:rsidRPr="00651722"><w:r><w:lastRenderedPageBreak /><w:t xml:space="preserve">This is a template for the </w:t></w:r><w:r><w:t>2b v ~2b</w:t></w:r><w:r><w:t xml:space="preserve"> merge_list test case</w:t></w:r><w:r><w:t>, page 2</w:t></w:r><w:bookmarkStart w:id="0" w:name="_GoBack" /><w:bookmarkEnd w:id="0" /></w:p><w:sectPr w:rsidR="00EC3BBB" w:rsidRPr="00651722"><w:headerReference ns1:id="rId7" w:type="default" /><w:footerReference ns1:id="rId8" w:type="default" /><w:pgSz w:h="15840" w:w="12240" /><w:pgMar w:bottom="1440" w:footer="708" w:gutter="0" w:header="708" w:left="1440" w:right="1440" w:top="1440" /><w:cols w:space="708" /><w:docGrid w:linePitch="360" /></w:sectPr></w:body></w:document>' ) # noqa self.assert_equal_tree(expected_tree, get_document_body_part(document).getroot())
def mailMerge(order_list, master_order_list, dest_path): #directory = os.getcwd() if os.path.isfile(f'{dest_path}/Walmart BOL {load_no}.docx'): os.remove(f'{dest_path}/Walmart BOL {load_no}.docx') if os.path.isfile( f'{dest_path}/Walmart Master BOL Load ID {load_no}.docx'): os.remove(f'{dest_path}/Walmart Master BOL Load ID {load_no}.docx') bol = MailMerge('bol_template.docx') bol.merge_pages(order_list) bol.write(f'{dest_path}/Walmart BOL {load_no}.docx') master_bol = MailMerge('master_bol_template.docx') master_bol.merge_pages(master_order_list) master_bol.write(f'{dest_path}/Walmart Master BOL Load ID {load_no}.docx') if sys.platform == 'darwin': def openFolder(path): subprocess.Popen(['open', '--', path]) elif sys.platform == 'linux2': def openFolder(path): subprocess.Popen(['xdg-open', '--', path]) elif sys.platform == 'win32': def openFolder(path): subprocess.Popen(['explorer', path]) openFolder(dest_path)
def merge(self, mergefields, word_path): print('WordMerge.merge') print(word_path) # DEBUG word_template = MailMerge(self.template_path) word_template.merge_pages([mergefield._asdict() for mergefield in mergefields.itertuples()]) word_template.write(word_path)
def render_to_word(template_src: object, doc_name: object, context_dict: object = {}) -> object: document = MailMerge(template_src) document.merge_pages([ context_dict, ]) document.write(doc_name)
def merge_file_fields_tables(self, doc_path, inserted_fields, inserted_tables2, filename): document = MailMerge(doc_path) for i in inserted_tables2: for j in i: a = list(j.keys())[0] document.merge_rows(a, i) document.merge_pages([inserted_fields]) document.write(filename) return filename
def generate(): info=getquestions() print(info) template="./template.docx" doc=MailMerge(template) doc.merge_pages([info]) doc.write("./output.docx") document = Document('./output.docx') document.add_picture("D:\SIH2020\output..jpg",width=Inches(1),height=Inches(0.5)) document.add_paragraph('Signature') document.save("./output.docx")
def perform_mail_merge(self): """Performs a mail merge and creates a new docx file.""" in_docx_path = self.template_docx_file_path if self.output_docx_name is None: out_docx_path = self.generate_out_filename() data = self.get_records_from_db() document = MailMerge(in_docx_path) document.merge_pages(data) document.write(out_docx_path) return
def populate_doc(frameX, frameY, patent_listX, patent_listY): template = "TEMPLATE 5.docx" document = MailMerge(template) XListofdict = [] YListofdict = [] XList2ofdict = [] for x in range(len(patent_listX)): Xdict = {} Xdict["X_PAT_NUMBER"] = frameX.iloc[x, 0] Xdict["X_PAT_TITLE"] = frameX.iloc[x, 1] Xdict["X_PAT_ASSIGNEE"] = frameX.iloc[x, 6] Xdict["X_PAT_PUBDATE"] = frameX.iloc[x, 5] Xdict["X_PAT_APPDATE"] = frameX.iloc[x, 3] Xdict["X_PAT_PRIORDATE"] = frameX.iloc[x, 4] Xdict["X_PAT_INVENTORS"] = frameX.iloc[x, 7] Xdict["X_PAT_FAMILY"] = frameX.iloc[x, 8] XListofdict.append(Xdict) if len(patent_listY) > 1: print patent_listY for x in range(len(patent_listY)): Ydict = {} Ydict["Y_PAT_NUMBER"] = frameY.iloc[x, 0] Ydict["Y_PAT_TITLE"] = frameY.iloc[x, 1] Ydict["Y_PAT_ASSIGNEE"] = frameY.iloc[x, 6] Ydict["Y_PAT_PUBDATE"] = frameY.iloc[x, 5] Ydict["Y_PAT_APPDATE"] = frameY.iloc[x, 3] Ydict["Y_PAT_PRIORDATE"] = frameY.iloc[x, 4] Ydict["Y_PAT_INVENTORS"] = frameY.iloc[x, 7] Ydict["Y_PAT_FAMILY"] = frameY.iloc[x, 8] YListofdict.append(Ydict) for x in range(len(patent_listX)): Xdict1 = {} Xdict1["X_PAT_{}_NUMBER".format(x + 1)] = frameX.iloc[x, 0] Xdict1["X_PAT_{}_TITLE".format(x + 1)] = frameX.iloc[x, 1] Xdict1["X_PAT_{}_ASSIGNEE".format(x + 1)] = frameX.iloc[x, 6] Xdict1["X_PAT_{}_PUBDATE".format(x + 1)] = frameX.iloc[x, 5] Xdict1["X_PAT_{}_APPDATE".format(x + 1)] = frameX.iloc[x, 3] Xdict1["X_PAT_{}_PRIORDATE".format(x + 1)] = frameX.iloc[x, 4] Xdict1["X_PAT_{}_INVENTORS".format(x + 1)] = frameX.iloc[x, 7] Xdict1["X_PAT_{}_FAMILY".format(x + 1)] = frameX.iloc[x, 8] XList2ofdict.append(Xdict1) #print YListofdict document.merge_rows('X_PAT_NUMBER', XListofdict) document.merge_rows('Y_PAT_NUMBER', YListofdict) document.merge_pages(XList2ofdict) #document.merge(**Ydict) document.write('NEW REPORT1.docx')
def replace_mailing_merge_and_convert_to_pdf(self): with open(self.data_mailingMerge) as f: data = json.load(f)['data'] len_data = len(data) if not os.path.exists(self.output_Word): os.makedirs(self.output_Word) if not os.path.exists(self.output_PDF): os.makedirs(self.output_PDF) if self.multiple_files: for index, input in enumerate(data): print('creating {}/{} ...'.format(index, len_data)) document = MailMerge(self.word_template) document.merge(**input) word_output = os.path.join( self.output_Word, self.fileName_prefix + str(index + 1) + self.word_extension) document.write(word_output) # convert to PDF if self.convert_to_pdf: subprocess.check_output([ '/Applications/LibreOffice.app/Contents/MacOS/soffice', '--convert-to', 'pdf', '--outdir', self.output_PDF, word_output ]) else: print("creating one file containing {} mails...".format(len_data)) document = MailMerge(self.word_template) document.merge_pages(data) word_output = os.path.join( self.output_Word, self.fileName_prefix + self.word_extension) document.write(word_output) # convert to PDF if self.convert_to_pdf: subprocess.check_output([ '/Applications/LibreOffice.app/Contents/MacOS/soffice', '--convert-to', 'pdf', '--outdir', self.output_PDF, word_output ]) print('replace_mailingMerge_and_convertToPDF is done !')
def patient_report(data): patient_data = data.get('patient') ekgs_data = data.get('ekgs') for item in ekgs_data: for key, value in item.items(): item[key] = str(value) document = MailMerge(patient_template) document.merge_pages([patient_data]) document.merge_rows('ekg_id', ekgs_data) filename = f"Отчет_по_пациенту_{patient_data.get('patient_id')}.docx" new_file_path = f"{path}/templates/{filename}" document.write(new_file_path) return filename
def test_pages(self): document = MailMerge(path.join(path.dirname(__file__), 'test_merge_pages.docx')) self.assertEqual(document.get_merge_fields(), {'fieldname'}) document.merge_pages([ {'fieldname': "xyz"}, {'fieldname': "abc"}, {'fieldname': "2b v ~2b"}, ]) with tempfile.TemporaryFile() as outfile: document.write(outfile) expected_tree = etree.fromstring('<w:document xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:ns1="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" mc:Ignorable="w14 wp14"><w:body><w:p w:rsidP="007B2B98" w:rsidR="00EC3BBB" w:rsidRDefault="00651722" w:rsidRPr="00651722"><w:r><w:t xml:space="preserve">This is a template for the </w:t></w:r><w:r><w:t>xyz</w:t></w:r><w:r><w:t xml:space="preserve"> merge_list test case</w:t></w:r><w:bookmarkStart w:id="0" w:name="_GoBack" /><w:bookmarkEnd w:id="0" /></w:p><w:sectPr w:rsidR="00EC3BBB" w:rsidRPr="00651722"><w:headerReference ns1:id="rId7" w:type="default" /><w:footerReference ns1:id="rId8" w:type="default" /><w:pgSz w:h="15840" w:w="12240" /><w:pgMar w:bottom="1440" w:footer="708" w:gutter="0" w:header="708" w:left="1440" w:right="1440" w:top="1440" /><w:cols w:space="708" /><w:docGrid w:linePitch="360" /></w:sectPr></w:body><w:br w:type="page" /><w:body><w:p w:rsidP="007B2B98" w:rsidR="00EC3BBB" w:rsidRDefault="00651722" w:rsidRPr="00651722"><w:r><w:t xml:space="preserve">This is a template for the </w:t></w:r><w:r><w:t>abc</w:t></w:r><w:r><w:t xml:space="preserve"> merge_list test case</w:t></w:r><w:bookmarkStart w:id="0" w:name="_GoBack" /><w:bookmarkEnd w:id="0" /></w:p><w:sectPr w:rsidR="00EC3BBB" w:rsidRPr="00651722"><w:headerReference ns1:id="rId7" w:type="default" /><w:footerReference ns1:id="rId8" w:type="default" /><w:pgSz w:h="15840" w:w="12240" /><w:pgMar w:bottom="1440" w:footer="708" w:gutter="0" w:header="708" w:left="1440" w:right="1440" w:top="1440" /><w:cols w:space="708" /><w:docGrid w:linePitch="360" /></w:sectPr></w:body><w:br w:type="page" /><w:body><w:p w:rsidP="007B2B98" w:rsidR="00EC3BBB" w:rsidRDefault="00651722" w:rsidRPr="00651722"><w:r><w:t xml:space="preserve">This is a template for the </w:t></w:r><w:r><w:t>2b v ~2b</w:t></w:r><w:r><w:t xml:space="preserve"> merge_list test case</w:t></w:r><w:bookmarkStart w:id="0" w:name="_GoBack" /><w:bookmarkEnd w:id="0" /></w:p><w:sectPr w:rsidR="00EC3BBB" w:rsidRPr="00651722"><w:headerReference ns1:id="rId7" w:type="default" /><w:footerReference ns1:id="rId8" w:type="default" /><w:pgSz w:h="15840" w:w="12240" /><w:pgMar w:bottom="1440" w:footer="708" w:gutter="0" w:header="708" w:left="1440" w:right="1440" w:top="1440" /><w:cols w:space="708" /><w:docGrid w:linePitch="360" /></w:sectPr></w:body></w:document>') # noqa self.assert_equal_tree(expected_tree, get_document_body_part(document).getroot())
def mail(self): template = "a.docx" document = MailMerge(template) file = QFileDialog.getSaveFileName(self, 'Enregistrer Fichier', str(self.m.text()), ("Word file (*.docx)")) w = document.get_merge_fields() w = sorted(w) d = {} h = [0, 1, 2, 3, 4, 5] li = [] for x in range(self.tbl.rowCount()): for i in range(len(h)): d[w[i]] = self.tbl.item(x, h[i]).text() li.append(dict(d)) document.merge_pages(li) document.write(file[0])
def test_pages_with_multiple_pages(self): """ This also tests that merge_pages produces a multiple paged document, however this template already contains two pages. So the result should be 3 * 2 pages. """ document = MailMerge(path.join(path.dirname(__file__), 'test_merge_pages_paged.docx')) self.assertEqual(document.get_merge_fields(), {'fieldname'}) document.merge_pages([ {'fieldname': "xyz"}, {'fieldname': "abc"}, {'fieldname': "2b v ~2b"}, ]) with tempfile.TemporaryFile() as outfile: document.write(outfile) expected_tree = ElementTree.fromstring('<w:document xmlns:ns1="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"><w:body><w:p w:rsidP="007B2B98" w:rsidR="00507D2F" w:rsidRDefault="00651722"><w:r><w:t xml:space="preserve">This is a template for the </w:t></w:r><w:r><w:t>xyz</w:t></w:r><w:r><w:t xml:space="preserve"> merge_list test case</w:t></w:r><w:r w:rsidR="00507D2F"><w:t>, page 1</w:t></w:r></w:p><w:p w:rsidR="00507D2F" w:rsidRDefault="00507D2F"><w:r><w:br w:type="page" /></w:r></w:p><w:p w:rsidP="007B2B98" w:rsidR="00EC3BBB" w:rsidRDefault="00507D2F" w:rsidRPr="00651722"><w:r><w:lastRenderedPageBreak /><w:t xml:space="preserve">This is a template for the </w:t></w:r><w:r><w:t>xyz</w:t></w:r><w:r><w:t xml:space="preserve"> merge_list test case</w:t></w:r><w:r><w:t>, page 2</w:t></w:r><w:bookmarkStart w:id="0" w:name="_GoBack" /><w:bookmarkEnd w:id="0" /></w:p><w:sectPr w:rsidR="00EC3BBB" w:rsidRPr="00651722"><w:headerReference ns1:id="rId7" w:type="default" /><w:footerReference ns1:id="rId8" w:type="default" /><w:pgSz w:h="15840" w:w="12240" /><w:pgMar w:bottom="1440" w:footer="708" w:gutter="0" w:header="708" w:left="1440" w:right="1440" w:top="1440" /><w:cols w:space="708" /><w:docGrid w:linePitch="360" /></w:sectPr></w:body><w:br w:type="page" /><w:body><w:p w:rsidP="007B2B98" w:rsidR="00507D2F" w:rsidRDefault="00651722"><w:r><w:t xml:space="preserve">This is a template for the </w:t></w:r><w:r><w:t>abc</w:t></w:r><w:r><w:t xml:space="preserve"> merge_list test case</w:t></w:r><w:r w:rsidR="00507D2F"><w:t>, page 1</w:t></w:r></w:p><w:p w:rsidR="00507D2F" w:rsidRDefault="00507D2F"><w:r><w:br w:type="page" /></w:r></w:p><w:p w:rsidP="007B2B98" w:rsidR="00EC3BBB" w:rsidRDefault="00507D2F" w:rsidRPr="00651722"><w:r><w:lastRenderedPageBreak /><w:t xml:space="preserve">This is a template for the </w:t></w:r><w:r><w:t>abc</w:t></w:r><w:r><w:t xml:space="preserve"> merge_list test case</w:t></w:r><w:r><w:t>, page 2</w:t></w:r><w:bookmarkStart w:id="0" w:name="_GoBack" /><w:bookmarkEnd w:id="0" /></w:p><w:sectPr w:rsidR="00EC3BBB" w:rsidRPr="00651722"><w:headerReference ns1:id="rId7" w:type="default" /><w:footerReference ns1:id="rId8" w:type="default" /><w:pgSz w:h="15840" w:w="12240" /><w:pgMar w:bottom="1440" w:footer="708" w:gutter="0" w:header="708" w:left="1440" w:right="1440" w:top="1440" /><w:cols w:space="708" /><w:docGrid w:linePitch="360" /></w:sectPr></w:body><w:br w:type="page" /><w:body><w:p w:rsidP="007B2B98" w:rsidR="00507D2F" w:rsidRDefault="00651722"><w:r><w:t xml:space="preserve">This is a template for the </w:t></w:r><w:r><w:t>2b v ~2b</w:t></w:r><w:r><w:t xml:space="preserve"> merge_list test case</w:t></w:r><w:r w:rsidR="00507D2F"><w:t>, page 1</w:t></w:r></w:p><w:p w:rsidR="00507D2F" w:rsidRDefault="00507D2F"><w:r><w:br w:type="page" /></w:r></w:p><w:p w:rsidP="007B2B98" w:rsidR="00EC3BBB" w:rsidRDefault="00507D2F" w:rsidRPr="00651722"><w:r><w:lastRenderedPageBreak /><w:t xml:space="preserve">This is a template for the </w:t></w:r><w:r><w:t>2b v ~2b</w:t></w:r><w:r><w:t xml:space="preserve"> merge_list test case</w:t></w:r><w:r><w:t>, page 2</w:t></w:r><w:bookmarkStart w:id="0" w:name="_GoBack" /><w:bookmarkEnd w:id="0" /></w:p><w:sectPr w:rsidR="00EC3BBB" w:rsidRPr="00651722"><w:headerReference ns1:id="rId7" w:type="default" /><w:footerReference ns1:id="rId8" w:type="default" /><w:pgSz w:h="15840" w:w="12240" /><w:pgMar w:bottom="1440" w:footer="708" w:gutter="0" w:header="708" w:left="1440" w:right="1440" w:top="1440" /><w:cols w:space="708" /><w:docGrid w:linePitch="360" /></w:sectPr></w:body></w:document>') # noqa self.assert_equal_tree(expected_tree, get_document_body_part(document).getroot())
def doc_report(data): patient_data = data.get('patient') ekgs_data = data.get('ekgs') svg = data.get('svg') svg = '<svg' + svg.split('<svg')[-1] svg = svg.split('<path') svg = svg[0] + ''.join(['<path ' + 'style="fill:none;"' + p for p in svg[1:]]) with open(f"{path}/templates/img.svg", 'w') as f: f.write(svg) drawing = svg2rlg(f"{path}/templates/img.svg") sx = sy = 3 drawing.width, drawing.height = drawing.minWidth() * sx, drawing.height * sy drawing.scale(sx, sy) image_path = f"{path}/templates/img.jpg" renderPM.drawToFile(drawing, image_path, fmt="JPG") for item in ekgs_data: for key, value in item.items(): item[key] = str(value) document = MailMerge(doc_template) document.merge_pages([patient_data]) document.merge_rows('ekg_id', ekgs_data) filename = f"Отчет_по_пациенту_{patient_data.get('patient_id')}_(для_врача).docx" new_file_path = f"{path}/templates/{filename}" document.write(new_file_path) tpl = DocxTemplate(new_file_path) context = { 'Image': InlineImage(tpl, image_path, width=Mm(190)) } jinja_env = jinja2.Environment(autoescape=True) tpl.render(context, jinja_env) tpl.save(new_file_path) return filename
def __parse_document(self): for entry, recipient in enumerate(self.fields, start=0): # Create a document based off denoted template document = MailMerge(self.template) # Note the district as integer for file naming district = recipient["CongressionalDistrict"] # Convert Congressional District as string (must be in string form to be copied to word document) recipient["CongressionalDistrict"] = str( recipient["CongressionalDistrict"]) lastName = self.__getLastName(recipient["Name"]) # Merge documents allows you to pass a dictionary instead of going through each parameter settings document.merge_pages([recipient]) # Write the document to the corresponding folder based on Congressional District document.write( '/Users/tomshannon/Documents/GitHub/WSGC-Annual-Report-Mail-Merge-Tool/program_output/CD%d/%s_%s.docx' % (district, lastName, self.sheet_name))
def to_word(self, file_name): """ Word 파일로 저장한다. """ template = "output_word_template.docx" document = MailMerge(template) # sort db and save into sorted_db sorted_db_list = sorted(sorted(self.__db.items(), key=lambda x: x[0])) sorted_db = OrderedDict(sorted_db_list) merge_folder_item = {} for (a_file, a_file_data) in sorted_db.items(): merge_item = {} merge_item["SPS_File_Name"] = a_file_data[1][0] merge_item["SPS_File_MTime"] = a_file_data[1][2] merge_item["SPS_File_Hash"] = a_file_data[1][3] merge_item["SPS_File_Size"] = str(a_file_data[1][4]) merge_item["SPS_File_LOC"] = str(a_file_data[1][5]) try: merge_folder_item[a_file_data[1][1]].append(merge_item) except: merge_folder_item[a_file_data[1][1]] = [] merge_folder_item[a_file_data[1][1]].append(merge_item) all_merge = [] for (a_folder, a_merge_data) in merge_folder_item.items(): d = {} d["SPS_Folder_Name"] = a_folder d["SPS_File_Name"] = a_merge_data all_merge.append(d) document.merge_pages(all_merge) document.write(file_name)
def create_tsk_journal(datasrc: str, template: str, output: str, **kwargs): try: data = read_csv(datasrc) except FileNotFoundError as e: e.errno = -1 e.filename = datasrc e.strerror = 'ملف بيانات المذكرة غير موجود' return e if 'weekrange' in kwargs: filter = str(kwargs['weekrange'][0]) + '<= weeknum <= ' + str(kwargs['weekrange'][1]) weekplan = data.query(filter) else: weekplan = data fields = weekplan.to_dict('records') document = MailMerge(template) document.merge_pages(fields) document.write(output) # for windows only systems # is like double clicking on the file if 'openit' in kwargs and kwargs['openit']: os.startfile(output)
def show(): read_excel() new_folder() a = [] for var in v: a.append(var.get()) #模板文档 template0_ELB = r".\tem\ELB_template.docx" template1_ELCK = r".\tem\ELCK_template.docx" template2_ELF = r".\tem\ELF_template.docx" template3_ELM = r".\tem\ELM_template.docx" template4_ELN = r".\tem\ELN_template.docx" template5_ELP = r".\tem\ELP_template.docx" template6_ELQC = r".\tem\ELQC_template.docx" template7_ELW = r".\tem\ELW_template.docx" template8_ELHC = r".\tem\ELHC_template.docx" template9_ELSMT = r".\tem\ELSMT_template.docx" template10_ELT = r".\tem\ELT_template.docx" template11_ELY = r".\tem\ELY_template.docx" template12_FIL_H = r".\tem\ELFIL_film_h.docx" template13_FIL_X = r".\tem\ELFIL_film_x.docx" template14_ELREF = r".\tem\ELREF_template.docx" template15_ELPCB = r".\tem\ELPCB_template.docx" #主判断 if a[0] == 1: #ELB document0 = MailMerge(template0_ELB) cust_1 = { 'name': Pro_name, 'bianhao': str(tjp_num), 'custom_code': str(cus_num), 'time': '{:%Y-%m-%d}'.format(date.today()), 'pack_name': str(in_pack), } document0.merge_pages([cust_1]) document0.write("./{}/ELB{}-{}.docx".format(new_folder_name, tjp_num, Pro_name)) #需增加版本信息版本 if a[1] == 1: #ELCK document1 = MailMerge(template1_ELCK) cust_1 = { 'name': Pro_name, 'bianhao': str(tjp_num), 'P_name': pcb_name, 'time': '{:%Y-%m-%d}'.format(date.today()), 'pack_name': str(in_pack), } document1.merge_pages([cust_1]) document1.write("./{}/ELB{}-{}.docx".format(new_folder_name, tjp_num, Pro_name)) #需修改 if a[2] == 1: #ELF document2 = MailMerge(template2_ELF) cust_1 = { 'name': Pro_name, 'bianhao': str(tjp_num), 'P_name': pcb_name, 'R_name': ref_name, 'time': '{:%Y-%m-%d}'.format(date.today()), } document2.merge_pages([cust_1]) document2.write("./{}/ELF{}-{}.docx".format(new_folder_name, tjp_num, Pro_name)) #需修改 if a[3] == 1: #ELM document3 = MailMerge(template3_ELM) cust_1 = { 'name': Pro_name, 'bianhao': str(tjp_num), 'F_name': film_name, 'time': '{:%Y-%m-%d}'.format(date.today()) } document3.merge_pages([cust_1]) document3.write("./{}/ELM{}-{}.docx".format(new_folder_name, tjp_num, Pro_name)) #需修改 if a[4] == 1: #ELN document4 = MailMerge(template4_ELN) cust_1 = { 'name': Pro_name, 'bianhao': str(tjp_num), 'P_name': pcb_name, 'time': '{:%Y-%m-%d}'.format(date.today()) } document4.merge_pages([cust_1]) document4.write("./{}/ELN{}-{}.docx".format(new_folder_name, tjp_num, Pro_name)) #需修改 if a[5] == 1: #ELP document5 = MailMerge(template5_ELP) cust_1 = { 'name': Pro_name, 'bianhao': str(tjp_num), 'P_name': pcb_name, 'time': '{:%Y-%m-%d}'.format(date.today()) } document5.merge_pages([cust_1]) document5.write("./{}/ELP{}-{}.docx".format(new_folder_name, tjp_num, Pro_name)) if a[6] == 1: #ELQC document6 = MailMerge(template6_ELQC) cust_1 = { 'name': Pro_name, 'bianhao': str(tjp_num), 'time': '{:%Y-%m-%d}'.format(date.today()) } document6.merge_pages([cust_1]) document6.write("./{}/ELQC{}-{}.docx".format(new_folder_name, tjp_num, Pro_name)) #需修改 if a[7] == 1: #ELW document7 = MailMerge(template7_ELW) cust_1 = { 'name': Pro_name, 'bianhao': str(tjp_num), 'custom_code': str(cus_num), 'pcb_name': pcb_name, 'pcb_sup': pcb_sup, 'pin_head': pin_head, 'pin_name': pin_name, 'ref_name': ref_name, 'ref_texture': ref_texture, 'ref_ink': ref_ink, 'ref_sup': ref_sup, 'film_name': film_name, 'film_sup': film_sup, 'easy_tape': easy_tape, 'easy_sup': easy_sup, 'in_pack': in_pack, 'out_pack': out_pack, 'time': '{:%Y-%m-%d}'.format(date.today()) } document7.merge_pages([cust_1]) document7.write("./{}/ELW{}-{}.docx".format(new_folder_name, tjp_num, Pro_name)) #需修改 if a[8] == 1: #ELHC document8 = MailMerge(template8_ELHC) cust_1 = { 'name': Pro_name, 'bianhao': str(tjp_num), 'custom_code': str(cus_num), 'time': '{:%Y-%m-%d}'.format(date.today()) } document8.merge_pages([cust_1]) document8.write("./{}/ELHC{}-{}.docx".format(new_folder_name, tjp_num, Pro_name)) #需修改 if a[9] == 1: #ELSMT document9 = MailMerge(template9_ELSMT) cust_1 = { 'name': Pro_name, 'bianhao': str(tjp_num), 'P_name': pcb_name, 'pcb_sup': pcb_sup, 'time': '{:%Y-%m-%d}'.format(date.today()) } document9.merge_pages([cust_1]) document9.write("./{}/ELSMT{}-{}SMT加工技术文件.docx".format( new_folder_name, tjp_num, Pro_name)) #需修改 if a[10] == 1: #ELT document10 = MailMerge(template10_ELT) cust_1 = { 'name': Pro_name, 'bianhao': str(tjp_num), 'custom_code': str(cus_num), 'time': '{:%Y-%m-%d}'.format(date.today()) } document10.merge_pages([cust_1]) document10.write("./{}/ELT{}-{}.docx".format(new_folder_name, tjp_num, Pro_name)) if a[11] == 1: #ELY document11 = MailMerge(template11_ELY) cust_1 = { 'name': Pro_name, 'bianhao': str(tjp_num), 'P_name': pcb_name, 'ref_name': ref_name, 'time': '{:%Y-%m-%d}'.format(date.today()) } document11.merge_pages([cust_1]) document11.write("./{}/ELY{}-{}.docx".format(new_folder_name, tjp_num, Pro_name)) if a[12] == 1: #ELFIL_H 缺少film_texture document12 = MailMerge(template12_FIL_H) cust_1 = { 'name': Pro_name, 'bianhao': str(tjp_num), 'supper': film_sup, # 'texture':, 'time': '{:%Y-%m-%d}'.format(date.today()) } document12.merge_pages([cust_1]) document12.write("./{}/ELFIL{}面膜核准单({} {}).docx".format( new_folder_name, tjp_num, film_sup, Pro_name)) if a[13] == 1: #ELFIL_X document13 = MailMerge(template13_FIL_X) cust_1 = { 'name': Pro_name, 'bianhao': str(tjp_num), 'supper': film_sup, 'time': '{:%Y-%m-%d}'.format(date.today()) } document13.merge_pages([cust_1]) document13.write("./{}/ELFIL{}面膜限度样品({} {}).docx".format( new_folder_name, tjp_num, film_sup, Pro_name)) if a[14] == 1: #ELREF document14 = MailMerge(template14_ELREF) cust_1 = { 'name': Pro_name, 'bianhao': str(tjp_num), 'ref_name': ref_name, 'ref_texture': ref_texture, 'ref_sup': ref_sup, 'ref_ink': ref_ink, 'time': '{:%Y-%m-%d}'.format(date.today()), } document14.merge_pages([cust_1]) document14.write("./{}/ELREF{}塑壳材料核准单({}-{}).docx".format( new_folder_name, tjp_num, ref_sup, ref_name)) if a[15] == 1: #ELPCB document15 = MailMerge(template15_ELPCB) cust_1 = { 'name': Pro_name, 'bianhao': str(tjp_num), 'time': '{:%Y-%m-%d}'.format(date.today()), 'P_name': pcb_name, 'pcb_sup': pcb_sup } document15.merge_pages([cust_1]) document15.write("./{}/ELPCB{}线路板材料核准单({}-{}).docx".format( new_folder_name, tjp_num, pcb_sup, pcb_name)) # if a[16] ==1: #ELPF # document1 =MailMerge(template0_ELB) # cust_1 = {'name': '1', #需修改读入 # 'time': '{:%B %d,%Y}'.format(date.today()), # 'pack_name': '{:%Y-%m-%d}'.format(date.today()), # 'bianhao': '12342', # 'custom_code': '123' # } # document1.merge_pages([cust_1]) # document1.write("./{}.docx".format(12)) #需修改 message()
def choice_tem(): #模板清单 tem0_ZDS = r".\ds_tem\tem0_zds.docx" tem1_ZDD = r".\ds_tem\tem1_zdd.docx" tem2_ZDT = r".\ds_tem\tem2_zdt.docx" tem3_ZDF = r".\ds_tem\tem3_zdf.docx" tem4_ZDP_1 = r".\ds_tem\tem4_zdp_1.docx" tem5_ZDP_2 = r".\ds_tem\tem5_zdp_2.docx" tem6_ZDP_3 = r".\ds_tem\tem6_zdp_3.docx" tem7_ZDP_4 = r".\ds_tem\tem7_zdp_4.docx" #判断 sin_mul() #判断晶片单复数。 jx() #判断晶片极性 ink() #判断塑壳油墨 power() #判断功率 inch() #赋值尺寸 英寸 cob() #赋值空封实封 up_sm_colour = sm_colour.upper() #颜色大写 up_colour1 = co1.upper() if tem_choice == 'S': #选择ZDS模板 document = MailMerge(tem0_ZDS) #选择模板 cust_1 = {'name': e1.get(), 'date1': '{:%B %d,%Y}'.format(date.today()), 'date2': '{:%Y-%m-%d}'.format(date.today()), 'spec_no': str(e2.get()), 'engineer': str(e3.get()), 'n_colour': sm_colour, 'up_sm_colour': up_sm_colour, 'jixing': jixing, 'colour_1':co1, 'element' : co1_ele, 'ink': ref_ink, 'vft': str(co1_VF_t), 'vfm': str(co1_VF_m), 'bo': str(co1_bo), 'bbo': str(co1_bbo), 'upcolour1': up_colour1, 'power':str(pw), 'inc':inc, 'milli': millimeter } document.merge_pages([cust_1]) document.write("./{}.docx".format(e1.get())) elif tem_choice == 'D': #选择ZDD模板 document = MailMerge(tem1_ZDD) cust_1 = {'name': e1.get(), 'date1': '{:%B %d,%Y}'.format(date.today()), 'date2': '{:%Y-%m-%d}'.format(date.today()), 'spec_no': str(e2.get()), 'engineer': str(e3.get()), 'n_colour': sm_colour, 'up_sm_colour': up_sm_colour, 'jixing': jixing, 'colour_1':co1, 'element' : co1_ele, 'ink': ref_ink, 'vft': str(co1_VF_t), 'vfm': str(co1_VF_m), 'bo': str(co1_bo), 'bbo': str(co1_bbo), 'upcolour1': up_colour1, 'power': str(pw), 'inc': inc, 'milli': millimeter } document.merge_pages([cust_1]) document.write("./{}.docx".format(e1.get())) elif tem_choice == "T": #选择ZDT模板 document = MailMerge(tem2_ZDT) cust_1 = {'name': e1.get(), 'date1': '{:%B %d,%Y}'.format(date.today()), 'date2': '{:%Y-%m-%d}'.format(date.today()), 'spec_no': str(e2.get()), 'engineer': str(e3.get()), 'n_colour': sm_colour, 'up_sm_colour': up_sm_colour, 'jixing': jixing, 'colour_1':co1, 'element' : co1_ele, 'ink': ref_ink, 'vft': str(co1_VF_t), 'vfm': str(co1_VF_m), 'bo': str(co1_bo), 'bbo': str(co1_bbo), 'upcolour1': up_colour1, 'power': str(pw), 'inc': inc, 'milli': millimeter } document.merge_pages([cust_1]) document.write("./{}.docx".format(e1.get())) elif tem_choice == 'F': document = MailMerge(tem3_ZDF) cust_1 = {'name': e1.get(), 'date1': '{:%B %d,%Y}'.format(date.today()), 'date2': '{:%Y-%m-%d}'.format(date.today()), 'spec_no': str(e2.get()), 'engineer': str(e3.get()), 'n_colour': sm_colour, 'up_sm_colour': up_sm_colour, 'jixing': jixing, 'colour_1':co1, 'element' : co1_ele, 'ink': ref_ink, 'vft': str(co1_VF_t), 'vfm': str(co1_VF_m), 'bo': str(co1_bo), 'bbo': str(co1_bbo), 'upcolour1': up_colour1, 'power': str(pw), 'inc': inc, 'milli': millimeter } document.merge_pages([cust_1]) document.write("./{}.docx".format(e1.get())) elif tem_choice == 'P' and chip_len == 1: document = MailMerge(tem4_ZDP_1) cust_1 = {'name': e1.get(), 'date1': '{:%B %d,%Y}'.format(date.today()), 'date2': '{:%Y-%m-%d}'.format(date.today()), 'spec_no': e2.get(), 'engineer': e3.get(), 'wide': e4.get(), 'length': e5.get(), 'colour_1': co1, 'n_colour': sm_colour, 'up_sm_colour': up_sm_colour, 'jixing': jixing, 'cob_chip':cob_chip, 'element' : co1_ele, 'ink': ref_ink, 'vft': str(co1_VF_t), 'vfm': str(co1_VF_m), 'bo': str(co1_bo), 'bbo': str(co1_bbo), 'upcolour1': up_colour1, 'power': str(pw) } document.merge_pages([cust_1]) document.write("./{}.docx".format(e1.get())) elif tem_choice == 'P' and chip_len == 2: document = MailMerge(tem5_ZDP_2) cust_1 = {'name': e1.get(), 'date1': '{:%B %d,%Y}'.format(date.today()), 'date2': '{:%Y-%m-%d}'.format(date.today()), 'spec_no': e2.get(), 'engineer': e3.get(), 'wide': e4.get(), 'length': e5.get(), 'n_colour': sm_colour, 'up_sm_colour': up_sm_colour, 'jixing': jixing, # 'colour_1':co1, } document.merge_pages([cust_1]) document.write("./{}.docx".format(e1.get())) elif tem_choice == 'P' and chip_len == 3: document = MailMerge(tem6_ZDP_3) cust_1 = {'name': e1.get(), 'date1': '{:%B %d,%Y}'.format(date.today()), 'date2': '{:%Y-%m-%d}'.format(date.today()), 'spec_no': e2.get(), 'engineer': e3.get(), 'wide': e4.get(), 'length': e5.get(), 'n_colour': sm_colour, 'up_sm_colour': up_sm_colour, 'jixing': jixing, # 'colour_1':co1, } document.merge_pages([cust_1]) document.write("./{}.docx".format(e1.get())) elif tem_choice == 'P' and chip_len == 4: document = MailMerge(tem7_ZDP_4) cust_1 = {'name': e1.get(), 'date1': '{:%B %d,%Y}'.format(date.today()), 'date2': '{:%Y-%m-%d}'.format(date.today()), 'spec_no': e2.get(), 'engineer': e3.get(), 'wide': e4.get(), 'length': e5.get(), 'n_colour': sm_colour, 'up_sm_colour': up_sm_colour, 'jixing': jixing, # 'colour_1':co1, } document.merge_pages([cust_1]) document.write("./{}.docx".format(e1.get())) global template
def merge_file_fields(self, doc_path, inserted_fields, filename): dict = inserted_fields document = MailMerge(doc_path) document.merge_pages([dict]) document.write(filename) return filename
def response_sthlm(bidragcontainer): bidrag = bidragcontainer.bidrag persons = bidragcontainer.persons nr_persons = bidragcontainer.nr_persons_total persons = persons[:nr_persons] start = datetime.strptime(bidrag.dateFrom, DATE_FORMAT) end = datetime.strptime(bidrag.dateTo, DATE_FORMAT) nr_days = (end - start).days + 1 data = { 'kundnummer': bidrag.foreningsID, 'foreningsnamn': bidrag.kar, 'ledare': bidrag.contact, 'ledartelefon': bidrag.contactphone, 'ledaremail': bidrag.contactemail, 'lov': u'X' if bidrag.hikeduringbreak else u'\u2610', 'helg': u'\u2610' if bidrag.hikeduringbreak else u'X', 'lagerplats': bidrag.site, 'startdatum': bidrag.dateFrom, 'slutdatum': bidrag.dateTo, 'datum': date.today().strftime(DATE_FORMAT), 'firmatecknare': bidrag.firmatecknare, 'firmatecknartelefon': bidrag.firmatecknartelefon, 'antalmedlemmar': str(bidragcontainer.nr_young_persons), 'antaldagar': str(bidrag.days) # Should be total number of days } persons_per_page = 16 nr_pages, rest = divmod(nr_persons, persons_per_page) if rest > 0: nr_pages += 1 pages = [] for page_nr in range(nr_pages): page_data = copy.deepcopy(data) persons_in_page = persons[page_nr * persons_per_page:(page_nr + 1) * persons_per_page] for i, person in enumerate(persons_in_page): nr = i + 1 page_data['namn%d' % nr] = person.name page_data['pa%d' % nr] = person.postal_address page_data['ar%d' % nr] = str(person.year) pages.append(page_data) document = MailMerge('templates/lagerbidragsmall_sthlm.docx') document.merge_pages(pages) bytesIO = io.BytesIO() document.write(bytesIO) resultbytes = bytesIO.getvalue() doc_name = "Lagerbidrag_%s_%s_%s.docx" % (bidrag.site, bidrag.dateFrom, bidrag.dateTo) ascii_doc_name = doc_name.encode('ascii', 'ignore') response = make_response(resultbytes) response.headers[ 'Content-Type'] = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' response.headers[ 'Content-Disposition'] = 'attachment; filename=' + urllib.quote( ascii_doc_name) return response
} 고객_3 = { '등급': 'Bronze', '전화번호': '070-XXX-XXXX', '상호': '만나 청과', '구입총액': '200,000원', '배송한도': '70,000원', '주소': '대전시 123 아파트', '날짜': '{:%Y-%m-%d}'.format(date.today()), '할인': '2%', '수신자': '김유신' } document_2 = MailMerge(template_1) document_2.merge_pages([고객_1, 고객_2, 고객_3]) document_2.write('example2.docx') # Final Example includes a table with the sales history 구매이력 = [{ '물품': '사과', '가격': '1,000원', '수량': '25개', '금액': '25,000원' }, { '물품': '배', '가격': '2,000원', '수량': '10개', '금액': '20,000원' }, {
name_role.append(vars(inv)) cif = path2 + 'Template Contact Information Form.docx' outpath = 'path/to/script/output/' email_types = { 'noprior': noprior } # add prior email template and mid/start templates for d in name_role: welcome_email = email_types[d['etype']] welcome_letter = path2 + 'Template Welcome Letter-{}.docx'.format( d['template_flag']) doc_letter = MailMerge(welcome_letter) doc_cif = MailMerge(cif) name1 = outpath + d['letter'] name2 = outpath + d['cif'] print('Package complete for', d['Last_Name']) doc_letter.merge_pages([d]) doc_cif.merge_pages([d]) doc_letter.write(name1) doc_cif.write(name2) doc_letter.close() doc_cif.close() outlook = win32.Dispatch('outlook.application') recipient = d['Last_Name'] prot = d['Protocol_Number'] titl = d['Protocol_Full_Title'] cmt = d['Committee'] cmt_abrv = d['Committee_Type'] due_date = datetime.now() + timedelta(days=7) due_date_formatted = due_date.strftime('%d-%b-%y') document1 = Document(outpath + d['letter']) core_properties1 = document1.core_properties
# 템플릿 파일로 메일머지(mail-merge) 객체 만들기 document = MailMerge(template_filepath) # 수신자 정보 입력 - 딕셔너리 형태 respondent1 = { 'name': '이수민', 'fax': '031-777-7777', 'phone': '031-777-7700', 'date': '%s년 %s월 %s일' % (dt.now().year, dt.now().month, dt.now().day), 'title': '세금계산서 재발행 요청의 건', 'memo': '2019년 8월분', } respondent2 = { 'name': '박솔', 'fax': '032-333-0007', 'phone': '032-333-0800', 'date': '%s년 %s월 %s일' % (dt.now().year, dt.now().month, dt.now().day), 'title': '견적 문의', 'memo': '공급 예정일 포함', } # 수신자 리스트를 메일머지 객체에 전달 respondents_list = [respondent1, respondent2] document.merge_pages(respondents_list) # 메일머지 객체를 MS Word 문서로 저장하기 output_filepath = os.path.join(cwd, "output", "fax_cover_output_multi_pages.docx") document.write(output_filepath)
mrg_dt = {} count = 0 for i in row: count += 1 mrg_dt.update({str(object=count): str(object=i)}) # # File Output: # Using the previously saved variables each file is contructed with a unique file name using # a combination of the time of generation and the username of the user running the job, proceed # a set of fields defined in the configuration JSON file. # rt = datetime.datetime.now().strftime("%Y%m%d%H%M%S%f") filename = outputdir1 + row[1] + '_' + row[ 0] + '_' + rt + '_' + usr + outputtype1 document = MailMerge(templatefile) document.merge_pages([mrg_dt]) document.write(filename) print(filename) if os.path.exists(filename): print( "Document generation process sucessful, check the MERGE_REVIEW folder for the new file." ) # # Merge Error Handling: # In line with the opertunistic nature and narrow function set this script errors fall into 2 categories, # errors with the merge process or just not having a template. Errors with the merge process can occur, # if for one or more reasons, the process or actual command line running the script is interrupted or for # whatever in the rare occurance that their is incompatible formatting present in a template. Errors where # there is no template present are exactly that, the document code called does not have an associated template # in the template storage location defined above and is also not included in the file listing exceptions # that are "nontemplate" codes.
def response_sthlm(bidragcontainer): per_diem = 35 # Amount per scout per day 2021 h1_end = datetime(2021, 5, 31, 23, 59) bidrag = bidragcontainer.bidrag persons = bidragcontainer.persons nr_persons = bidragcontainer.nr_persons_total persons = persons[:nr_persons] start = datetime.strptime(bidrag.dateFrom, DATE_FORMAT) end = datetime.strptime(bidrag.dateTo, DATE_FORMAT) nr_days = (end - start).days + 1 if bidrag.zipCode != "": zcParts = bidrag.zipCode.split() postnr = "".join(zcParts[:-1]) # remove possible space in zip code postort = zcParts[-1] today = date.today() data = { 'organisationsnummer': bidrag.organisationsnummer, 'kontonummer': bidrag.kontonummer, 'kundnummer': bidrag.foreningsID, 'foreningsnamn': bidrag.kar, 'epost': bidrag.email, 'ledare': bidrag.contact, 'ledartelefon': bidrag.contactphone, 'ledaremail': bidrag.contactemail, 'lov': u'X' if bidrag.hikeduringbreak else u'\u2610', 'helg': u'\u2610' if bidrag.hikeduringbreak else u'X', 'lagerplats': bidrag.site, 'startdatum': bidrag.dateFrom, 'slutdatum': bidrag.dateTo, 'datum': today.strftime(DATE_FORMAT), 'dag': str(today.day), 'manad': str(today.month), 'ordforande': bidrag.firmatecknare, 'ordforandetelefon': bidrag.firmatecknartelefon, 'ordforandeemail': bidrag.firmatecknaremail, 'adress': bidrag.address, 'postnr': postnr, 'postort': postort, 'bankkonto': bidrag.account, 'antalmedlemmar': str(bidragcontainer.nr_young_persons), 'antaldagar': str(nr_days), # Should be total number of days 'summa': str(bidrag.days * per_diem) + ",00", 'H1': u'\u2610' if h1_end <= end else u'X', 'H2': u'\u2610' if h1_end > end else u'X' } period_data = generate_sthlm_period_data(today.year, today.month, today.day) data.update(period_data) persons_per_page = 25 nr_pages, rest = divmod(nr_persons, persons_per_page) if rest > 0: nr_pages += 1 pages = [] for page_nr in range(nr_pages): page_data = copy.deepcopy(data) persons_in_page = persons[page_nr * persons_per_page:(page_nr + 1) * persons_per_page] for i, person in enumerate(persons_in_page): nr = i + 1 page_data['namn%d' % nr] = person.name page_data['pa%d' % nr] = person.postal_address page_data['ar%d' % nr] = str(person.year) if person.days != nr_days: page_data['ad%d' % nr] = str(person.days) pages.append(page_data) document = MailMerge('templates/lagerbidragsmall_sthlm_2021.docx') document.merge_pages(pages) bytesIO = io.BytesIO() document.write(bytesIO) resultbytes = bytesIO.getvalue() doc_name = "Lagerbidrag_%s_%s_%s.docx" % (bidrag.site, bidrag.dateFrom, bidrag.dateTo) ascii_doc_name = doc_name.encode('ascii', 'ignore') response = make_response(resultbytes) response.headers[ 'Content-Type'] = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' response.headers[ 'Content-Disposition'] = 'attachment; filename=' + urllib.quote( ascii_doc_name) return response
from mailmerge import MailMerge from datetime import date template = "./template/word1_temp.docx" template_rec = "./template/word1_rec_temp.docx" # document = MailMerge(template) document_Multi = MailMerge(template) # print(document.get_merge_fields()) myDict = {22222: "222244444", 33333: "333366666"} myList = [] for key in myDict: document = MailMerge(template) document.merge(cust_id=str(key), cust_name=myDict[key]) myList.append({"cust_id": str(key), "cust_name": myDict[key]}) document.write('./word/' + myDict[key] + '.docx') # for key in myDict: document_Multi.merge_pages(myList) document_Multi.write('./word/combined.docx') document_rec = MailMerge(template_rec) document_rec.merge_rows('cust_id', myList) document_rec.write('./word/combined_rec.docx') document_test = MailMerge('./template/word1_test.docx') print(document_test.get_merge_fields())
'status': 'Bronze', 'city': 'Franklin', 'phone_number': '800-555-5511', 'Business': 'Tango Tops', 'zip': '55511', 'purchases': '$100,000', 'shipping_limit': '$2500', 'state': 'KY', 'address': '1234 Adams St', 'date': '{:%d-%b-%Y}'.format(date.today()), 'discount': '2%', 'recipient': 'Mr. Lincoln' } document_2 = MailMerge(template_1) document_2.merge_pages([cust_1, cust_2, cust_3]) document_2.write('example2.docx') # Final Example includes a table with the sales history sales_history = [{ 'prod_desc': 'Red Shoes', 'price': '$10.00', 'quantity': '2500', 'total_purchases': '$25,000.00' }, { 'prod_desc': 'Green Shirt', 'price': '$20.00', 'quantity': '10000', 'total_purchases': '$200,000.00' }, {
def create_folder(df): df_1 = df[['Provider_Fax', 'Organization_Name']] df_1 = df_1.drop_duplicates() templatename = 'D:Patient Reques.docx' main_path = 'D:' for index, row in df_1.iterrows(): # prepare the folder name full_folder_path = main_path + str( row['Organization_Name']) + '_' + str(row['Provider_Fax']) #create the folder os.mkdir(full_folder_path) #Copy the provider letter to folders #shutil.copy(provider_letter_file, full_folder_path) #create the excel file inside the folder df_2 = df.loc[(df['Provider_Fax'] == row['Provider_Fax']) & (df['Organization_Name'] == row['Organization_Name'])] df_2 = df_2.applymap(str) excel_folderpath = full_folder_path + '/' + str( row['Organization_Name']) + '_' + str( row['Provider_Fax']) + '.xlsx' writer = pd.ExcelWriter(excel_folderpath) df_2.to_excel(writer, index=False) writer.save() #look for template file Prepare the MailMerge File document = MailMerge(templatename) src = excel_folderpath book = xlrd.open_workbook(src) work_sheet = book.sheet_by_index(0) finalList = [] headers = [] num_rows = work_sheet.nrows current_row = 0 while current_row < num_rows: dictVal = dict() if (current_row == 0): for col in range(work_sheet.ncols): headers.append(work_sheet.cell_value(current_row, col)) else: for col in range(work_sheet.ncols): dictVal.update({ headers[col]: work_sheet.cell_value(current_row, col) }) if (current_row != 0): finalList.append(dictVal) current_row += 1 document.merge_pages(finalList) document.write(full_folder_path + '/' + str(row['Organization_Name']) + '_' + str(row['Provider_Fax']) + '.docx') in_file = os.path.abspath(full_folder_path + '/' + str(row['Organization_Name']) + '_' + str(row['Provider_Fax']) + '.docx') out_file = os.path.abspath('D:' + str(row['Organization_Name']) + '_' + str(row['Provider_Fax']) + '.pdf') create_pdf(in_file, out_file)