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

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

相关文章

AI一键生成 PPT

AI一键生成 PPT 操作步骤 作为一名打工人,是不是经常需要制作各种PPT来分享我的生活和想法。但是,你们知道,有时候灵感来了,时间却不够用了!😩直到我发现了Kimi AI——一个能够自动生成PPT的神奇助手!🌟 什么是Kimi? 一款月之暗面科技有限公司开发的AI办公工具,帮助用户快速生成高质量的演示文稿。 无论你是职场人士、学生还是教师,Kimi都能够为你的办公文

高效+灵活,万博智云全球发布AWS无代理跨云容灾方案!

摘要 近日,万博智云推出了基于AWS的无代理跨云容灾解决方案,并与拉丁美洲,中东,亚洲的合作伙伴面向全球开展了联合发布。这一方案以AWS应用环境为基础,将HyperBDR平台的高效、灵活和成本效益优势与无代理功能相结合,为全球企业带来实现了更便捷、经济的数据保护。 一、全球联合发布 9月2日,万博智云CEO Michael Wong在线上平台发布AWS无代理跨云容灾解决方案的阐述视频,介绍了

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

高效录音转文字:2024年四大工具精选!

在快节奏的工作生活中,能够快速将录音转换成文字是一项非常实用的能力。特别是在需要记录会议纪要、讲座内容或者是采访素材的时候,一款优秀的在线录音转文字工具能派上大用场。以下推荐几个好用的录音转文字工具! 365在线转文字 直达链接:https://www.pdf365.cn/ 365在线转文字是一款提供在线录音转文字服务的工具,它以其高效、便捷的特点受到用户的青睐。用户无需下载安装任何软件,只

pdfmake生成pdf的使用

实际项目中有时会有根据填写的表单数据或者其他格式的数据,将数据自动填充到pdf文件中根据固定模板生成pdf文件的需求 文章目录 利用pdfmake生成pdf文件1.下载安装pdfmake第三方包2.封装生成pdf文件的共用配置3.生成pdf文件的文件模板内容4.调用方法生成pdf 利用pdfmake生成pdf文件 1.下载安装pdfmake第三方包 npm i pdfma

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

poj 1287 Networking(prim or kruscal最小生成树)

题意给你点与点间距离,求最小生成树。 注意点是,两点之间可能有不同的路,输入的时候选择最小的,和之前有道最短路WA的题目类似。 prim代码: #include<stdio.h>const int MaxN = 51;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int P;int prim(){bool vis[MaxN];

poj 2349 Arctic Network uva 10369(prim or kruscal最小生成树)

题目很麻烦,因为不熟悉最小生成树的算法调试了好久。 感觉网上的题目解释都没说得很清楚,不适合新手。自己写一个。 题意:给你点的坐标,然后两点间可以有两种方式来通信:第一种是卫星通信,第二种是无线电通信。 卫星通信:任何两个有卫星频道的点间都可以直接建立连接,与点间的距离无关; 无线电通信:两个点之间的距离不能超过D,无线电收发器的功率越大,D越大,越昂贵。 计算无线电收发器D

hdu 1102 uva 10397(最小生成树prim)

hdu 1102: 题意: 给一个邻接矩阵,给一些村庄间已经修的路,问最小生成树。 解析: 把已经修的路的权值改为0,套个prim()。 注意prim 最外层循坏为n-1。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstri

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言