顾乔芝士网

持续更新的前后端开发技术栈

Python 办公自动化实战进阶篇_如何利用python进行自动化办公?



一、Word文档自动化处理


批量生成Word文档


使用python-docx库可以批量生成标准格式的Word文档。


from docx import Document


from docx.shared import Pt


from docx.enum.text import WD_PARAGRAPH_ALIGNMENT


def generate_word_report(template_data, output_path):


doc = Document()


# 添加标题 title = doc.add_heading('工作报告', level=0) title.alignment =
WD_PARAGRAPH_ALIGNMENT.CENTER # 添加基本信息 doc.add_paragraph(f"姓名: {template_data['name']}") doc.add_paragraph(f"日期: {template_data['date']}") doc.add_paragraph(f"部门: {template_data['department']}") # 添加正文内容 doc.add_heading('工作内容', level=1) for item in template_data['content']: p = doc.add_paragraph(item, style='ListBullet') # 添加表格 doc.add_heading('项目进度', level=1) table = doc.add_table(rows=1, cols=3) hdr_cells = table.rows[0].cells hdr_cells[0].text = '项目名称' hdr_cells[1].text = '负责人' hdr_cells[2].text = '完成进度' for project in template_data['projects']: row_cells = table.add_row().cells row_cells[0].text = project['name'] row_cells[1].text = project['owner'] row_cells[2].text = project['progress'] # 保存文档 doc.save(output_path) print(f"文档已生成: {output_path}")


使用示例


data = {


'name': '张三',


'date': '2023-06-15',


'department': '技术部',


'content': [


'完成了项目需求分析',


'编写了核心模块代码',


'进行了单元测试'


],


'projects': [


{'name': 'OA系统升级', 'owner': '张三', 'progress': '80%'},


{'name': '数据平台', 'owner': '李四', 'progress': '50%'}


]


}


generate_word_report(data, 'work_report.docx')


Word文档批量替换内容


批量修改多个Word文档中的特定内容。


from docx import Document


import os


def batch_replace_in_word(folder_path, old_text, new_text):


for filename in os.listdir(folder_path):


if filename.endswith('.docx'):


file_path = os.path.join(folder_path, filename)


doc = Document(file_path)


# 替换段落中的文本 for para in doc.paragraphs: if old_text in para.text: para.text = para.text.replace(old_text, new_text) # 替换表格中的文本 for table in doc.tables: for row in table.rows: for cell in row.cells: if old_text in cell.text: cell.text = cell.text.replace(old_text, new_text) # 保存修改后的文档 new_filename = f"modified_{filename}" new_path = os.path.join(folder_path, new_filename) doc.save(new_path) print(f"已处理: {filename} -> {new_filename}")


使用示例


batch_replace_in_word('./reports', '旧公司名称', '新公司名称')


二、Excel高级自动化处理


自动化数据透视表


使用pandas创建复杂的数据透视表。


import pandas as pd


def create_pivot_table(input_file, output_file):


df = pd.read_excel(input_file)


# 创建数据透视表 pivot = pd.pivot_table( df, index=['部门', '姓名'], columns=['季度'], values=['销售额', '利润'], aggfunc={'销售额': 'sum', '利润': 'mean'}, fill_value=0, margins=True, margins_name='总计' ) # 保存到Excel with pd.ExcelWriter(output_file) as writer: pivot.to_excel(writer, sheet_name='数据透视表') print(f"数据透视表已生成: {output_file}")


create_pivot_table('sales_data.xlsx', 'sales_pivot.xlsx')


自动化图表生成


在Excel中自动生成专业图表。


import pandas as pd


from openpyxl.chart import BarChart, Reference


def create_excel_chart(input_file, output_file):


df = pd.read_excel(input_file)


# 按部门汇总数据 summary = df.groupby('部门')['销售额'].sum().reset_index() # 写入Excel with pd.ExcelWriter(output_file, engine='openpyxl') as writer: summary.to_excel(writer, sheet_name='汇总', index=False) # 获取工作表对象 workbook = writer.book worksheet = writer.sheets['汇总'] # 创建柱状图 chart = BarChart() chart.title = "各部门销售额对比" chart.style = 13 chart.y_axis.title = '销售额' chart.x_axis.title = '部门' # 设置数据范围 data = Reference(worksheet, min_col=2, min_row=1, max_row=len(summary)+1, max_col=2) categories = Reference(worksheet, min_col=1, min_row=2, max_row=len(summary)+1) # 添加数据到图表 chart.add_data(data, titles_from_data=True) chart.set_categories(categories) # 将图表添加到工作表 worksheet.add_chart(chart, "D2") print(f"带图表的Excel文件已生成: {output_file}")


create_excel_chart('sales_data.xlsx', 'sales_with_chart.xlsx')


三、PPT自动化处理


批量生成PPT报告


使用python-pptx库自动生成PPT演示文稿。


from pptx import Presentation


from pptx.util import Inches, Pt


from pptx.enum.text import PP_ALIGN


from pptx.dml.color import RGBColor


def generate_ppt_report(data, output_file):


prs = Presentation()


# 添加标题幻灯片 slide_layout = prs.slide_layouts[0] slide = prs.slides.add_slide(slide_layout) title = slide.shapes.title subtitle = slide.placeholders[1] title.text = data['title'] subtitle.text = data['subtitle'] # 添加内容幻灯片 for section in data['sections']: # 添加标题和内容幻灯片 slide_layout = prs.slide_layouts[1] slide = prs.slides.add_slide(slide_layout) title = slide.shapes.title content = slide.placeholders[1] title.text = section['title'] # 添加内容段落 tf = content.text_frame for item in section['content']: p = tf.add_paragraph() p.text = item p.level = 0 p.font.size = Pt(18) p.font.color.rgb = RGBColor(0, 0, 0) # 添加图表幻灯片 if 'chart_data' in section: slide_layout = prs.slide_layouts[5] slide = prs.slides.add_slide(slide_layout) title = slide.shapes.title title.text = section['title'] + " - 数据图表" # 添加图表 chart_data = section['chart_data'] x, y = Inches(2), Inches(2) cx, cy = Inches(6), Inches(4.5) chart = slide.shapes.add_chart( chart_data['chart_type'], x, y, cx, cy, chart_data['data'] ).chart # 保存PPT prs.save(output_file) print(f"PPT报告已生成: {output_file}")


使用示例


report_data = {


'title': '2023年季度报告',


'subtitle': '技术部 - 第一季度',


'sections': [


{


'title': '项目进展',


'content': [


'OA系统升级完成80%',


'数据平台开发完成50%',


'移动端优化已完成'


]


},


{


'title': '销售数据',


'content': [


'总销售额: yen1,200,000',


'同比增长: 15%',


'主要增长点: 新产品线'


],


'chart_data': {


'chart_type': 1, # 柱状图


'data': {


'categories': ['Q1', 'Q2', 'Q3', 'Q4'],


'series': [


('2022年', [250, 300, 280, 320]),


('2023年', [300, 350, 400, 450])


]


}


}


}


]


}


generate_ppt_report(report_data, 'quarter_report.pptx')


四、数据库自动化操作


Excel数据导入数据库


将Excel数据自动导入数据库。


import pandas as pd


import sqlite3


from sqlalchemy import create_engine


def excel_to_database(excel_file, db_file, table_name):


# 读取Excel文件


df = pd.read_excel(excel_file)


# 创建数据库连接 engine = create_engine(f'sqlite:///{db_file}') # 将数据写入数据库 df.to_sql(table_name, engine, if_exists='replace', index=False) print(f"数据已成功导入数据库 {db_file} 的表 {table_name}")


使用示例


excel_to_database('sales_data.xlsx', 'sales.db', 'quarter_sales')


数据库查询生成报表


从数据库查询数据并生成Excel报表。


import pandas as pd


import sqlite3


def generate_report_from_db(db_file, query, output_file):


# 连接数据库


conn = sqlite3.connect(db_file)


# 执行查询 df = pd.read_sql_query(query, conn) # 生成Excel报表 df.to_excel(output_file, index=False) print(f"报表已生成: {output_file}") # 关闭连接 conn.close()


使用示例


query = """


SELECT


department as 部门,


employee as 员工,


SUM(sales) as 总销售额,


AVG(sales) as 平均销售额


FROM sales_data


GROUP BY department, employee


ORDER BY SUM(sales) DESC


"""


generate_report_from_db('sales.db', query, 'sales_report.xlsx')


五、图像处理自动化


批量图片处理


使用Pillow库批量处理图片。


from PIL import Image, ImageFilter, ImageEnhance


import os


def batch_process_images(input_folder, output_folder):


# 确保输出文件夹存在


os.makedirs(output_folder, exist_ok=True)


# 处理每张图片 for filename in os.listdir(input_folder): if filename.lower().endswith(('.png', '.jpg', '.jpeg')): input_path = os.path.join(input_folder, filename) output_path = os.path.join(output_folder, f"processed_{filename}") try: with Image.open(input_path) as img: # 调整大小 img = img.resize((800, 600)) # 增强对比度 enhancer = ImageEnhance.Contrast(img) img = enhancer.enhance(1.2) # 锐化 img = img.filter(ImageFilter.SHARPEN) # 保存处理后的图片 img.save(output_path) print(f"已处理: {filename}") except Exception as e: print(f"处理图片 {filename} 时出错: {e}")


batch_process_images('./photos', './processed_photos')


生成图片水印


批量给图片添加水印。


from PIL import Image, ImageDraw, ImageFont


import os


def add_watermark_to_images(input_folder, output_folder, watermark_text):


# 确保输出文件夹存在


os.makedirs(output_folder, exist_ok=True)


# 加载字体 try: font = ImageFont.truetype("arial.ttf", 36) except: font = ImageFont.load_default() # 处理每张图片 for filename in os.listdir(input_folder): if filename.lower().endswith(('.png', '.jpg', '.jpeg')): input_path = os.path.join(input_folder, filename) output_path = os.path.join(output_folder, f"watermarked_{filename}") try: with Image.open(input_path) as img: # 创建绘图对象 draw = ImageDraw.Draw(img) # 计算水印位置(右下角) text_width, text_height = draw.textsize(watermark_text, font) x = img.width - text_width - 10 y = img.height - text_height - 10 # 添加水印 draw.text((x, y), watermark_text, font=font, fill=(255, 255, 255, 128)) # 保存带水印的图片 img.save(output_path) print(f"已添加水印: {filename}") except Exception as e: print(f"处理图片 {filename} 时出错: {e}")


add_watermark_to_images('./products', './watermarked_products', 'Sample Only')


六、高级自动化技巧


使用GUI自动化控制桌面应用


使用pyautogui自动化操作桌面应用。


import pyautogui


import time


def automate_office_app():


# 打开Word应用


pyautogui.hotkey('winleft', 'r')


pyautogui.typewrite('winword')


pyautogui.press('enter')


time.sleep(3) # 等待Word启动


# 创建新文档 pyautogui.hotkey('ctrl', 'n') time.sleep(1) # 输入标题 pyautogui.typewrite('自动化生成的文档\n\n', interval=0.1) # 设置标题格式 pyautogui.hotkey('ctrl', 'a') pyautogui.hotkey('ctrl', 'shift', '>') # 增大字体 pyautogui.hotkey('ctrl', 'b') # 加粗 pyautogui.press('home') # 回到行首 pyautogui.hotkey('ctrl', 'e') # 居中对齐 # 保存文档 pyautogui.hotkey('ctrl', 's') time.sleep(1) pyautogui.typewrite('auto_document.docx') pyautogui.press('enter') time.sleep(1) # 关闭Word pyautogui.hotkey('alt', 'f4') print("Word文档自动化操作完成")


使用前请注意:


1. 确保所有操作可见


2. 设置安全暂停


pyautogui.PAUSE = 1.0


pyautogui.FAILSAFE = True


automate_office_app() # 取消注释运行


浏览器自动化


使用selenium自动化网页操作。


from selenium import webdriver


from selenium.webdriver.common.by import By


from selenium.webdriver.common.keys import Keys


import time


def web_automation():


# 启动浏览器


driver = webdriver.Chrome()


try: # 打开网页 driver.get("
https://www.example.com/login") time.sleep(2) # 输入用户名和密码 username = driver.find_element(By.ID, "username") password = driver.find_element(By.ID, "password") username.send_keys("your_username") password.send_keys("your_password") # 点击登录按钮 login_button = driver.find_element(By.XPATH, "//button[@type='submit']") login_button.click() time.sleep(3) # 导航到报表页面 driver.get("
https://www.example.com/reports") time.sleep(2) # 下载报表 download_button = driver.find_element(By.LINK_TEXT, "下载Excel报表") download_button.click() time.sleep(5) print("网页自动化操作完成") finally: # 关闭浏览器 driver.quit()


web_automation() # 取消注释运行


七、自动化任务调度


使用Windows任务计划


结合Python脚本和Windows任务计划实现定时任务。


import os


import sys


def scheduled_task():


# 检查是否通过任务计划程序启动


if len(sys.argv) > 1 and sys.argv[1] == '--scheduled':


print("任务计划程序启动的任务")


# 执行实际任务代码


main_task()


else:


# 创建任务计划


create_scheduled_task()


def main_task():


# 这里是实际要执行的任务


print("执行主任务...")


# 例如备份文件、发送邮件等


def create_scheduled_task():


script_path = os.path.abspath(file)


python_exe = sys.executable


# 创建任务计划的命令 task_name = "Python自动化任务" command = f'schtasks /create /tn "{task_name}" /tr "{python_exe} {script_path} --scheduled" /sc daily /st 09:00' print("创建任务计划命令:") print(command) # 实际使用时取消下一行注释 # os.system(command)


scheduled_task()


八、异常处理与日志记录


完善的异常处理和日志记录


为自动化脚本添加健壮的异常处理和日志功能。


import logging


from logging.handlers import RotatingFileHandler


import traceback


import sys


def setup_logging():


# 创建日志记录器


logger = logging.getLogger('auto_office')


logger.setLevel(logging.INFO)


# 创建文件处理器,限制每个日志文件10MB,保留3个备份 file_handler = RotatingFileHandler( 'automation.log', maxBytes=10*1024*1024, backupCount=3, encoding='utf-8' ) file_handler.setFormatter(logging.Formatter( '%(asctime)s - %(levelname)s - %(message)s' )) # 创建控制台处理器 console_handler = logging.StreamHandler()
console_handler.setFormatter(logging.Formatter( '%(levelname)s - %(message)s' )) # 添加处理器 logger.addHandler(file_handler) logger.addHandler(console_handler) return logger


def main_workflow():


logger = setup_logging()


try: logger.info("开始执行自动化任务") # 模拟任务步骤 logger.info("步骤1: 准备数据") prepare_data() logger.info("步骤2: 处理文档") process_documents() logger.info("步骤3: 发送报告") send_reports() logger.info("自动化任务完成") except Exception as e: logger.error(f"任务执行失败: {str(e)}") logger.error(traceback.format_exc()) sys.exit(1)


def prepare_data():


# 模拟可能出错的操作


if False: # 模拟错误条件


raise ValueError("数据准备错误")


def process_documents():


# 文档处理逻辑


pass


def send_reports():


# 发送报告逻辑


pass


if name == "main":


main_workflow()


九、脚本打包与分发


将Python脚本打包为EXE


使用PyInstaller将脚本打包为可执行文件。


"""


将Python脚本打包为EXE的步骤:


安装PyInstaller:


pip install pyinstaller


打包脚本:


pyinstaller --onefile --windowed your_script.py


可选参数:


--icon=app.ico # 设置图标


--name=MyApp # 设置应用名称


--add-data="file.txt;." # 添加数据文件


打包后的EXE位于dist文件夹


注意:


对于需要管理员权限的脚本,可以创建清单文件


复杂的脚本可能需要额外的依赖处理


"""


十、自动化最佳实践


模块化设计


将常用功能封装为独立函数或类


保持每个函数只做一件事


使用配置文件管理可变参数


错误处理


预料可能出现的错误并处理


提供有意义的错误信息


实现适当的重试机制


日志记录


记录关键操作和决策点


区分不同日志级别(DEBUG, INFO, WARNING, ERROR)


定期轮换日志文件


安全考虑


不要硬编码敏感信息


使用环境变量或加密配置文件


限制脚本权限


性能优化


批量处理代替逐个处理


使用高效的数据结构


避免不必要的I/O操作


维护性


添加清晰的注释


编写README文档


保持代码风格一致


通过以上这些高级自动化技巧,你可以将Python办公自动化提升到专业水平,处理更复杂的办公场景和任务。

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言