原创的 20 个 Python 自动化案例,一口一个,高效办公!

文章介绍了Python办公自动化的20个案例,涵盖Word、Excel、PPT、PDF及系统层面,提供基础知识和实用操作。作者还分享了Python学习资料,包括学习路线、视频、书籍、工具包、实战项目和面试题等内容。

导读

大家好,自从 发布第一篇 Python 办公自动化办公系列文章以来,目前已经马不停蹄的更新了 20 个案例,累计阅读超 10W+,为了方便大家阅读学习,我将这二十个案例再次进行分类汇总,内容涵盖 Python 操作Word、Excel、PPT、PDF及一些系统层面的自动化教程,先来看看部分内容吧!

img

自动化基础知识

想要玩好 Python 办公自动化,基础知识要扎实,下面四篇文章分别从原理讲起,到代码示例,辅以大量图表,对自动化办公中的常用操作进行介绍,点击下方图片可以直达对应文章!

img

img

img

img

Word/Excel 自动化案例

在掌握了一些常用操作后,就可以基于这些操作实现办公自动化,Word 和 Excel 作为工作中最常用的软件,实现自动化就可以节省很多时间,下面给出了一些案例,点击下方图片可以直达对应文章学习!

img

img

img

img

img

Word+Excel 自动化案例

除了上面的 Word 与 Excel 单独的自动化之外,将两者结合起来能实现更多实用的案例!

img

img

img

img

PPT/PDF 自动化案例

除了 Word 与 Excel 之外,PPT和PDF也是日常办公中必不可少的软件,下面给出了一些基于 PPT 与 PDF 的自动化案例,点击对应图片可以直达学习!

img

img

img

其他****自动化案例

最后,除了 Office 三件套和 PDF 之外,还有一些办公中常用的操作可以通过使用os和glob等模块实现,以下是一些案例,点击图片可以直达对应文章!

img

img

img

img

写在最后

以上就是 Python 办公自动化第一阶段的 20 篇内容,如果你每天都有重复的工作需要执行,认真研究上面的基础知识与实例一定会有所收获!抓紧收藏起来吧!在之后我们将推出**基 **于 Python 的更多办公软件自动化案例,敬请期待!如果喜欢本系列,给本文来个三连吧!

这里给大家分享一份Python全套学习资料,包括学习路线、软件、源码、视频、面试题等等,都是我自己学习时整理的,希望可以对正在学习或者想要学习Python的朋友有帮助!

优快云大礼包:全网最全《全套Python学习资料》免费分享🎁

😝有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓

👉优快云大礼包🎁:全网最全《Python学习资料》免费分享(安全链接,放心点击)👈

1️⃣零基础入门

① 学习路线

对于从来没有接触过Python的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

② 路线对应学习视频

还有很多适合0基础入门的学习视频,有了这些视频,轻轻松松上手Python~在这里插入图片描述

③练习题

每节视频课后,都有对应的练习题哦,可以检验学习成果哈哈!
在这里插入图片描述
因篇幅有限,仅展示部分资料

2️⃣国内外Python书籍、文档

① 文档和书籍资料

在这里插入图片描述

3️⃣Python工具包+项目源码合集

①Python工具包

学习Python常用的开发软件都在这里了!每个都有详细的安装教程,保证你可以安装成功哦!
在这里插入图片描述

②Python实战案例

光学理论是没用的,要学会跟着一起敲代码,动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。100+实战案例源码等你来拿!
在这里插入图片描述

③Python小游戏源码

如果觉得上面的实战案例有点枯燥,可以试试自己用Python编写小游戏,让你的学习过程中增添一点趣味!
在这里插入图片描述

4️⃣Python面试题

我们学会了Python之后,有了技能就可以出去找工作啦!下面这些面试题是都来自阿里、腾讯、字节等一线互联网大厂,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
在这里插入图片描述
在这里插入图片描述

5️⃣Python兼职渠道

而且学会Python以后,还可以在各大兼职平台接单赚钱,各种兼职渠道+兼职注意事项+如何和客户沟通,我都整理成文档了。
在这里插入图片描述
在这里插入图片描述
上述所有资料 ⚡️ ,朋友们如果有需要 📦《全套Python学习资料》的,可以扫描下方二维码免费领取 🆓
😝有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓

👉优快云大礼包🎁:全网最全《Python学习资料》免费分享(安全链接,放心点击)👈

在工业自动化领域,三菱PLC(如FX、Q、L系列)通常通过 **MC协议**(Mitsubishi Communication Protocol)与上位机通信。最常见的通讯方式是使用以太网(Ethernet)连接,基于TCP/IP协议实现数据读写。 下面是一个使用 Python 实现与三菱 PLC 进行 **MC协议通讯** 的示例程序,适用于支持 MC 协议的 Q 系列、L 系列或 FX5 系列 PLC。我们将使用 `socket` 模块实现 TCP 通信,并按照二进制格式构造 MC 协议报文来读取/写入软元件(如 X、Y、M、D 等)。 --- ### ✅ 示例:使用 Python 通过 MC 协议读取三菱 PLC 中的寄存器 D100 ```python import socket import struct def create_mc_packet(device_code, address, length): """ 构造 MC 协议二进制请求包 (QnA 兼容3E帧) 参数: device_code: 软元件类型编码 (如 b'D' 表示数据寄存器 D) address: 寄存器地址 (如 100 表示 D100) length: 要读取的点数 (单位:字,WORD) 返回: bytes: 完整的 MC 协议请求包 """ # 固定头部 - 14 字节 network_number = 0x00 # 网络号 (通常为 0) pc_number = 0xFF # PC编号 (固定 FF) io_number = 0x03FF # I/O编号 (CPU为3FFF,但常设为03FF) station_number = 0x00 # 站号 (本地站为0) module_i_c_number = 0x00 # 模块I/C编号 module_number = 0x00 # 模块号 cpu_timer = 0x0A # CPU监视定时器 (10个单位,约100ms) request_dest_num = 0x00 # 请求目标网络号 request_dest_pc_num = 0x00 # 请求目标PC号 request_dest_io_num = 0x00 # 请求目标I/O号 request_dest_station_num = 0x00# 请求目标站号 # 命令部分 - 6 字节 command = 0x0104 # 读命令 (0x0104 = 批量读取) subcommand = 0x0000 # 子命令 (通常为0) # 地址信息 addr = int(address) addr_hex = struct.pack('<H', addr) # 小端2字节地址 dev_type = device_code # 设备类型 (ASCII字符) # 数据长度 (按字 WORD 计算) data_length = length # 读取多少个 WORD # 构建二进制报文 header = struct.pack( '<BBHHBBBBHHHH', network_number, pc_number, io_number, station_number, module_i_c_number, module_number, cpu_timer, request_dest_num, request_dest_pc_num, request_dest_io_num, request_dest_station_num, 0x0000 # reserved ) cmd_part = struct.pack('<HH', command, subcommand) len_part = struct.pack('<H', data_length) addr_part = dev_type + addr_hex packet = header + cmd_part + len_part + addr_part return packet def read_from_mitsubishi_plc(ip, port, device_code, address, length): """ 向三菱PLC发送MC协议请求并返回结果 参数: ip: PLC IP地址 port: 端口号 (默认 5001 或 5002,需在PLC中配置) device_code: 设备类型,如 b'D' -> D寄存器, b'M' -> M寄存器 address: 起始地址 (例如 D100 的地址是 100) length: 读取的字数 (每个D占一个WORD=2字节) 返回: list[int]: 返回读取到的数值列表 """ with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: try: s.settimeout(5) s.connect((ip, port)) packet = create_mc_packet(device_code, address, length) s.send(packet) # 接收响应 response = s.recv(4096) if len(response) < 22: raise Exception("响应数据过短") # 解析返回状态码 (从偏移11开始的2字节) status = struct.unpack('<H', response[11:13])[0] if status != 0: raise Exception(f"PLC返回错误码: {status}") # 数据从第22字节开始,每2字节一个WORD data_bytes = response[22:] values = [] for i in range(0, len(data_bytes), 2): word_val = struct.unpack('<H', data_bytes[i:i+2])[0] values.append(word_val) return values except socket.timeout: raise Exception("连接超时") except ConnectionRefusedError: raise Exception("连接被拒绝,请检查IP和端口") # === 使用示例 === if __name__ == "__main__": PLC_IP = "192.168.3.50" # 替换为你的PLC实际IP PORT = 5001 # 默认MC协议端口,可在GX Works2中设置 try: # 读取 D100 开始的2个寄存器 (D100 和 D101) result = read_from_mitsubishi_plc(PLC_IP, PORT, b'D', 100, 2) print(f"读取成功: D100={result[0]}, D101={result[1]}") except Exception as e: print(f"读取失败: {e}") ``` --- ### 🔍 代码解释: | 部分 | 说明 | |------|------| | `create_mc_packet` | 构造符合 **MC 3E帧协议** 的二进制请求包,包含网络参数、命令、设备类型和地址 | | `read_from_mitsubishi_plc` | 建立 TCP 连接,发送请求,接收并解析返回数据 | | 报文结构 | 使用小端序(Little Endian),遵循 QnA 兼容3E帧格式 | | 支持设备 | D(数据寄存器)、M(内部继电器)、X/Y(输入输出)、T(定时器当前值)等 | | 错误处理 | 包括超时、连接失败、PLC返回状态码判断 | --- ### ⚠️ 注意事项: 1. **PLC设置要求**: - 必须启用“MC协议”功能。 - 在 GX Works2/GX Works3 中配置以太网模块(如 QJ71E71),开启“顺控程序用的端口”并设置端口号(如 5001)。 - 设置访问权限允许上位机访问。 2. **设备代码对照表**: | 设备 | 编码 | |-----|------| | D | `b'D'` | | M | `b'M'` | | X | `b'X'`(八进制)| | Y | `b'Y'`(八进制)| | T | `b'T'`(当前值)| | C | `b'C'` | 3. **地址格式**: - X/Y 使用八进制地址(如 X0F 对应 X17 八进制),但在MC协议中仍传十进制数字(如 17)。 - D/M/T/C 使用十进制地址。 4. **端口选择**: - `5001`: ASCII模式或Binary模式均可(本例使用 Binary) - `5002`: 有时用于冗余或备用通道 --- ### ✅ 扩展:写入寄存器(Write D寄存器) ```python def write_to_mitsubishi_plc(ip, port, device_code, address, values): """ 写入多个寄存器 (如 D100, D101...) values: 整数列表,每个值对应一个WORD """ with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: try: s.settimeout(5) s.connect((ip, port)) # 构造写命令包 network_number = 0x00 pc_number = 0xFF io_number = 0x03FF station_number = 0x00 module_i_c_number = 0x00 module_number = 0x00 cpu_timer = 0x0A request_dest_num = 0x00 request_dest_pc_num = 0x00 request_dest_io_num = 0x00 request_dest_station_num = 0x00 command = 0x0114 # 写入命令 subcommand = 0x0000 data_length = len(values) # WORD数量 addr = int(address) addr_hex = struct.pack('<H', addr) dev_type = device_code header = struct.pack( '<BBHHBBBBHHHH', network_number, pc_number, io_number, station_number, module_i_c_number, module_number, cpu_timer, request_dest_num, request_dest_pc_num, request_dest_io_num, request_dest_station_num, 0x0000 ) cmd_part = struct.pack('<HH', command, subcommand) len_part = struct.pack('<H', data_length) addr_part = dev_type + addr_hex # 数据部分 (每个WORD小端) data_part = b''.join(struct.pack('<H', val & 0xFFFF) for val in values) packet = header + cmd_part + len_part + addr_part + data_part s.send(packet) # 接收响应 response = s.recv(1024) if len(response) < 13: raise Exception("响应无效") status = struct.unpack('<H', response[11:13])[0] if status != 0: raise Exception(f"写入失败,错误码: {status}") print(f"写入成功: {values}") except Exception as e: print(f"写入失败: {e}") # 示例写入 D100=1234, D101=5678 write_to_mitsubishi_plc("192.168.3.50", 5001, b'D', 100, [1234, 5678]) ``` --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值