python自动化办公的一些小工具,函数组件

上一篇文章写了怎么自动化写一个月报,其中有很多很好用的函数组件,都被我封装为了函数,功能很好用。下面一一介绍:



1.添加汇总函数

输入一个pandas的数据框,就会返回一个加了汇总行的数据框。

def add_summary_row(df):numeric_df = df.select_dtypes(include=['number'])summary = numeric_df.sum()for col in df.columns.difference(numeric_df.columns):summary[col] = Noneresult_df = pd.concat([df, pd.DataFrame(summary).T])result_df.index = list(range(len(df.index))) + ['汇总']return result_df

 当然,全是数值型数据的情况下可以简化为:

df.groupby('资产类别名称').sum(numeric_only=True).T.assign(汇总=lambda x:x.sum(1)).T

2.锚点查找函数

例如我要找流动资产合计这一项,我可以用固定的位置来找,比如财务那边总把流动资产合计的值写在C26这个格子里面。

 但这种固定位置的查找可能有时候会有问题,比如财务那边突然需要加个标题,把资产负债表整体向下挪动了一行....那么C26这个位置就不对了。

所以绝对位置不准确,那我们就应该用相对位置,例如我发现我需要的这个值总是在‘流动资产合计’这个格子的右边两列的位置。那我先查找‘流动资产合计’这一项,然后右移动两格就是我需要的值了。

我称这种查找为锚定查找,找一个锚点,然后偏移找到自己需要的附近的值。这种相对查找的方法比绝对查找的方法出问题的可能性会小一点。

定义一个函数来进行锚点查找:

#资产负债表
wb = xlrd.open_workbook('***********2023年7月报表20230731.xls')
sheet = wb.sheet_by_index(0)   #wb.sheet_by_name('资产负债表')
def find_and_offset_xlrd(sheet, target_value, offset_row, offset_column):for row in range(sheet.nrows):for col in range(sheet.ncols):if str(sheet.cell(row, col).value).replace(' ','') == target_value:target_cell_value = sheet.cell(row + offset_row, col + offset_column).valuereturn target_cell_value
资产总计 = find_and_offset_xlrd(sheet, '资产总计', 0, 2)/10000

这个函数只针对xls文件,xlsx文件可以用下面的这个更高的函数:

wb = openpyxl.load_workbook('../周报/周报.xlsx',data_only=True)
ws = wb['汇总2']def find_and_offset_openpyxl(sheet, target_value, offset_row, offset_column, start_row=1, end_row=None, start_col=1, end_col=None):# If end_row or end_col is not specified, search until the last row or columnif end_row is None:end_row = sheet.max_rowif end_col is None:end_col = sheet.max_columnfor row in sheet.iter_rows(min_row=start_row, max_row=end_row, min_col=start_col, max_col=end_col):for cell in row:if str(cell.value).replace(' ', '') == target_value:target_cell = sheet.cell(row=cell.row+offset_row, column=cell.column+offset_column)return target_cell.value

 使用样例:

物贸营收=find_and_offset_openpyxl(ws, '物贸',1, 0,start_col=1, end_col=6)
物贸合同=find_and_offset_openpyxl(ws, '物贸',1, 0,start_col=7, end_col=12)

它可以限制查找范围,免得重复锚点造成混乱。


3.修改文字段落样式函数

def set_style(paragraphs,style=u'仿宋_GB2312',size=16):for run in paragraphs.runs:run.font.name = stylerun.font.size = Pt(size)r = run._element.rPr.rFontsr.set(qn("w:eastAsia"),style)

这个函数的功能是修改这个段落的字体和大小。因为我发现每次代码修改了word里面的东西后,它就会默认使用微软体文字.....使用我们需要把内容变成我们要的模板格式。我们需要这个函数,无论替换了什么内容,都需要它来变一下格式 擦屁股。

使用样例:

for i,paragraph in enumerate(doc.paragraphs):if '月,**公司资产总计约'in paragraph.text:paragraph.text =txt[0]print('0')   ; set_style(paragraph)

4.文字查找替换函数

#查找替换
def docx_replace(old_text, new_text, doc):for paragraph in doc.paragraphs:if old_text in paragraph.text:paragraph.text = paragraph.text.replace(old_text, new_text)set_style(paragraph)
docx_replace(f"截至{year}年{month-1}月", f"截至{year}年{month}月", doc)

这个函数类似于word里面的替换功能,把你要查找的文字,换为其他文字。


5.表格内容替换

我们对word表里面的数据也要进行修改,

直接替换里面的文字是不行的,还是因为样式会变成默认样式,和领导要求的模板不一样...

所以也需要设置一下。

定义一个表格替换函数,传入你要替换的格子,替换的文本,以及字体样式,大小,居中什么的

def set_cell_text(cell, text, font_name='仿宋_GB2312', font_size=12, alignment=WD_PARAGRAPH_ALIGNMENT.CENTER):cell.text = textfor paragraph in cell.paragraphs:paragraph.alignment = alignmentset_style(paragraph,font_name,font_size)

 使用样例:

table = doc.tables[0]
set_cell_text(table.cell(2, 3), str(df.loc['房屋建筑物','资产数量']), '仿宋_GB2312', 12)

这样相当于把这个表第3行第4列的格子里面的数据进行了替换,设置为仿宋体,12号,居中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/95384.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

慎投!新增4本期刊被“On Hold”!快自查

又新增了被标记的期刊!截至目前,小编从科睿唯安旗下的“Master Journal List”官网查到,本次新增4本ESCI期刊被标记,目前有8本SCIE期刊,1本SSCI期刊,13本ESCI期刊,共22本期刊被标记为“On Hold”…

c++游戏制作指南(四):c++实现数据的存储和读取(输入流fstream)

🍿*★,*:.☆( ̄▽ ̄)/$:*.★* 🍿 🍟欢迎来到静渊隐者的csdn博文,本文是c游戏制作指南的一部🍟 🍕更多文章请点击下方链接🍕 🍨 c游戏制作指南&#x1f3…

超声波传感器(HC-SR04)按时序图手撕驱动

目录 1、简介 2、传感器介绍 2.1 引脚介绍 2.2 时序图介绍 3、 需求与接线 3.1 任务需求 3.2 接线 4、Cubemax配置 4.1 SYS配置 4.2 RCC配置 4.3 时钟树配置 4.4 GPIO初始化 4.5 定时器配置 4.6 生成代码 5、 keil端代码编写 5.1 微妙函数封装 5.2 超声波驱动封装…

生信豆芽菜-差异基因富集分析

网址:http://www.sxdyc.com/enrichmentEnrich 该工具使用R 语言的clusterProfiler包对关键基因集进行GO和KEGG富集分析,注意这个的关键基因集可以是差异基因,WGCNA的module基因,也可以是表型相关的基因集 1、数据准备 准备一个基因…

SpringBoot系列之基于Jersey实现RESTFul风格文件上传API

前言 JAX-RS:JAX-RS是可以用可以用于实现RESTFul应用程序的JAVA API,给开发者提供了一系列的RESTFul注解Jersey:是基于JAX-RX API的实现框架,用于实现RESTful Web 服务的开源框架。 JAX-RX常用的注解: javax.ws.rs.Pa…

【网络编程·网络层】IP协议

目录 一、IP协议的概念 二、IP协议的报头 1、四位首部长度 2、16位总长度(解包) 3、8位协议(分用) 4、16位首部校验和 5、8位生存时间 6、32位源IP和32位目的IP 7、4位版本/8位服务类型 8、16位标识 9、3位标志 10、1…

IDEA 设置为护眼的豆沙绿

代码区域设置成护眼色 先打开 IDEA 的设置界面,然后按照下图按顺序店了设置就可以了 这个时候,可以看到,只有代码区域别成了护眼色,其他地方还是白的刺眼,我们来一个一个的解决掉 左侧的文件页修改为护眼色 还是先…

基于YOLOv8模型的五类动物目标检测系统(PyTorch+Pyside6+YOLOv8模型)

摘要:基于YOLOv8模型的五类动物目标检测系统可用于日常生活中检测与定位动物目标(狼、鹿、猪、兔和浣熊),利用深度学习算法可实现图片、视频、摄像头等方式的目标检测,另外本系统还支持图片、视频等格式的结果可视化与…

【Vue-Router】路由传参

1. query 传参 list.json {"data": [{"name": "面","price":300,"id": 1},{"name": "水","price":400,"id": 2},{"name": "菜","price":500,"…

uniapp+uview封装小程序请求

提要: uniapp项目引入uview库 此步骤不再阐述 1.创建环境文件 env.js: let BASE_URL;if (process.env.NODE_ENV development) {// 开发环境BASE_URL 请求地址; } else {// 生产环境BASE_URL 请求地址; }export default BASE_URL; 2.创建请求文件 该…

数据结构--算法的时间复杂度和空间复杂度

文章目录 算法效率时间复杂度时间复杂度的概念大O的渐进表示法计算实例 时间复杂度实例 常见复杂度对比例题 算法效率 算法效率是指算法在计算机上运行时所消耗的时间和资源。这是衡量算法执行速度和资源利用情况的重要指标。 例子: long long Fib(int N) {if(N …

OpenCV-Python中的图像处理-GrabCut算法交互式前景提取

OpenCV-Python中的图像处理-GrabCut算法交互式前景提取 Python-OpenCV中的图像处理-GrabCut算法交互式前景提取 Python-OpenCV中的图像处理-GrabCut算法交互式前景提取 cv2.grabCut(img: Mat, mask: typing.Optional[Mat], rect, bgdModel, fgdModel, iterCount, mode…) img…

华为云零代码新手教学-体验通过Astro Zero快速搭建微信小程序

您将会学到 您将学会如何基于Astro零代码能力,DIY开发,完成问卷、投票、信息收集、流程处理等工作,还能够在线筛选、分析数据。实现一站式快速开发个性化应用,体验轻松拖拽开发的乐趣。 您需要什么 环境准备 注册华为云账号、实…

基于Helm管理Kubernetes应用

Kubernetes部署方式 官方提供Kubernetes部署3种方式 minikube Minikube是一个工具,可以在本地快速运行一个单点的Kubernetes,尝试Kubernetes或日常开发的用户使用。不能用于生产环境。 官方文档:Install Tools | Kubernetes 二进制包 从…

如何从cpu改为gpu,pytorch,cuda

1.cmd输入nvcc -V 2.得到 cuda版本后,去pytorch官网 3.根据自己的cuda进行选择 4.复制上述链接,进入cmd 5.cmd中输入activate XXX,这里的"XXX"指代自己在工程中用到的环境 6.进入后,将刚才链接粘贴,回车等待下载结束 …

Linux 基础

巩固基础,砥砺前行 。 只有不断重复,才能做到超越自己。 能坚持把简单的事情做到极致,也是不容易的。 linux的目录结构 linux的文件系统采用树状的目录结构,在此结构的最上层是根目录“/”, 然后在此目录下再创建其他…

Mirror网络库 | 实战

此篇为下文,上篇:Mirror网络库 | 说明 一、官方实例说明 场景名说明AdditiveLevels场景为“关卡”,附加形式加载AdditiveScenes加载卸载附加场景Basic基础的连接/断开,消息发送Benchmark服务器1000“怪物”生成性能测试Benchmark…

IL汇编ldc指令学习

ldc指令是把值送到栈上, 说明如下, ldc.i4 将所提供的int32类型的值作为int32推送到计算堆栈上; ldc.i4.0 将数值0作为int32推送到计算堆栈上; ... ldc.i4.8 将数值8作为int32推送到计算堆栈上; ldc.i4.m1 将数值-…

【开源分享】在线客服系统搭建-基于php和swoole客服系统CRMchat(附源码完整搭建教程)...

CRMChat是一款开源的在线客服系统,后台管理使用thinkphp框架,消息通讯使用swoole扩展,现在我来部署搭建一下。 这是一款不可商用的开源客服系统,如果有商用需求可以访问我的网站:gofly.v1kf.com 域名解析 以阿里云为例…

WebRTC | ICE详解

目录 一、Candidate种类与优先级 二、ICE策略 1. iceServers 2. iceTransportPolicy 三、P2P连接 1.Nat类型 (1)完全锥型NAT (2)IP限制锥型NAT (3)端口限制锥型NAT (4)对称…