跳过正文

《WPS与Python自动化办公:使用第三方库批量处理文档与表格》

在当今快节奏的办公环境中,重复性文档与表格处理工作正消耗着大量宝贵时间。想象一下,你需要将上百份Word文档中的特定信息提取出来并汇总到Excel,或者需要根据一个数据源批量生成几十份格式统一的报告。手动操作不仅效率低下,而且极易出错。此时,自动化便成为提升生产力的关键。

WPS Office作为一款功能强大的国产办公软件,其文件格式与Microsoft Office高度兼容。这为我们提供了一个绝佳的自动化切入点:使用Python编程语言,配合专为处理Office文档设计的第三方库,来批量操控WPS生成的文档(.docx/.doc)和表格(.xlsx/.xls)。本文将为你提供一份从零开始、直达实战的完整指南,带你解锁WPS自动化办公的强大能力。

wps下载 导入库

一、 为何选择Python与第三方库进行WPS自动化?
#

在深入技术细节之前,我们有必要理解这种自动化方案的优势与适用场景。

1.1 方案优势

  • 高效批量处理:Python脚本可以不知疲倦地处理成千上万份文件,将数天甚至数周的手工劳动压缩到几分钟内完成。
  • 高精度与零误差:一旦逻辑正确,程序执行将完全规避人为操作中可能出现的遗漏、错位等错误。
  • 灵活性极高:Python拥有丰富的生态系统,你可以将文档处理与网络请求、数据分析、邮件发送等其他任务无缝结合,构建复杂的自动化工作流。
  • 可重复与可继承:编写好的脚本可以保存并反复使用,也可以轻松分享给团队成员,形成团队的知识资产。

1.2 核心工具:Python第三方库

我们将主要依赖以下两个库,它们因其易用性和强大功能而成为行业标准:

  • python-docx:用于创建和修改Microsoft Word .docx文件(WPS文字默认保存格式)。它可以读取段落、表格、样式,并写入新内容。
  • openpyxl:用于读写Microsoft Excel .xlsx文件(WPS表格默认保存格式)。它支持单元格操作、公式、图表、样式等。

重要前提:这些库操作的是文件本身,而非通过软件界面。这意味着你无需打开WPS软件,脚本直接与磁盘上的.docx/.xlsx文件交互。由于WPS完美支持这些开放标准格式,因此处理结果在WPS中打开效果完全一致。

如果你对WPS自带的自动化功能感兴趣,可以参考我们之前的文章《 WPS宏与自动化办公入门到精通》,其中详细介绍了使用内置JS宏进行自动化的方法。而本文介绍的Python方案,则在处理复杂逻辑、跨应用集成和大规模批处理方面更具优势。

二、 环境搭建与基础准备
#

wps下载 二、 环境搭建与基础准备

工欲善其事,必先利其器。让我们先搭建好自动化开发环境。

2.1 安装Python

访问 Python官网 下载并安装最新稳定版。安装时请务必勾选 “Add Python to PATH” 选项。

2.2 安装必要的第三方库

打开系统命令行(CMD或终端),使用pip(Python包管理器)安装核心库:

pip install python-docx openpyxl

为了后续可能的数据处理,建议一并安装强大的pandas库:

pip install pandas

2.3 验证安装与第一个脚本

创建一个新的Python文件(例如wps_auto.py),输入以下代码验证环境:

# 导入库
from docx import Document
import openpyxl

print(python-docx  openpyxl 库导入成功环境准备就绪!”)

运行该脚本,若未报错,则说明环境配置成功。

三、 使用python-docx批量处理WPS文档
#

wps下载 三、 使用`python-docx`批量处理WPS文档

python-docx将Word文档抽象为一个Document对象,文档内容由Paragraph(段落)和Table(表格)等对象组成。

3.1 核心对象与操作

  • 打开与创建文档

    from docx import Document
    # 打开现有文档
    doc = Document(现有报告.docx)
    # 创建新文档
    new_doc = Document()
    
  • 操作段落

    # 添加段落
    p = new_doc.add_paragraph(这是一个新段落。’)
    # 添加带样式的文本(例如:标题)
    new_doc.add_heading(文档标题, level=1)
    # 遍历读取所有段落
    for paragraph in doc.paragraphs:
        print(paragraph.text)
    
  • 操作表格

    # 添加表格(3行4列)
    table = new_doc.add_table(rows=3, cols=4)
    # 为单元格赋值
    cell = table.cell(0, 0) # 第1行第1列
    cell.text = 姓名
    # 遍历读取现有文档中的表格
    for table in doc.tables:
        for row in table.rows:
            for cell in row.cells:
                print(cell.text)
    
  • 保存文档

    doc.save(修改后的文档.docx)
    

3.2 实战案例一:批量信息提取与汇总

场景:你有一个文件夹,里面存放了数百份员工提交的“.docx”格式周报。你需要快速提取每份周报中的“本周工作总结”和“下周计划”两部分内容,并汇总到一个Excel文件中。

步骤清单

  1. 规划数据结构:确定Excel表中需要哪些列,例如“文件名”、“员工姓名”、“本周总结”、“下周计划”。
  2. 编写提取函数:使用python-docx打开单个文档,通过识别特定标题(如“一、本周工作总结”)或段落位置来定位并提取目标文本。
  3. 遍历文件夹:使用Python的os库列出文件夹内所有.docx文件。
  4. 循环处理:对每个文件调用提取函数。
  5. 写入Excel:使用openpyxlpandas将提取到的数据逐行写入一个新的.xlsx文件。

简化代码框架

import os
from docx import Document
import openpyxl

def extract_report_info(doc_path):
    “””从单个周报文档中提取信息”””
    doc = Document(doc_path)
    # 这里需要根据你的文档实际结构编写定位逻辑
    # 例如,假设“本周工作总结”是第一个二级标题后的段落
    summary = “”
    plan = “”
    # … (具体的文本提取逻辑)
    return {filename: os.path.basename(doc_path), summary: summary, plan: plan}

# 主程序
reports_folder = ./周报文件夹/
all_data = []
for file_name in os.listdir(reports_folder):
    if file_name.endswith(.docx):
        file_path = os.path.join(reports_folder, file_name)
        info = extract_report_info(file_path)
        all_data.append(info)

# 使用openpyxl写入Excel
wb = openpyxl.Workbook()
ws = wb.active
ws.append([文件名’, 本周总结’, 下周计划])
for item in all_data:
    ws.append([item[filename], item[summary], item[plan]])
wb.save(周报汇总.xlsx)
print(信息汇总完成!”)

3.3 实战案例二:根据模板批量生成文档

场景:公司需要向100位客户发送邀请函,邀请函模板固定,只需替换客户姓名、公司名称和会议时间。

步骤清单

  1. 制作模板:在WPS中创建一个精美的邀请函模板template.docx,将需要替换的位置用独特的占位符标出,例如{{client_name}}{{company}}
  2. 准备数据源:创建一个clients.xlsx表格,包含“客户姓名”、“公司”、“邮箱”等列。
  3. 编写生成脚本:读取数据源,对每一行数据,复制模板文档,将文档中的所有占位符替换为实际数据。
  4. 保存输出:为每位客户生成一个独立的邀请函文件。

核心替换逻辑

from docx import Document

def replace_in_paragraph(paragraph, key, value):
    “””在段落内替换占位符文本”””
    if key in paragraph.text:
        inline = paragraph.runs
        for i in range(len(inline)):
            if key in inline[i].text:
                inline[i].text = inline[i].text.replace(key, value)

# 加载模板和数据
doc = Document(template.docx)
client_data = {{{client_name}}: 张伟’, {{company}}: 创新科技}

# 遍历所有段落进行替换
for paragraph in doc.paragraphs:
    for key, value in client_data.items():
        replace_in_paragraph(paragraph, key, value)

# 遍历所有表格单元格进行替换(邀请函关键信息可能在表格中)
for table in doc.tables:
    for row in table.rows:
        for cell in row.cells:
            for paragraph in cell.paragraphs:
                for key, value in client_data.items():
                    replace_in_paragraph(paragraph, key, value)

doc.save(邀请函_张伟.docx)

通过循环读取clients.xlsx中的每一行,即可实现批量生成。此方法比传统的邮件合并更灵活,尤其适用于需要生成独立文件分发的场景。关于WPS自带的邮件合并功能,可参阅《 WPS邮件合并功能实战:批量制作信封、标签与邀请函》。

四、 使用openpyxl批量处理WPS表格
#

wps下载 四、 使用`openpyxl`批量处理WPS表格

openpyxl提供了对Excel工作簿、工作表、单元格的精细控制能力。

4.1 核心对象与操作

  • 打开与创建工作簿

    import openpyxl
    # 打开现有工作簿
    wb = openpyxl.load_workbook(数据报表.xlsx)
    # 创建新工作簿
    new_wb = openpyxl.Workbook()
    
  • 选择与操作工作表

    # 获取活动表或指定名称的表
    ws = wb.active
    ws = wb[Sheet1]
    # 创建新表
    new_ws = wb.create_sheet(title=月度数据)
    
  • 读写单元格

    # 读取单元格值
    value_a1 = ws[A1].value
    value_b2 = ws.cell(row=2, column=2).value
    # 写入单元格值
    ws[A1] = 标题
    ws.cell(row=3, column=1, value=数据)
    # 写入公式
    ws[D10] = =SUM(D2:D9)
    
  • 遍历行列

    # 遍历最大数据区域
    for row in ws.iter_rows(min_row=2, max_col=5, values_only=True):
        # row是一个元组,包含该行各列的值
        print(row)
    # 写入多行数据
    data = [[A, 1], [B, 2], [C, 3]]
    for row_data in data:
        ws.append(row_data)
    
  • 保存工作簿

    wb.save(修改后的报表.xlsx)
    

4.2 实战案例三:多表格数据合并与清洗

场景:每月各分公司会提交一个格式相同的销售数据Excel表(sales_分公司名_月份.xlsx),你需要将它们合并到一张总表,并清理掉重复项和无效数据(如销售额为空或为0的行)。

步骤清单

  1. 定位文件:使用globos模块找到所有符合命名模式的分公司报表。
  2. 统一读取:用openpyxl打开每个文件,定位到数据所在的具体工作表(如Sheet1)。
  3. 提取有效数据:遍历行,应用清洗规则(如销售额>0),将有效数据行添加到一个总列表中。
  4. 去重:根据唯一标识(如“订单ID”)对总列表进行去重。
  5. 写入总表:将清洗合并后的数据写入一个新的工作簿,并可以添加汇总行或图表。

简化代码框架

import openpyxl
import os
import glob

def clean_and_merge_sheets(file_pattern, output_file):
    all_data = []
    seen_ids = set() # 用于去重

    for file_path in glob.glob(file_pattern):
        wb = openpyxl.load_workbook(file_path, data_only=True) # data_only=True读取公式结果值
        ws = wb.active
        # 假设数据从第2行开始,第1列为订单ID,第5列为销售额
        for row in ws.iter_rows(min_row=2, values_only=True):
            order_id, sales = row[0], row[4]
            # 清洗逻辑:销售额有效且订单ID未出现过
            if sales and sales > 0 and order_id not in seen_ids:
                all_data.append(row)
                seen_ids.add(order_id)

    # 写入新的总表
    new_wb = openpyxl.Workbook()
    new_ws = new_wb.active
    new_ws.title = 合并销售数据
    # 写入表头(需要根据原表头定义)
    new_ws.append([订单ID’, 客户’, 产品’, 日期’, 销售额])
    for row in all_data:
        new_ws.append(row)

    # 添加一个简单的总计
    last_row = new_ws.max_row
    new_ws.cell(row=last_row+1, column=4, value=总计:”)
    new_ws.cell(row=last_row+1, column=5, value=f=SUM(E2:E{last_row}))

    new_wb.save(output_file)
    print(f数据合并清洗完成共处理{len(all_data)}条有效记录。“)

# 调用函数
clean_and_merge_sheets(./月度报表/sales_*.xlsx’, 年度销售总表.xlsx)

4.3 实战案例四:自动化数据透视与报表生成

虽然openpyxl本身创建复杂数据透视表的能力有限,但我们可以利用pandas库(数据分析神器)进行快速的数据透视分析,再将结果优雅地写回Excel。

场景:你有一张详细的订单明细表,需要按“产品类别”和“月份”生成销售额汇总报表,并自动生成格式化的Excel文件。

步骤清单

  1. 使用pandas读取Excelpandas.read_excel()函数可以轻松将整个工作表读入DataFrame
  2. 数据透视:使用pandas.pivot_table()函数,指定行索引、列索引和要聚合的数值字段。
  3. 结果格式化:对透视结果进行排序、计算占比等操作。
  4. 写入Excel:使用openpyxl引擎,通过pandas.ExcelWriter将多个DataFrame写入同一Excel的不同工作表,并可以利用openpyxl调整单元格样式。

简化代码示例

import pandas as pd
from openpyxl import load_workbook
from openpyxl.styles import Font, Alignment, numbers

# 1. 读取数据
df = pd.read_excel(订单明细.xlsx)

# 2. 确保日期列是日期类型,并提取月份
df[订单日期] = pd.to_datetime(df[订单日期])
df[月份] = df[订单日期].dt.strftime(%Y-%m)

# 3. 创建数据透视表
pivot_table = pd.pivot_table(df,
                             values=销售额,
                             index=产品类别,
                             columns=月份,
                             aggfunc=sum,
                             fill_value=0,
                             margins=True, # 添加总计行/列
                             margins_name=总计)

# 4. 写入Excel,并应用基础格式
output_file = 销售透视报表.xlsx
with pd.ExcelWriter(output_file, engine=openpyxl) as writer:
    pivot_table.to_excel(writer, sheet_name=月度销售透视)
    # 获取工作表对象进行格式化
    workbook = writer.book
    worksheet = writer.sheets[月度销售透视]
    # 设置数字格式为货币,加粗标题等
    for col in worksheet.columns:
        for cell in col:
            if isinstance(cell.value, (int, float)) and cell.row > 1:
                cell.number_format = numbers.FORMAT_CURRENCY_CNY_SIMPLE
            if cell.row == 1:
                cell.font = Font(bold=True)
                cell.alignment = Alignment(horizontal=center)

print(数据透视报表已生成并格式化。”)

这个案例展示了Python生态的威力:pandas负责繁重的数据计算,openpyxl负责最终输出的精细控制。对于更深入的WPS表格函数应用,你可以结合学习《 WPS表格高级函数与数据分析实战教程》,将内置函数与外部自动化脚本的优势相结合。

五、 高级技巧与最佳实践
#

掌握了基础操作后,以下技巧能让你的自动化脚本更健壮、更高效。

5.1 错误处理与日志记录

批量处理时,个别文件可能损坏或格式不符。使用try-except块捕获异常,并记录到日志文件,避免整个脚本因一个错误而中断。

import logging
logging.basicConfig(filename=automation.log, level=logging.INFO, format=%(asctime)s - %(levelname)s - %(message)s)

def process_file(file_path):
    try:
        # … 处理逻辑 …
        logging.info(f成功处理文件 {file_path})
    except Exception as e:
        logging.error(f处理文件 {file_path} 时出错 {e}, exc_info=True)

# 在主循环中调用process_file

5.2 性能优化

  • 对于openpyxl:在只读模式下打开文件(read_only=True)可以极大提升读取大文件的速度;在只写模式下(write_only=True)可以高效生成包含海量行数据的新文件。
  • 减少内存占用:对于超大文件,考虑使用iter_rows分批读取处理,而不是一次性将所有数据加载到内存。
  • 缓存样式:如果需要为大量单元格应用相同样式,先创建一个样式对象,然后重复赋值,比逐个设置属性快得多。

5.3 与WPS宏/JS API的协同

在某些场景下,Python外部脚本与WPS内置的JS宏可以协同工作:

  • Python作为预处理工具:用Python清洗、整合来自多个源头(数据库、网站API)的原始数据,生成一个结构化的Excel文件。
  • WPS宏作为后处理工具:用JS宏打开Python生成的Excel文件,执行一些依赖WPS界面或特定WPS对象模型的操作,如刷新特定类型的数据透视表、执行特殊的打印设置、生成WPS特有的图表格式等。
  • 通信方式:可以通过中间文件(如一个标识完成的.lock文件或一个JSON配置文件)或简单的命令行参数来协调两者。例如,Python脚本完成任务后,调用系统命令启动WPS并运行一个指定的宏。

六、 常见问题解答 (FAQ)
#

Q1: 我写的Python脚本处理后的.docx文件,在WPS中打开样式乱了怎么办? A1: python-docx主要处理内容和基础样式(如加粗、字体)。如果模板使用了复杂的自定义样式或WPS特有样式,直接替换文本可能会破坏样式关联。建议:1) 在模板中尽量使用标准的“正文”、“标题1”等样式;2) 替换操作后,尝试重新应用一次样式;3) 如果样式至关重要,考虑使用WPS JS宏进行自动化,它对本体的样式兼容性更好。

Q2: 能处理老的.doc.xls格式文件吗? A2: python-docxopenpyxl主要针对新的.docx.xlsx格式(基于Open XML)。要处理旧的二进制格式,你需要额外的库,如pywin32(仅限Windows,通过调用本机Word/Excel应用程序)或libreoffice的转换工具。最实用的建议是:在自动化流程开始前,先用WPS或脚本批量将旧格式文件转换为新格式。WPS本身就支持批量转换功能。

Q3: 这个自动化方案安全吗?会不会损坏我的原始文件? A3: 任何自动化操作都有风险。黄金法则:始终先对备份文件进行操作,或者让脚本先创建文件的副本并在副本上修改。在脚本中明确区分源文件夹和输出文件夹。在处理关键数据前,先用少量样本文件进行测试。

Q4: 我需要多深的Python知识才能开始? A4: 基础即可。你只需要理解变量、循环、条件判断、函数和列表/字典等基本数据结构。本文的案例代码可以直接修改使用。关键在于明确你的办公任务逻辑(第一步做什么,第二步判断什么),然后将这个逻辑翻译成代码。多查文档,多尝试。

Q5: 除了文档和表格,能用Python自动化WPS演示(PPT)吗? A5: 可以,但生态系统稍弱。对于.pptx文件,有一个类似的库叫python-pptx,其设计理念与python-docx类似,可以创建和修改幻灯片。你可以用它来批量更新PPT中的图表数据、统一修改公司Logo、或根据大纲批量生成幻灯片。对于复杂的动画或特效,自动化支持可能有限。

结语与延伸阅读
#

通过本文的探讨,相信你已经看到,将WPS与Python及第三方库结合,能够构建出强大、灵活的自动化办公解决方案。从简单的文本替换、数据汇总,到复杂的模板批量生成、数据透视分析,自动化能将你从重复劳动中解放出来,让你专注于更具创造性和战略性的工作。

行动建议:不要试图一开始就自动化所有事情。从一个最让你感到痛苦、重复频率最高的具体小任务开始。例如,先写一个脚本,每天自动将某个文件夹里的新文档名记录到Excel。成功会带来信心,进而驱动你解决更复杂的问题。

自动化不是要替代WPS,而是扩展其能力边界。当你熟练掌握这些技巧后,WPS将不再仅仅是一个点击操作的软件,而成为一个可通过代码精准、高效驱动的生产力核心。随着WPS自身AI功能的不断发展,如《 WPS AI智能办公功能详解与使用教程》中介绍的能力,未来“传统自动化脚本”与“智能AI辅助”的结合,必将开创出更智能的办公新范式。现在就动手,开启你的WPS自动化之旅吧。

本文由 WPS电脑版下载 站点提供,欢迎访问 WPS下载 页面了解更多办公软件资讯。