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

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

相关文章

浏览器插件cursor实现自动注册、续杯的详细过程

《浏览器插件cursor实现自动注册、续杯的详细过程》Cursor简易注册助手脚本通过自动化邮箱填写和验证码获取流程,大大简化了Cursor的注册过程,它不仅提高了注册效率,还通过友好的用户界面和详细... 目录前言功能概述使用方法安装脚本使用流程邮箱输入页面验证码页面实战演示技术实现核心功能实现1. 随机

在Golang中实现定时任务的几种高效方法

《在Golang中实现定时任务的几种高效方法》本文将详细介绍在Golang中实现定时任务的几种高效方法,包括time包中的Ticker和Timer、第三方库cron的使用,以及基于channel和go... 目录背景介绍目的和范围预期读者文档结构概述术语表核心概念与联系故事引入核心概念解释核心概念之间的关系

HTML5实现的移动端购物车自动结算功能示例代码

《HTML5实现的移动端购物车自动结算功能示例代码》本文介绍HTML5实现移动端购物车自动结算,通过WebStorage、事件监听、DOM操作等技术,确保实时更新与数据同步,优化性能及无障碍性,提升用... 目录1. 移动端购物车自动结算概述2. 数据存储与状态保存机制2.1 浏览器端的数据存储方式2.1.

SpringMVC高效获取JavaBean对象指南

《SpringMVC高效获取JavaBean对象指南》SpringMVC通过数据绑定自动将请求参数映射到JavaBean,支持表单、URL及JSON数据,需用@ModelAttribute、@Requ... 目录Spring MVC 获取 JavaBean 对象指南核心机制:数据绑定实现步骤1. 定义 Ja

一文详解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 数据处理流程