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

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

相关文章

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

Redis实现高效内存管理的示例代码

《Redis实现高效内存管理的示例代码》Redis内存管理是其核心功能之一,为了高效地利用内存,Redis采用了多种技术和策略,如优化的数据结构、内存分配策略、内存回收、数据压缩等,下面就来详细的介绍... 目录1. 内存分配策略jemalloc 的使用2. 数据压缩和编码ziplist示例代码3. 优化的

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W

基于Redis自动过期的流处理暂停机制

《基于Redis自动过期的流处理暂停机制》基于Redis自动过期的流处理暂停机制是一种高效、可靠且易于实现的解决方案,防止延时过大的数据影响实时处理自动恢复处理,以避免积压的数据影响实时性,下面就来详... 目录核心思路代码实现1. 初始化Redis连接和键前缀2. 接收数据时检查暂停状态3. 检测到延时过

使用SpringBoot+InfluxDB实现高效数据存储与查询

《使用SpringBoot+InfluxDB实现高效数据存储与查询》InfluxDB是一个开源的时间序列数据库,特别适合处理带有时间戳的监控数据、指标数据等,下面详细介绍如何在SpringBoot项目... 目录1、项目介绍2、 InfluxDB 介绍3、Spring Boot 配置 InfluxDB4、I

C#高效实现Word文档内容查找与替换的6种方法

《C#高效实现Word文档内容查找与替换的6种方法》在日常文档处理工作中,尤其是面对大型Word文档时,手动查找、替换文本往往既耗时又容易出错,本文整理了C#查找与替换Word内容的6种方法,大家可以... 目录环境准备方法一:查找文本并替换为新文本方法二:使用正则表达式查找并替换文本方法三:将文本替换为图

Python如何实现高效的文件/目录比较

《Python如何实现高效的文件/目录比较》在系统维护、数据同步或版本控制场景中,我们经常需要比较两个目录的差异,本文将分享一下如何用Python实现高效的文件/目录比较,并灵活处理排除规则,希望对大... 目录案例一:基础目录比较与排除实现案例二:高性能大文件比较案例三:跨平台路径处理案例四:可视化差异报

Java整合Protocol Buffers实现高效数据序列化实践

《Java整合ProtocolBuffers实现高效数据序列化实践》ProtocolBuffers是Google开发的一种语言中立、平台中立、可扩展的结构化数据序列化机制,类似于XML但更小、更快... 目录一、Protocol Buffers简介1.1 什么是Protocol Buffers1.2 Pro