办公常用自动化工具

自动化办公工具说明文档

代码全部在底部。

文件批量重命名工具 (file_renamer.py)

功能概述

file_renamer.py 是一个用于批量重命名文件的工具,可以根据自定义规则为文件重命名,支持按日期、序号、原文件名等格式进行命名。

主要功能

  • 支持按文件类型过滤(只处理特定扩展名文件)
  • 支持添加日期前缀
  • 防止文件名重复(自动添加序号后缀)
  • 自定义命名模式,支持多种变量替换

使用流程图

开始
获取文件夹中所有文件
是否有文件类型过滤?
只保留指定类型文件
保留所有文件
文件排序
遍历每个文件
构建新文件名
是否添加日期前缀?
添加日期前缀
保持原新文件名
确保文件名有扩展名
新文件名是否已存在?
添加序号后缀
执行重命名
是否还有文件?
结束

使用示例

# 将图片文件重命名为"照片_20230601_001.jpg"格式
batch_rename(folder_path="D:/文档/图片",pattern="照片_{date}_{index}",file_types=['.jpg', '.png', '.jpeg'],add_date=True
)

依赖项

  • os
  • re
  • datetime
  • pathlib

Excel自动处理工具 (excel_processor.py)

功能概述

excel_processor.py 提供Excel文件的自动化处理功能,包括数据分析、格式化和报表生成。

主要功能

  • 读取Excel源文件数据
  • 执行数据计算和汇总
  • 生成新的Excel工作表
  • 应用专业的格式设置(字体、颜色、对齐方式)
  • 自动调整列宽

使用流程图

开始
读取源Excel数据
执行数据处理和计算
创建新Excel工作簿
写入详细数据表
写入汇总表
格式化表格
添加标题和合并单元格
设置表头样式
调整列宽
保存工作簿
结束

使用示例

generate_report(source_file="销售数据.xlsx",output_file="销售报表.xlsx",report_title="2023年第一季度销售报表"
)

依赖项

  • pandas
  • openpyxl
  • datetime

邮件自动发送工具 (email_sender.py)

功能概述

email_sender.py 实现了邮件的自动发送功能,支持HTML模板、动态数据和文件附件。

主要功能

  • 使用HTML模板生成邮件内容
  • 支持动态数据渲染(使用Jinja2模板引擎)
  • 发送带附件的邮件
  • 支持多收件人
  • 使用环境变量存储敏感信息

使用流程图

开始
加载环境变量
创建邮件对象
设置发件人和收件人
设置邮件主题
加载HTML模板
使用模板数据渲染HTML
添加HTML内容到邮件
是否有附件?
添加附件到邮件
连接SMTP服务器
发送邮件
关闭连接
结束

使用示例

send_email_with_template(to_addresses=["收件人@example.com"],subject="月度销售报告",template_file="templates/monthly_report.html",template_data={"name": "张经理","department": "销售部","month": "五月","sales": 125000,"target": 100000,"products": [{"name": "产品A", "sales": 45000},{"name": "产品B", "sales": 30000},{"name": "产品C", "sales": 50000}]},attachments=["reports/sales_may.xlsx", "reports/chart.pdf"]
)

依赖项

  • smtplib
  • email.mime
  • jinja2
  • python-dotenv

企业微信消息监控工具 (wechat_monitor.py)

功能概述

wechat_monitor.py 实现了企业微信消息的监控和自动回复功能,可用于工作流程自动化。

主要功能

  • 接收企业微信消息回调
  • 根据关键词自动回复和处理消息
  • 转发特定消息给管理员
  • 调用外部功能(如报表生成)

使用流程图

开始
配置企业微信参数
创建Flask应用
启动Web服务
等待接收消息
收到消息回调
消息类型是否为文本?
解析消息内容
消息是否包含'请假'?
回复请假确认
转发给管理员
消息是否包含'报表'?
回复报表生成中
调用报表生成函数
发送默认回复

使用示例

# 配置企业微信参数
CORP_ID = "your_corp_id"
CORP_SECRET = "your_corp_secret"
AGENT_ID = "your_agent_id"# 启动应用
app.run(host='0.0.0.0', port=5000, debug=True)

依赖项

  • flask
  • requests
  • logging
  • json

系统集成建议

以上四个模块可以组合使用,实现完整的办公自动化流程:

收到报表请求
生成报表
整理命名
发送结果
企业微信消息监控
Excel处理工具
文件批量重命名
邮件自动发送

综合应用场景

  1. 员工通过企业微信发送"报表请求"
  2. 系统自动生成Excel报表
  3. 批量处理相关文件并规范命名
  4. 通过邮件将处理结果发送给请求者
  5. 通知管理员处理完成

人工操作通常需要数小时的工作,通过此自动化系统可以在几分钟内完成!
文件重命名

import os
import re
import datetime
from pathlib import Pathdef batch_rename(folder_path, pattern, file_types=None, add_date=False):"""批量重命名文件参数:folder_path: 文件夹路径pattern: 命名模式,如"doc_{index}_{original}"file_types: 需处理的文件类型列表,如['.jpg', '.png']add_date: 是否添加日期前缀"""files = [f for f in os.listdir(folder_path) if os.path.isfile(os.path.join(folder_path, f))]# 文件类型过滤if file_types:files = [f for f in files if any(f.lower().endswith(ext) for ext in file_types)]# 按文件名排序files.sort()today = datetime.datetime.now().strftime('%Y%m%d')for idx, filename in enumerate(files, 1):# 获取文件扩展名file_path = os.path.join(folder_path, filename)name, ext = os.path.splitext(filename)# 构建新文件名new_name = pattern.format(index=f"{idx:03d}", original=name,ext=ext,date=today)if add_date:new_name = f"{today}_{new_name}"# 确保新文件名有扩展名if not new_name.endswith(ext):new_name += extnew_path = os.path.join(folder_path, new_name)# 防止文件名重复counter = 1while os.path.exists(new_path):new_name = f"{new_name.replace(ext, '')}_{counter}{ext}"new_path = os.path.join(folder_path, new_name)counter += 1os.rename(file_path, new_path)print(f"已重命名: {filename} -> {new_name}")# 使用示例
if __name__ == "__main__":batch_rename(folder_path="D:/文档/图片",pattern="照片_{date}_{index}",file_types=['.jpg', '.png', '.jpeg'],add_date=True) 

Excel自动处理工具

import pandas as pd
import openpyxl
from openpyxl.styles import Font, PatternFill, Alignment
import datetimedef generate_report(source_file, output_file, report_title="月度报表"):"""生成格式化的Excel报表"""# 读取源数据df = pd.read_excel(source_file)# 数据处理df['总价'] = df['单价'] * df['数量']summary = df.groupby('类别')['总价'].sum().reset_index()# 创建一个新的Excel工作簿writer = pd.ExcelWriter(output_file, engine='openpyxl')# 写入主数据df.to_excel(writer, sheet_name='详细数据', index=False)summary.to_excel(writer, sheet_name='汇总', index=False)# 获取工作簿对象workbook = writer.book# 格式化详细数据表ws = workbook['详细数据']# 添加标题ws.insert_rows(1)ws.merge_cells('A1:E1')ws['A1'] = f"{report_title} - {datetime.datetime.now().strftime('%Y-%m-%d')}"ws['A1'].font = Font(size=16, bold=True)ws['A1'].alignment = Alignment(horizontal='center')# 设置表头样式header_row = 2for cell in ws[header_row]:cell.font = Font(bold=True)cell.fill = PatternFill(start_color="DDEBF7", end_color="DDEBF7", fill_type="solid")# 调整列宽for column in ws.columns:max_length = 0column_letter = column[0].column_letterfor cell in column:if cell.value:max_length = max(max_length, len(str(cell.value)))adjusted_width = (max_length + 2)ws.column_dimensions[column_letter].width = adjusted_width# 保存工作簿writer.close()print(f"报表已生成: {output_file}")# 使用示例
if __name__ == "__main__":generate_report(source_file="销售数据.xlsx",output_file="销售报表.xlsx",report_title="2023年第一季度销售报表") 

自动发送邮件工具

import smtplib
import os
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
from jinja2 import Template
from dotenv import load_dotenv# 加载环境变量
load_dotenv()def send_email_with_template(to_addresses, subject, template_file, template_data, attachments=None):"""发送带有模板和附件的邮件参数:to_addresses: 收件人列表subject: 邮件主题template_file: HTML模板文件路径template_data: 模板数据字典attachments: 附件文件路径列表"""# 获取邮箱配置smtp_server = os.getenv("SMTP_SERVER")smtp_port = int(os.getenv("SMTP_PORT", 587))email_address = os.getenv("EMAIL_ADDRESS")email_password = os.getenv("EMAIL_PASSWORD")# 创建邮件对象msg = MIMEMultipart()msg['From'] = email_addressif isinstance(to_addresses, list):msg['To'] = ', '.join(to_addresses)else:msg['To'] = to_addressesmsg['Subject'] = subject# 渲染HTML模板with open(template_file, 'r', encoding='utf-8') as f:template_content = f.read()template = Template(template_content)html = template.render(**template_data)# 添加HTML内容msg.attach(MIMEText(html, 'html'))# 添加附件if attachments:for file_path in attachments:if os.path.exists(file_path):with open(file_path, "rb") as f:file_name = os.path.basename(file_path)part = MIMEApplication(f.read(), Name=file_name)part['Content-Disposition'] = f'attachment; filename="{file_name}"'msg.attach(part)# 发送邮件try:server = smtplib.SMTP(smtp_server, smtp_port)server.starttls()  # 加密连接server.login(email_address, email_password)server.sendmail(email_address, to_addresses, msg.as_string())server.quit()print(f"邮件已成功发送给 {to_addresses}")return Trueexcept Exception as e:print(f"发送邮件失败: {str(e)}")return False# 使用示例
if __name__ == "__main__":# 准备邮件数据recipients = ["收件人@example.com"]email_subject = "月度销售报告"# 模板数据data = {"name": "张经理","department": "销售部","month": "五月","sales": 125000,"target": 100000,"products": [{"name": "产品A", "sales": 45000},{"name": "产品B", "sales": 30000},{"name": "产品C", "sales": 50000}]}# 发送邮件send_email_with_template(recipients,email_subject,"templates/monthly_report.html",data,["reports/sales_may.xlsx", "reports/chart.pdf"]) 

企业微信消息监控

import json
import time
import requests
import logging
from flask import Flask, request, jsonify# 配置日志
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)# 企业微信配置
CORP_ID = "your_corp_id"
CORP_SECRET = "your_corp_secret"
AGENT_ID = "your_agent_id"
TOKEN = "your_token"
ENCODING_AES_KEY = "your_encoding_aes_key"# 创建Flask应用
app = Flask(__name__)def get_access_token():"""获取企业微信API访问令牌"""url = f"https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={CORP_ID}&corpsecret={CORP_SECRET}"response = requests.get(url)data = response.json()if data["errcode"] == 0:return data["access_token"]else:logger.error(f"获取access_token失败: {data}")return Nonedef send_message(user_id, content):"""发送企业微信消息"""access_token = get_access_token()if not access_token:return Falseurl = f"https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={access_token}"data = {"touser": user_id,"msgtype": "text","agentid": AGENT_ID,"text": {"content": content},"safe": 0}response = requests.post(url, json=data)result = response.json()if result["errcode"] == 0:logger.info(f"消息发送成功: {user_id}")return Trueelse:logger.error(f"消息发送失败: {result}")return False# 接收企业微信消息回调
@app.route('/wechat', methods=['POST'])
def wechat_callback():data = request.jsonlogger.info(f"收到企业微信消息: {data}")# 处理文本消息if data.get("MsgType") == "text":from_user = data.get("FromUserName")content = data.get("Content", "")# 根据关键词处理消息if "请假" in content:# 处理请假申请reply = "已收到您的请假申请,正在处理中..."send_message(from_user, reply)# 转发给管理员send_message("manager_user_id", f"收到{from_user}的请假申请:{content}")elif "报表" in content:# 处理报表请求reply = "报表生成中,稍后将发送给您..."send_message(from_user, reply)# 这里可以调用报表生成函数# generate_report(...)else:# 默认回复send_message(from_user, "您的消息已收到,将尽快处理。")return jsonify({"errcode": 0})if __name__ == "__main__":app.run(host='0.0.0.0', port=5000, debug=True) 

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

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

相关文章

【网络协议详解】——QOS技术(学习笔记)

目录 QoS简介 QoS产生的背景 QoS服务模型 基于DiffServ模型的QoS组成 MQC简介 MQC三要素 MQC配置流程 优先级映射配置(DiffServ域模式) 优先级映射概述 优先级映射原理描述 优先级映射 PHB行为 流量监管、流量整形和接口限速简介 流量监管 流量整形 接口限速…

处理动态分页:自动翻页与增量数据抓取策略-数据议事厅

一、案例场景 Lily(挥舞着数据报表):“用户反馈我们的股票舆情分析总是缺失最新跟帖!这些动态分页像狡猾的狐狸,每次抓取都漏掉关键数据!” 小王(调试着爬虫代码):“传…

练习-纪律问题(幂运算)

问题描述 一年级一班有 n 个小朋友坐成一排,统计了这些小朋友的爱好后,老师得知了他们一共有 m 种爱好,每个小朋友会拥有这些爱好中的一种。 如果相邻的小朋友爱好相同,那么他们上课时就会忍不住悄悄说话,违反课堂纪…

《基于机器学习的DDoS攻击检测与防御系统设计与实现》开题报告

目录 一、课题的研究目的和意义 1.1课题背景 1.2课题目的 (1)提高DDoS攻击检测的准确性 (2)加强DDoS攻击的防御能力 (3)提升网络安全防护的技术水平 1.3课题意义 (1)理论意义…

【Java项目】基于JSP的幼儿教育管理系统

【Java项目】基于JSP的幼儿教育管理系统 技术简介:采用JSP技术、B/S结构、MYSQL数据库等实现。 系统简介:幼儿教育管理系统,主要的模块包括查看;管理员;个人中心、用户管理、学生信息管理、班级信息管理、缴费信息管理…

如何将本地已有的仓库上传到gitee (使用UGit)

1、登录Gitee。 2、点击个人头像旁边的加号,选择新建仓库: 3、填写仓库相关信息 4、复制Gitee仓库的地址 5、绑定我们的本地仓库与远程仓库 6、将本地仓库发布(推送)到远程仓库: 注意到此处报错&#xff…

限制数据库字段长度的公用写法:length和like和rlike对于限制字段长度的原理与区别

关于数据库字段长度的探索: length和like和rlike对于限制字段长度的原理与区别lengthlike、rlikelike的_下划线通配符rlike的正则表达式regexp、regexp_like的正则表达式 length和like和rlike对于限制字段长度的原理与区别 探索之前先简单介绍下: length函数可以返…

LabVIEW cRIO中CSV文件的读取

在LabVIEW cRIO中读取CSV文件,需通过文件传输、路径配置、数据解析等步骤实现。本文详细说明如何通过代码读取本地存储的CSV文件,并探讨直接通过对话框选择文件的可行性及替代方案。 一、CSV文件传输至cRIO本地存储 1. 使用NI MAX文件管理 步骤&#xf…

DeepSeek-R1 论文阅读总结

1. QA问答(我的笔记) Q1: DeepSeek如何处理可读性问题? 通过构建冷启动数据(数千条长CoT数据)微调基础模型,结合多阶段训练流程(RL训练、拒绝采样生成SFT数据),并优化输…

prometheus的动态发现(基于文件和consul)

prometheus的配置参考:https://prometheus.io/docs/prometheus/2.53/configuration/configuration/ 没有使用动态配置前,需要在 prometheus.yml 这个配置文件中创建数据采集任务,然后重新加载服务。 如果把采集job剥离出去,写在…

安卓逆向魔改版 Base64 算法还原

版权归作者所有,如有转发,请注明文章出处:https://cyrus-studio.github.io/blog/ 目标 app 简介 可以看到 app 中共有 4 种 Base64 算法。选中一个随机字符串,可以选择其中一种算法进行编码解码。 app地址:https://gi…

CI/CD—GitLab部署

GitLab简介: GitLab 是一个用于代码托管和软件开发协作的平台,在全球开发者社区及企业中应用广泛,以下是对它的详细介绍: 主要功能 代码托管:提供了基于 Git 的代码仓库管理功能,支持创建、克隆、推送、…

采集OPCUA/S7

需求:采集OPCUA服务数据 采用:KEPServerEX6获取OPCUA服务数据 1.新建甬道3 2.驱动程序选择:OPC UA client 3.设置UA服务器-端点URL:opc.tcp://ip:502 安装教程:https://blog.csdn.net/weixin_41425107/article/detai…

3.12代码随想录第十五天打卡

654.最大二叉树 (1)题目描述: (2)解题思路: class Solution { public:TreeNode* constructMaximumBinaryTree(vector<int>& nums) {TreeNode* node new TreeNode(0);if (nums.size() 1) {node->val nums[0];return node;}// 找到数组中最大的值和对应的下标…

安全左移动赋能:灵脉IAST交互式应用安全测试平台

左移的安全赋能 Earlier Security Empowerment 悬镜灵脉IAST灰盒安全测试平台作为国内领先的交互式应用安全测试平台&#xff0c;透明集成于现有IT流程&#xff0c;自动化完成业务代码上线前安全测试&#xff0c;重点覆盖90%以上中高危漏洞&#xff0c;防止应用带病上线&…

Linux下学【MySQL】常用函数助你成为数据库大师~(配sql+实操图+案例巩固 通俗易懂版~)

绪论​ 每日激励&#xff1a;“唯有努力&#xff0c;才能进步” 绪论​&#xff1a; 本章是MySQL中常见的函数&#xff0c;利用好函数能很大的帮助我们提高MySQL使用效率&#xff0c;也能很好处理一些情况&#xff0c;如字符串的拼接&#xff0c;字符串的获取&#xff0c;进制…

波特率、比特率、传信率、传码率......

去年搞过一段时间的无线通信&#xff0c;当时我脑子里真的是一团乱麻&#xff0c;本身咱也不是学通信的&#xff0c;咱是学机械出身的&#xff0c;后面又搞电&#xff0c;反正对于通信这一块就不是很懂&#xff0c;后面也慢慢搞出来了一点小东西&#xff0c;但是对于一些细节还…

华为HCIE认证用处大吗?

新盟教育 专注华为认证培训十余年 为你提供认证一线资讯&#xff01; 在ICT行业的认证体系中&#xff0c;华为HCIE认证一直备受关注。那么&#xff0c;华为HCIE认证用处大吗&#xff1f;今天咱们就来深入探讨一下&#xff0c;以数据通信方向为例&#xff0c;看看它到底能带来什…

【WRF-Chem】预处理工具(Preprocessors)总结

WRF-Chem 预处理工具&#xff08;Preprocessors&#xff09; 化学选项&#xff08;Chemistry Options&#xff09;数据下载 预处理工具&#xff08;Preprocessors&#xff09;工具1&#xff1a;mozbc工具2&#xff1a;bio_emiss工具3&#xff1a;anthro_emiss工具4&#xff1a;…

六、OpenGL中EBO的使用及本质

文章目录 一、什么是顶点索引二、什么是EBO三、EBO使用的完整代码 一、什么是顶点索引 OpenGL 中&#xff0c;顶点索引&#xff08;Vertex Index&#xff09;用于减少重复的顶点数据&#xff0c;提高绘制效率。其核心概念涉及索引缓冲对象&#xff08;Index Buffer Object&…