Python 凭借其简洁的语法和强大的生态系统,已成为办公自动化领域的首选语言。本文将系统性地介绍 Python 中常用的办公自动化库,帮助你快速选择合适的工具来提升工作效率。

安装:pip install python-docx
python-docx 是 Python 中处理 Word 文档(.docx)最流行的库,支持创建、读取和修改 Word 文档。
核心功能:
使用示例:
from docx import Document
from docx.shared import Pt, RGBColor
# 创建文档
doc = Document()
# 添加标题
doc.add_heading('Python办公自动化', level=1)
# 添加段落
paragraph = doc.add_paragraph('这是一个自动化示例。')
run = paragraph.add_run('加粗文字')
run.bold = True
run.font.size = Pt(14)
run.font.color.rgb = RGBColor(0xFF, 0x00, 0x00)
# 添加表格
table = doc.add_table(rows=3, cols=3)
for i, row inenumerate(table.rows):
for j, cell inenumerate(row.cells):
cell.text = f'行{i+1} 列{j+1}'
# 添加图片
doc.add_picture('example.png', width=Pt(400))
# 保存文档
doc.save('output.docx')安装:pip install openpyxl
openpyxl 用于读写 Excel 2010+ 的 .xlsx 文件,功能全面,支持公式、图表、条件格式等。
核心功能:
使用示例:
from openpyxl import Workbook
from openpyxl.styles import Font, Alignment, PatternFill
wb = Workbook()
ws = wb.active
ws.title = "员工数据"
# 设置表头
headers = ['姓名', '部门', '薪资']
for col, header inenumerate(headers, 1):
cell = ws.cell(row=1, column=col, value=header)
cell.font = Font(bold=True, color='FFFFFF')
cell.fill = PatternFill(start_color='4472C4', fill_type='solid')
# 写入数据
data = [
('张三', '技术部', 15000),
('李四', '市场部', 12000),
('王五', '财务部', 13000),
]
for row_idx, row_data inenumerate(data, 2):
for col_idx, value inenumerate(row_data, 1):
ws.cell(row=row_idx, column=col_idx, value=value)
# 设置列宽
ws.column_dimensions['A'].width = 15
ws.column_dimensions['B'].width = 15
ws.column_dimensions['C'].width = 12
wb.save('employee.xlsx')安装:pip install python-pptx
用于创建和修改 PowerPoint 演示文稿(.pptx)。
核心功能:
使用示例:
from pptx import Presentation
from pptx.util import Inches, Pt
prs = Presentation()
# 添加标题幻灯片
slide = prs.slides.add_slide(prs.slide_layouts[0])
slide.shapes.title.text = "Python办公自动化"
slide.placeholders[1].text = "让工作更高效"
# 添加内容幻灯片
slide = prs.slides.add_slide(prs.slide_layouts[1])
slide.shapes.title.text = "目录"
content = slide.placeholders[1]
content.text = "1. Word文档处理\n2. Excel表格处理\n3. PPT演示文稿"
prs.save('presentation.pptx')安装:pip install XlsxWriter
专注于 Excel 文件的高性能写入,支持图表、条件格式、数据验证等。注意:只能写入,不能读取。
核心功能:
使用示例:
import xlsxwriter
wb = xlsxwriter.Workbook('report.xlsx')
ws = wb.add_worksheet('销售报表')
# 定义格式
bold = wb.add_format({'bold': True, 'bg_color': '#4472C4', 'font_color': 'white'})
currency = wb.add_format({'num_format': '¥#,##0'})
# 写入表头
headers = ['产品', 'Q1', 'Q2', 'Q3', 'Q4']
for col, header inenumerate(headers):
ws.write(0, col, header, bold)
# 写入数据
data = [
['产品A', 12000, 15000, 18000, 21000],
['产品B', 8000, 9500, 11000, 13000],
]
for row_idx, row_data inenumerate(data, 1):
for col_idx, value inenumerate(row_data):
fmt = currency if col_idx > 0elseNone
ws.write(row_idx, col_idx, value, fmt)
# 添加图表
chart = wb.add_chart({'type': 'column'})
chart.add_series({'values': '=销售报表!$B$2:$E$2'})
ws.insert_chart('G2', chart)
wb.close()安装:pip install xlrd xlwt xlutils
用于读写旧版 Excel(.xls)文件:
xlrd:读取 .xls 文件xlwt:写入 .xls 文件xlutils:复制和修改 .xls 文件import xlwt
wb = xlwt.Workbook()
ws = wb.add_sheet('Sheet1')
ws.write(0, 0, '姓名')
ws.write(0, 1, '年龄')
ws.write(1, 0, '张三')
ws.write(1, 1, 28)
wb.save('data.xls')安装:pip install docx2pdf(Windows 需要安装 Microsoft Word)
将 Word 文档批量转换为 PDF:
from docx2pdf import convert
# 单文件转换
convert('input.docx', 'output.pdf')
# 批量转换整个文件夹
convert('input_folder/', 'output_folder/')安装:pip install docxtpl
基于 Jinja2 的 Word 模板引擎,可以使用占位符生成文档。
from docxtpl import DocxTemplate
doc = DocxTemplate('template.docx')
context = {
'name': '张三',
'department': '技术部',
'salary': 15000
}
doc.render(context)
doc.save('report.docx')安装:pip install pypdf(PyPDF2 已更名为 pypdf)
用于 PDF 的基本操作:合并、拆分、提取文本、加密解密等。
核心功能:
使用示例:
from pypdf import PdfReader, PdfWriter
# 读取 PDF
reader = PdfReader('input.pdf')
print(f"共 {len(reader.pages)} 页")
# 提取文本
text = reader.pages[0].extract_text()
print(text)
# 合并多个 PDF
writer = PdfWriter()
for pdf_file in ['a.pdf', 'b.pdf', 'c.pdf']:
reader = PdfReader(pdf_file)
for page in reader.pages:
writer.add_page(page)
withopen('merged.pdf', 'wb') as f:
writer.write(f)安装:pip install pdfplumber
专注于从 PDF 中精准提取表格,非常适合处理报表、发票等结构化数据。
核心功能:
使用示例:
import pdfplumber
with pdfplumber.open('report.pdf') as pdf:
for page in pdf.pages:
tables = page.extract_tables()
for table in tables:
for row in table:
print(row)安装:pip install reportlab
强大的 PDF 生成库,可以从零开始创建任意格式的 PDF 文档。
from reportlab.lib.pagesizes import A4
from reportlab.pdfgen import canvas
c = canvas.Canvas('hello.pdf', pagesize=A4)
width, height = A4
c.setFont('Helvetica', 24)
c.drawString(100, height - 100, 'Hello PDF!')
c.setFont('Helvetica', 12)
c.drawString(100, height - 140, '这是用 ReportLab 创建的 PDF 文件')
c.save()安装:pip install PyMuPDF
基于 MuPDF 引擎,速度极快,支持 PDF 读写、渲染、OCR 等。
import fitz # PyMuPDF
doc = fitz.open('input.pdf')
for page_num inrange(len(doc)):
page = doc[page_num]
text = page.get_text()
print(f"第 {page_num + 1} 页: {text[:200]}")
# PDF 转图片
pix = page.get_pixmap()
pix.save(f'page_{page_num+1}.png')安装:pip install yagmail
封装了 smtplib,用极少代码发送邮件。
import yagmail
# 连接邮箱
yag = yagmail.SMTP(
user='your_email@example.com',
password='your_password',
host='smtp.example.com'
)
# 发送邮件
yag.send(
to='recipient@example.com',
subject='Python自动发送的邮件',
contents='这是邮件正文内容',
attachments=['file1.pdf', 'file2.xlsx']
)Python 标准库,无需额外安装,功能全面。
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
msg = MIMEMultipart()
msg['From'] = 'sender@example.com'
msg['To'] = 'recipient@example.com'
msg['Subject'] = 'Python自动化邮件'
# 正文
msg.attach(MIMEText('邮件正文内容', 'plain', 'utf-8'))
# 附件
withopen('report.pdf', 'rb') as f:
part = MIMEApplication(f.read(), Name='report.pdf')
part['Content-Disposition'] = 'attachment; filename="report.pdf"'
msg.attach(part)
# 发送
with smtplib.SMTP('smtp.example.com', 465) as server:
server.login('user', 'password')
server.send_message(msg)imapclient:通过 IMAP 协议读取邮件exchangelib:Exchange Server 邮件收发# 使用 exchangelib 连接 Exchange
from exchangelib import Credentials, Account
credentials = Credentials('user@company.com', 'password')
account = Account('user@company.com', credentials=credentials, autodiscover=True)
# 读取收件箱最新10封
for item in account.inbox.all().order_by('-datetime_received')[:10]:
print(f"主题: {item.subject}")
print(f"发件人: {item.sender.email_address}")安装:pip install Pillow
Python 最经典的图像处理库,支持几乎所有常见格式。
核心功能:
使用示例:
from PIL import Image, ImageDraw, ImageFont
# 打开图片
img = Image.open('photo.jpg')
# 缩放
img.thumbnail((800, 600))
# 旋转
img = img.rotate(90)
# 添加文字水印
draw = ImageDraw.Draw(img)
font = ImageFont.truetype('msyh.ttc', 40)
draw.text((50, 50), '版权所有', fill='white', font=font)
# 保存
img.save('output.jpg', quality=95)安装:pip install img2pdf
将图片无损转换为 PDF 文件。
import img2pdf
withopen('output.pdf', 'wb') as f:
f.write(img2pdf.convert('image1.jpg', 'image2.png'))安装:pip install requests
最流行的 HTTP 客户端库,几乎所有 Python 网络请求的首选。
import requests
# GET 请求
response = requests.get('https://api.example.com/data')
data = response.json()
# POST 请求
response = requests.post(
'https://api.example.com/upload',
json={'key': 'value'},
headers={'Authorization': 'Bearer token'}
)
# 下载文件
response = requests.get('https://example.com/file.pdf')
withopen('downloaded.pdf', 'wb') as f:
f.write(response.content)安装:pip install beautifulsoup4
从 HTML/XML 文档中提取数据的利器。
from bs4 import BeautifulSoup
import requests
html = requests.get('https://example.com').text
soup = BeautifulSoup(html, 'html.parser')
# 提取所有链接
for link in soup.find_all('a'):
print(link.get('href'))
# 提取表格
for table in soup.find_all('table'):
for row in table.find_all('tr'):
cells = [cell.text.strip() for cell in row.find_all(['td', 'th'])]
print(cells)安装:pip install scrapy
专业级爬虫框架,支持异步、去重、管道处理等。
import scrapy
classQuoteSpider(scrapy.Spider):
name = 'quotes'
start_urls = ['https://quotes.toscrape.com/']
defparse(self, response):
for quote in response.css('div.quote'):
yield {
'text': quote.css('span.text::text').get(),
'author': quote.css('small.author::text').get(),
}
yield response.follow(response.css('li.next a::attr(href)').get())安装:
pip install seleniumpip install playwright && playwright install用于需要 JavaScript 渲染的网页抓取和 Web 自动化。
# Selenium 示例
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get('https://example.com')
elements = driver.find_elements(By.CSS_SELECTOR, '.item')
for el in elements:
print(el.text)
driver.quit()
# Playwright 示例(推荐,更快更稳定)
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch()
page = browser.new_page()
page.goto('https://example.com')
print(page.title())
browser.close()安装:pip install pandas
数据分析的瑞士军刀,支持表格数据的读取、清洗、分析、导出全流程。
核心功能:
使用示例:
import pandas as pd
# 读取数据
df = pd.read_excel('sales.xlsx')
# 基本统计
print(df.describe())
# 分组聚合
summary = df.groupby('部门').agg({
'销售额': ['sum', 'mean', 'count']
}).reset_index()
# 筛选和排序
top_sales = df[df['销售额'] > 10000].sort_values('销售额', ascending=False)
# 导出数据
summary.to_excel('summary.xlsx', index=False)Python 标准库,无需安装。
import csv
# 读取 CSV
withopen('data.csv', 'r', encoding='utf-8') as f:
reader = csv.DictReader(f)
for row in reader:
print(row['姓名'], row['年龄'])
# 写入 CSV
withopen('output.csv', 'w', newline='', encoding='utf-8') as f:
writer = csv.writer(f)
writer.writerow(['姓名', '年龄', '部门'])
writer.writerow(['张三', 28, '技术部'])安装:pip install tabulate
在命令行中漂亮地打印表格数据。
from tabulate import tabulate
data = [
['张三', '技术部', 15000],
['李四', '市场部', 12000],
['王五', '财务部', 13000],
]
print(tabulate(data, headers=['姓名', '部门', '薪资'], tablefmt='grid'))Python 标准库,基础日期时间操作。
from datetime import datetime, timedelta
now = datetime.now()
print(f"当前时间: {now:%Y-%m-%d %H:%M:%S}")
# 日期计算
yesterday = now - timedelta(days=1)
next_week = now + timedelta(weeks=1)
# 字符串解析
dt = datetime.strptime('2026-05-06', '%Y-%m-%d')安装:pip install python-dateutil
增强 datetime 的能力,支持自然语言日期解析。
from dateutil import parser
from dateutil.relativedelta import relativedelta
# 自然语言解析
dt = parser.parse('May 6, 2026 9:00 AM')
# 相对日期
next_month = dt + relativedelta(months=1)
last_friday = dt + relativedelta(weekday=-1) # 上一个周五安装:pip install arrow
import arrow
now = arrow.now()
print(now.humanize()) # "刚刚"
utc = arrow.utcnow()
print utc.to('Asia/Shanghai').format('YYYY-MM-DD HH:mm:ss')Python 标准库。
import os
import shutil
# 遍历目录
for root, dirs, files in os.walk('./data'):
for file in files:
if file.endswith('.xlsx'):
print(os.path.join(root, file))
# 批量复制
shutil.copy('source.txt', 'destination.txt')
# 移动文件
shutil.move('old_path.txt', 'new_path.txt')
# 删除目录树
shutil.rmtree('temp_folder')Python 3.4+ 标准库,面向对象的路径操作。
from pathlib import Path
# 路径操作
p = Path('./data')
for file in p.glob('**/*.xlsx'):
print(f"文件大小: {file.stat().st_size} bytes")
# 文件操作
p = Path('output.txt')
p.write_text('Hello World')
content = p.read_text()安装:pip install watchdog
监控文件系统变化,自动触发操作。
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
classMyHandler(FileSystemEventHandler):
defon_created(self, event):
ifnot event.is_directory:
print(f"新文件: {event.src_path}")
observer = Observer()
observer.schedule(MyHandler(), path='./watch_folder', recursive=False)
observer.start()
observer.join()安装:pip install send2trash
将文件移入回收站而非永久删除。
from send2trash import send2trash
send2trash('old_file.txt') # 移入回收站安装:pip install pytesseract(需系统安装 Tesseract OCR 引擎)
import pytesseract
from PIL import Image
# 识别图片文字
img = Image.open('scan.png')
text = pytesseract.image_to_string(img, lang='chi_sim+eng')
print(text)安装:pip install paddlepaddle paddleocr
中文识别效果优秀的 OCR 库。
from paddleocr import PaddleOCR
ocr = PaddleOCR(use_angle_cls=True, lang='ch')
result = ocr.ocr('document.jpg')
for line in result[0]:
print(line[1][0]) # 识别出的文字安装:pip install easyocr
支持 80+ 种语言,开箱即用。
import easyocr
reader = easyocr.Reader(['ch_sim', 'en'])
result = reader.readtext('image.jpg')
for detection in result:
print(detection[1]) # 文字内容安装:pip install pyautogui
控制鼠标和键盘,模拟人工操作。
import pyautogui
# 获取屏幕尺寸
print(pyautogui.size())
# 移动鼠标
pyautogui.moveTo(100, 200, duration=1)
# 点击
pyautogui.click()
# 输入文字
pyautogui.typewrite('Hello World', interval=0.1)
# 截图
screenshot = pyautogui.screenshot()
screenshot.save('screen.png')安装:pip install keyboard mouse
import keyboard
# 监听快捷键
keyboard.add_hotkey('ctrl+shift+a', lambda: print('触发!'))
keyboard.wait('esc')
# 模拟按键
keyboard.press_and_release('ctrl+c')安装:pip install pywin32
import win32com.client
# 操作 Excel(通过 COM)
excel = win32com.client.Dispatch('Excel.Application')
excel.Visible = True
wb = excel.Workbooks.Add()
ws = wb.ActiveSheet
ws.Cells(1, 1).Value = 'Hello from Python'
wb.SaveAs('com_output.xlsx')安装:pip install matplotlib
import matplotlib.pyplot as plt
plt.figure(figsize=(10, 6))
plt.bar(['Q1', 'Q2', 'Q3', 'Q4'], [120, 150, 180, 210])
plt.title('季度销售额')
plt.xlabel('季度')
plt.ylabel('销售额 (万元)')
plt.savefig('chart.png', dpi=200)
plt.show()安装:pip install seaborn
基于 matplotlib,更美观的统计图表。
import seaborn as sns
import pandas as pd
df = pd.read_csv('data.csv')
sns.heatmap(df.corr(), annot=True, cmap='coolwarm')
plt.savefig('correlation.png')安装:pip install plotly
import plotly.express as px
df = px.data.gapminder()
fig = px.scatter(df, x='gdpPercap', y='lifeExp',
size='pop', color='continent',
hover_name='country', log_x=True,
title='各国GDP与预期寿命')
fig.write_html('interactive_chart.html')安装:pip install schedule
import schedule
import time
defjob():
print('执行定时任务...')
schedule.every().day.at('09:00').do(job)
schedule.every().monday.at('10:00').do(job)
whileTrue:
schedule.run_pending()
time.sleep(60)安装:pip install paramiko
远程服务器管理。
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('192.168.1.100', username='user', password='pass')
# 执行命令
stdin, stdout, stderr = ssh.exec_command('df -h')
print(stdout.read().decode())
ssh.close()安装:pip install loguru
from loguru import logger
logger.add('app.log', rotation='10 MB', retention='7 days')
logger.info('程序启动')
logger.error('发生错误', exc_info=True)安装:pip install rich
from rich.console import Console
from rich.table import Table
console = Console()
table = Table(title='员工信息')
table.add_column('姓名')
table.add_column('部门')
table.add_column('薪资')
table.add_row('张三', '技术部', '¥15,000')
console.print(table)已在 8.3 节介绍。
安装:pip install chardet
自动检测文件编码,解决读取文本时的乱码问题。
import chardet
withopen('unknown.txt', 'rb') as f:
raw = f.read()
result = chardet.detect(raw)
print(f"编码: {result['encoding']}, 置信度: {result['confidence']}")
text = raw.decode(result['encoding'])Python 标准库。
import json
# JSON 序列化/反序列化
data = {'name': '张三', 'age': 28}
json_str = json.dumps(data, ensure_ascii=False, indent=2)
parsed = json.loads(json_str)
# 读写文件
withopen('data.json', 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=2)Python 标准库。
import zipfile
import os
# 创建压缩包
with zipfile.ZipFile('backup.zip', 'w', zipfile.ZIP_DEFLATED) as zf:
for file in os.listdir('./data'):
zf.write(os.path.join('./data', file))
# 解压
with zipfile.ZipFile('backup.zip', 'r') as zf:
zf.extractall('./output')Python 标准库,用于读写 .ini 配置文件。
import configparser
config = configparser.ConfigParser()
config.read('settings.ini')
# 读取
db_host = config['database']['host']
# 写入
config['server']['port'] = '8080'
withopen('settings.ini', 'w') as f:
config.write(f)Python 标准库。
import argparse
parser = argparse.ArgumentParser(description='办公自动化脚本')
parser.add_argument('--input', '-i', required=True, help='输入文件路径')
parser.add_argument('--output', '-o', default='output.xlsx', help='输出文件路径')
parser.add_argument('--verbose', '-v', action='store_true', help='详细输出')
args = parser.parse_args()
print(f"输入: {args.input}, 输出: {args.output}")| Word 报告自动生成 | |
| Excel 数据汇总分析 | |
| PPT 汇报材料生成 | |
| PDF 报表合并 | |
| 自动发邮件通知 | |
| 图片批量处理 | |
| 网页数据抓取 | |
| 桌面自动化操作 | |
| OCR 文档识别 | |
| 定时任务执行 |
requests + pandas + openpyxl 开始,这三个库能解决 60% 的办公自动化需求python-docx、python-pptx 和 PyMuPDF,覆盖 Word、PPT 和 PDF 三大办公格式PyAutoGUI + Selenium 实现跨应用的端到端自动化流程loguru 记录日志,schedule 或 APScheduler 做定时调度,argparse 做命令行接口Python 拥有极其丰富的办公自动化生态库,从文档处理、数据分析到邮件发送、GUI 控制,几乎涵盖了所有日常办公场景。选择库的关键是根据具体需求匹配功能:
掌握这些库的基本用法,就能大幅提升办公效率,将重复性劳动交给 Python 自动完成!