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

news2025/1/16 21:58:23

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



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] = None
        
    result_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).value
                return 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 column
    if end_row is None:
        end_row = sheet.max_row
    if end_col is None:
        end_col = sheet.max_column

    for 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 = style
        run.font.size = Pt(size)
        r = run._element.rPr.rFonts
        r.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 = text
    for paragraph in cell.paragraphs:
        paragraph.alignment = alignment
        set_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.coloradmin.cn/o/885049.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

利用HTTP代理实现请求路由

嘿,大家好!作为一名专业的爬虫程序员,我知道构建一个高效的分布式爬虫系统是一个相当复杂的任务。在这个过程中,实现请求的路由是非常关键的。今天,我将和大家分享一些关于如何利用HTTP代理实现请求路由的实用技巧&…

BUUCTF [MRCTF2020]Ezpop解题思路

题目代码 Welcome to index.php <?php //flag is in flag.php //WTF IS THIS? //Learn From https://ctf.ieki.xyz/library/php.html#%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96%E9%AD%94%E6%9C%AF%E6%96%B9%E6%B3%95 //And Crack It! class Modifier {protected $var;publi…

Vue3 —— computed 计算属性及源码学习

该文章是在学习 小满vue3 课程的随堂记录示例均采用 <script setup>&#xff0c;且包含 typescript 的基础用法 前言 本篇文章主要学习 computed 的 基本使用方式、简单购物车实战、源码理解 一、基本使用 computed 支持两种定义方式&#xff1a;选项式、函数式 1、选…

《安富莱嵌入式周报》第320期:键盘敲击声解码, 军工级boot设计,开源CNC运动控制器,C语言设计笔记,开源GPS车辆跟踪器,一键生成RTOS任务链表

周报汇总地址&#xff1a;嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 视频版&#xff1a; https://www.bilibili.com/video/BV1Cr4y1d7Mp/ 《安富莱嵌入式周报》第320期&#xff1a;键盘敲击…

HASH索引,AVL树,B树,B+树的区别?

1. 什么是 Hash 1.1 Hash 函数 Hash 本身其实是一个函数&#xff0c;又被称为散列函数&#xff0c;它可以大幅提高我们对数据的检索效率。因为它是散列的&#xff0c;所以在存储数据的时候&#xff0c;它也是无序的。 Hash 算法是通过某种确定性的算法(例如MD5&#xff0c;S…

恢复删除的文件,3个宝藏恢复方法分享!

在对电脑的操作过程中误删了文件怎么办&#xff1f;删除的文件还可以恢复吗&#xff1f;快救救孩子吧&#xff01;一大堆重要文件被不小心删除了&#xff0c;真的很无助啊&#xff01;” 在电脑逐渐成为人们工作和生活不可缺少的工具时&#xff0c;存储和删除文件也变得更为方便…

自动化安装系统(二)

利用PXE实现自动化安装 PXE简介 PXE&#xff1a;Preboot Excution Environment&#xff0c;预启动执行环境&#xff0c;是由Intel公司研发&#xff0c;基于Client/Server的网络模式&#xff0c;支持远程主机通过网络从远端服务器下载映像&#xff0c;并由此支持通过网络启动操…

iOS textView支持超链接跳转

将某些文字变成高量可以点击的超链接核心功能代码 attri.addAttribute(NSAttributedString.Key.link, value:NSURL.init(string: "dctt:p/userPrivacy.html")!, range: NSRange.init(location: s.count - 4, length: 4) )textView.linkTextAttributes [NSAttributed…

解密 AI 客服;在不同硬件设备上运行大型语言模型的可能性

&#x1f989; AI新闻 &#x1f680; 微软必应首席执行官称必应聊天优于OpenAI的GPT-4&#xff0c;但成本更高 摘要&#xff1a;微软必应的首席执行官米哈伊尔・帕拉欣表示&#xff0c;必应聊天表现优于OpenAI的GPT-4&#xff0c;但使用了更高成本的检索增强推理技术。必应聊…

C语言的使用技巧--在IO操作中的移位和快速配置

在WB32F103&#xff08;ARM cortex m3内核&#xff0c;96Mhz&#xff09;的gpio初始化中有一段代码&#xff0c;充分的结合了硬件特征并使用C语言的技巧来快速的配置对应的GPIO的功能&#xff0c;堪称经典和楷模&#xff0c;代码异常简洁&#xff0c;执行速度快&#xff0c;配置…

【Qt6】QWindow类可以做什么

原来的水文标题是“用 VS Code 搞 Qt6”&#xff0c;想想还是直接改为“Qt6”&#xff0c;反正这个用不用 VS Code 也能搞。虽然我知道大伙伴们都很讨厌 CMake&#xff0c;但毕竟这厮几乎成了 C 的玩家规范了。Qt 也算识大体&#xff0c;支持用 CMake 来构建程序。所以&#xf…

“心理健康人工智能产学研创新联盟”揭牌成立|深兰科技

8月14日上午&#xff0c;“2023树洞救援年会”在上海举行&#xff0c;会上举行了“心理健康人工智能产学研创新联盟”的签约和揭牌仪式。“树洞行动救援团”创始人深兰科技科学院智能科学首席科学家、荷兰阿姆斯特丹自由大学人工智能系终身教授黄智生&#xff0c;深兰科技集团创…

ElementUI 树形表格的使用以及表单嵌套树形表格的校验问题等汇总

目录 一、树形表格如何添加序号体现层级关系 二、树形表格展开收缩图标位置放置&#xff0c;设置指定列 三、表单嵌套树形表格的校验问题以及如何给校验rules传参 普通表格绑定如下&#xff1a;这种方法只能校验表格的第一层&#xff0c;树形需要递归设置子级节点prop。 树…

RFID如何在汽车混流生产中进行车辆跟踪?

在汽车混流生产中&#xff0c;RFID技术可以对每个车辆进行唯一标识&#xff0c;从而实现车辆生产全程跟踪。实时确定车辆的位置、状态和生产过程&#xff0c;生产管理系统就能够对生产流程进行实时监控和管理&#xff0c;及时发现和解决问题&#xff0c;提高生产效率和质量。 焊…

SpringBoot之HandlerInterceptor拦截器的使用

&#x1f600;前言 本篇博文是关于拦截器-HandlerInterceptor的使用&#xff0c;希望你能够喜欢 &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以帮助到大家&#xff0c;您的满意是我的动…

对发卡涡(Hairpin vortex)初步认识

对发卡涡&#xff08;Hairpin vortex&#xff09;初步认识 Hairpin vortex是一种在流体动力学中常见的涡旋结构。它通常形成在流体中的强烈剪切区域&#xff0c;例如在河流、管道或飞机翼等流体流动中。Hairpin vortex的形状类似于一个发夹弯曲的形状&#xff0c;因此得名&…

(7)(7.1) 使用航点和事件规划任务

文章目录 前言 7.1.1 设置Home位置 7.1.2 视频&#xff1a;制作并保存多路点任务 7.1.3 视频&#xff1a;加载已保存的多航点任务 7.1.4 使用说明 7.1.5 提示 7.1.6 自动网格 7.1.7 任务指令 7.1.8 任务结束 7.1.9 任务重置 7.1.10 MIS_OPTIONS 7.1.11 任务再出发 …

【三维重建】【深度学习】【数据集】基于COLMAP制作自己的NeuS(DTU格式)数据集

【三维重建】【深度学习】【数据集】基于COLMAP制作自己的NeuS(DTU格式)数据集 提示:最近开始在【三维重建】方面进行研究,记录相关知识点,分享学习中遇到的问题已经解决的方法。 文章目录 【三维重建】【深度学习】【数据集】基于COLMAP制作自己的NeuS(DTU格式)数据集前言下载…

浅析3D打印技术

目录 1.3D打印的概念 2.3D打印的发展过程 3.3D打印的应用领域 4.3D打印带来的技术变革 1.3D打印的概念 3D打印是一种制造技术&#xff0c;它使用逐层堆叠材料的方式来创建物体。与传统的加工方法相比&#xff0c;3D打印具有很多优势。 在3D打印中&#xff0c;一种叫做CAD&am…

深度解读智能化编码的技术架构与实践案例

向更智能、更兼容演进。 陈高星&#xff5c;演讲者 大家好&#xff0c;我是阿里云视频云的陈高星&#xff0c;今天和大家分享的主题是“多”维演进&#xff1a;智能化编码架构的研究与实践。 本次分享分为四部分&#xff1a;首先是视频编码与增强方向的业界趋势&#xff0c;其…