金融科技之高效办公(一):自动生成信托计划说明书

2023-10-10 09:50

本文主要是介绍金融科技之高效办公(一):自动生成信托计划说明书,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

金融科技之高效办公:自动生成信托计划说明书

    • 背景
    • 需求
    • 编写

背景

计算机极大地提高了人们的工作效率,但除了使用市场上成熟的软件外,金融业还有根据实际业务需要,自行编写提高办公效率的小工具的需求。

昨天下午实习公司给了个任务,说是比较着急:根据两个word文件段落的映射关系自动生成信托计划说明书。具体来讲,一个文件是尽调报告,里面有业务参与方的相关信息,信息按照特定的模板填入。另一个文件是计划说明书,也有特定的模板。

(所以这个项目其实没有太多内容,就是用Python将一个word文件中的指定段落复制到另一个word文件中指定位置。)

尽调报告:
在这里插入图片描述
说明书:
在这里插入图片描述
映射表:
在这里插入图片描述

需求

之前都是员工人工进行复制、粘贴,但公司体量较大,每天都要处理大量的合同,所以需要编写一个根据映射关系自动生成计划说明书的程序来提高办公效率。

编写

最终通过查资料,最终利用Python-docx库开发了一个可以将A文件中两个段落之间的内容(包括文字和表格)复制到B文件指定段落的后的程序。

因为第一次接触Python-docx,对很多接口的原理和细节不是很了解。Python-docx的原理好像是将Python-docx的结构转换成xml。去年数据有做过用Java处理xml的程序,但时间久了已经忘了…

下面直接给出源码:
因为第一次使用Python-docx,所有如果有不规范或者不简介的地方,请见谅并指出。
当然,中使用前要通过pip安装Python-docx.

from docx import Document
from docx.text.paragraph import Paragraph
from docx.oxml.text.paragraph import CT_P
from docx.oxml.table import CT_Tbl
from docx.table import Table
from copy import deepcopy
import pandas  as pddef copyText(filename,paratext,Para):document = Document(filename)paras=document.paragraphsindex=0if type(paratext)==str:print('copy:',paratext,Para.text)for para in paras:if para.text==paratext:index=paras.index(para)+1para=paras[index]else:print('copy:',Para.text,paratext.text)for para in paras:if  para.text== paratext.text:index = paras.index(para) + 1paratext.runs[0].drawing_lst:para = paras[index]newPara=para.insert_paragraph_before()for run in Para.runs:#复制内容(包括样式)newParaRun=newPara.add_run(run.text)newParaRun.bold = run.boldnewParaRun.italic = run.italicnewParaRun.underline = run.underlinenewParaRun.font.color.rgb = run.font.color.rgbnewParaRun.style.name = run.style.namenewPara.paragraph_format.alignment = Para.paragraph_format.alignmentnewPara.paragraph_format.first_line_indent = Para.paragraph_format.first_line_indentnewPara.paragraph_format.left_indent = Para.paragraph_format.left_indentnewPara.paragraph_format.right_indent = Para.paragraph_format.right_indentdocument.save(filename)def copyTable(filename,paratext,table):
#复制表格document = Document(filename)paras = document.paragraphsif type(paratext)==str:for para in paras:#print(para.text)if paratext == para.text :paragraph=paratbl, p = table._tbl, paragraph._pelse:for para in paras:# print(para.text)if paratext.text == para.text:paragraph = paratbl, p = table._tbl, paragraph._pnew_tbl = deepcopy(tbl)p.addnext(new_tbl)document.save(filename)def Copy_Contents_Between_ParaA_ParaB_to_ParaC(filename1, filename2,Paratext1,Paratext2,Paratext3):documentA = Document(filename1)paragraphs = documentA.paragraphs#所有的段落Paratext1 = Paratext1.encode('utf-8').decode('utf-8')for aPara in paragraphs:if Paratext1 == aPara.text :#匹配到了开始段落ele = aPara._p.getnext()breakwhile(True):#向后遍历if ele==None:breakif ele.tag == '':breakif isinstance(ele, CT_P):#是段落para = Paragraph(ele, documentA)if Paratext2 == para.text:breakcopyText(filename2, Paratext3, para)#复制表格if para.text!='':Paratext3=paraelif isinstance(ele, CT_Tbl):#是表格table=Table(ele,documentA)copyTable(filename2,Paratext3,table)#复制表格ele=ele.getnext()if __name__ == '__main__':data = pd.read_excel('尽调-计划说明书映射表.xlsx')for i in range(len(data['计划说明书(生成表)'])):Copy_Contents_Between_ParaA_ParaB_to_ParaC('数据来源-尽调报告.docx','生成的信托计划说明书.docx',data['尽调报告-开始段落'][i],data['尽调报告-结束段落'][i],data['计划说明书(生成表)'][i])

程序执行后生成的计划说明书:
在这里插入图片描述
可以看到,尽调报告中指定的数据以及被复制到计划说明书的指定位置了。

待解决的问题:
上面的程序可以复制文字和表格以及样式,但是无法复制图片。据了解,Python-docx没有提供提取指定位置的图片的接口(至少在官方手册中没有找到),所以需要二次开发,这就要去研究Python-docx的原理和一些xml的知识了。但因为时间有限(网课还是要看的,作业还是要写的),就把这个问题留给我的实习负责人了。
如果大佬们知道如何解决图片处理的问题,请不吝赐教。

这篇关于金融科技之高效办公(一):自动生成信托计划说明书的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/179660

相关文章

一文详解MySQL如何设置自动备份任务

《一文详解MySQL如何设置自动备份任务》设置自动备份任务可以确保你的数据库定期备份,防止数据丢失,下面我们就来详细介绍一下如何使用Bash脚本和Cron任务在Linux系统上设置MySQL数据库的自... 目录1. 编写备份脚本1.1 创建并编辑备份脚本1.2 给予脚本执行权限2. 设置 Cron 任务2

C++高效内存池实现减少动态分配开销的解决方案

《C++高效内存池实现减少动态分配开销的解决方案》C++动态内存分配存在系统调用开销、碎片化和锁竞争等性能问题,内存池通过预分配、分块管理和缓存复用解决这些问题,下面就来了解一下... 目录一、C++内存分配的性能挑战二、内存池技术的核心原理三、主流内存池实现:TCMalloc与Jemalloc1. TCM

MyBatis Plus 中 update_time 字段自动填充失效的原因分析及解决方案(最新整理)

《MyBatisPlus中update_time字段自动填充失效的原因分析及解决方案(最新整理)》在使用MyBatisPlus时,通常我们会在数据库表中设置create_time和update... 目录前言一、问题现象二、原因分析三、总结:常见原因与解决方法对照表四、推荐写法前言在使用 MyBATis

Python基于微信OCR引擎实现高效图片文字识别

《Python基于微信OCR引擎实现高效图片文字识别》这篇文章主要为大家详细介绍了一款基于微信OCR引擎的图片文字识别桌面应用开发全过程,可以实现从图片拖拽识别到文字提取,感兴趣的小伙伴可以跟随小编一... 目录一、项目概述1.1 开发背景1.2 技术选型1.3 核心优势二、功能详解2.1 核心功能模块2.

Python使用smtplib库开发一个邮件自动发送工具

《Python使用smtplib库开发一个邮件自动发送工具》在现代软件开发中,自动化邮件发送是一个非常实用的功能,无论是系统通知、营销邮件、还是日常工作报告,Python的smtplib库都能帮助我们... 目录代码实现与知识点解析1. 导入必要的库2. 配置邮件服务器参数3. 创建邮件发送类4. 实现邮件

基于Python构建一个高效词汇表

《基于Python构建一个高效词汇表》在自然语言处理(NLP)领域,构建高效的词汇表是文本预处理的关键步骤,本文将解析一个使用Python实现的n-gram词频统计工具,感兴趣的可以了解下... 目录一、项目背景与目标1.1 技术需求1.2 核心技术栈二、核心代码解析2.1 数据处理函数2.2 数据处理流程

Python实现自动化Word文档样式复制与内容生成

《Python实现自动化Word文档样式复制与内容生成》在办公自动化领域,高效处理Word文档的样式和内容复制是一个常见需求,本文将展示如何利用Python的python-docx库实现... 目录一、为什么需要自动化 Word 文档处理二、核心功能实现:样式与表格的深度复制1. 表格复制(含样式与内容)2

Python中bisect_left 函数实现高效插入与有序列表管理

《Python中bisect_left函数实现高效插入与有序列表管理》Python的bisect_left函数通过二分查找高效定位有序列表插入位置,与bisect_right的区别在于处理重复元素时... 目录一、bisect_left 基本介绍1.1 函数定义1.2 核心功能二、bisect_left 与

python如何生成指定文件大小

《python如何生成指定文件大小》:本文主要介绍python如何生成指定文件大小的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python生成指定文件大小方法一(速度最快)方法二(中等速度)方法三(生成可读文本文件–较慢)方法四(使用内存映射高效生成

Python使用FFmpeg实现高效音频格式转换工具

《Python使用FFmpeg实现高效音频格式转换工具》在数字音频处理领域,音频格式转换是一项基础但至关重要的功能,本文主要为大家介绍了Python如何使用FFmpeg实现强大功能的图形化音频转换工具... 目录概述功能详解软件效果展示主界面布局转换过程截图完成提示开发步骤详解1. 环境准备2. 项目功能结