当前位置:首页>python>拒绝加班!用Python批量处理100个Excel表格

拒绝加班!用Python批量处理100个Excel表格

  • 2026-10-11 06:15:12
拒绝加班!用Python批量处理100个Excel表格

拒绝加班!用Python批量处理100个Excel表格

还在手动打开一个个Excel文件复制粘贴?用Python 1分钟搞定100个表格,准时下班不是梦!

言

每到月底,财务、HR、运营的同学们都要面对一个噩梦:批量处理大量Excel表格。

  • • 合并100个分公司的销售报表
  • • 汇总各部门的考勤数据
  • • 提取每个客户的订单信息
  • • 批量修改表格格式

手动操作?一个表格5分钟,100个表格就是8个多小时!

今天教你用Python,1分钟搞定100个Excel表格,从此告别加班!

欢迎大家关注此公众号,后台点击按钮【免费资料】可免费获取【Python入门30节课】电子书

  1. 此外小庄推荐一本适合于新手\小白入手一本 Python基础书籍,欢迎大家订阅,也感谢大家支持,我才有更新的动力

一、环境准备

1.1 安装必要的库

pip install pandas openpyxl xlsxwriter

2.2 库的说明

库名
作用
pandas
数据处理神器,DataFrame是核心
openpyxl
读写Excel文件(.xlsx)
xlsxwriter
生成格式丰富的Excel文件

二、基础操作:读取单个Excel

import pandas as pd

# 读取Excel文件
df = pd.read_excel('销售报表.xlsx')

# 查看前5行数据
print(df.head())

# 查看数据基本信息
print(df.info())

# 查看数据形状(行数,列数)
print(df.shape)

三、实战场景1:批量读取文件夹中的Excel

3.1 场景描述

一个文件夹中有100个Excel文件,需要全部读取并合并成一个总表。

3.2 代码实现

import pandas as pd
import os

# 设置文件夹路径
folder_path = './销售数据/'

# 获取所有Excel文件
excel_files = [f for f in os.listdir(folder_path) if f.endswith('.xlsx')]

# 存储所有数据
all_data = []

# 批量读取
for file in excel_files:
    file_path = os.path.join(folder_path, file)
    df = pd.read_excel(file_path)
# 添加一列记录文件来源
    df['来源文件'] = file
    all_data.append(df)

# 合并所有数据
result = pd.concat(all_data, ignore_index=True)

# 保存结果
result.to_excel('合并结果.xlsx', index=False)

print(f'成功合并 {len(excel_files)} 个文件,共 {len(result)} 行数据')

四、实战场景2:批量提取特定列

4.1 场景描述

每个Excel文件中只需要提取"姓名"、"部门"、"工资"三列。

4.2 代码实现

import pandas as pd
import os

defextract_columns(file_path, columns):
"""提取指定列"""
    df = pd.read_excel(file_path)
# 只保留需要的列
return df[columns]

# 需要提取的列
target_columns = ['姓名', '部门', '工资']

folder_path = './工资表/'
excel_files = [f for f in os.listdir(folder_path) if f.endswith('.xlsx')]

all_data = []
for file in excel_files:
    file_path = os.path.join(folder_path, file)
    df = extract_columns(file_path, target_columns)
    all_data.append(df)

result = pd.concat(all_data, ignore_index=True)
result.to_excel('工资汇总.xlsx', index=False)

五、实战场景3:批量数据筛选

5.1 场景描述

从每个表格中筛选出"销售额 > 10000"的记录。

5.2 代码实现

import pandas as pd
import os

folder_path = './销售数据/'
excel_files = [f for f in os.listdir(folder_path) if f.endswith('.xlsx')]

all_filtered = []

for file in excel_files:
    file_path = os.path.join(folder_path, file)
    df = pd.read_excel(file_path)

# 筛选销售额大于10000的记录
    filtered = df[df['销售额'] > 10000]
    all_filtered.append(filtered)

result = pd.concat(all_filtered, ignore_index=True)
result.to_excel('高销售额记录.xlsx', index=False)

print(f'筛选出 {len(result)} 条高销售额记录')

六、实战场景4:批量数据统计

6.1 场景描述

统计每个文件中的数据汇总(求和、平均值、计数等)。

6.2 代码实现

import pandas as pd
import os

folder_path = './销售数据/'
excel_files = [f for f in os.listdir(folder_path) if f.endswith('.xlsx')]

stats_list = []

for file in excel_files:
    file_path = os.path.join(folder_path, file)
    df = pd.read_excel(file_path)

# 计算统计数据
    stats = {
'文件名': file,
'记录数': len(df),
'销售总额': df['销售额'].sum(),
'平均销售额': df['销售额'].mean(),
'最高销售额': df['销售额'].max(),
'最低销售额': df['销售额'].min()
    }
    stats_list.append(stats)

# 创建统计结果表
stats_df = pd.DataFrame(stats_list)
stats_df.to_excel('销售统计汇总.xlsx', index=False)

七、实战场景5:批量格式化输出

7.1 场景描述

将处理后的数据输出为格式美观的Excel文件。

7.2 代码实现

import pandas as pd

# 创建示例数据
data = {
'姓名': ['张三', '李四', '王五'],
'部门': ['技术部', '销售部', '财务部'],
'工资': [15000, 12000, 13000]
}
df = pd.DataFrame(data)

# 使用xlsxwriter创建格式化的Excel
writer = pd.ExcelFormattter('formatted_output.xlsx', engine='xlsxwriter')
df.to_excel(writer, sheet_name='工资表', index=False)

# 获取workbook和worksheet对象
workbook = writer.book
worksheet = writer.sheets['工资表']

# 定义格式
header_format = workbook.add_format({
'bold': True,
'bg_color': '
#4472C4',
'font_color': 'white',
'border': 1
})

money_format = workbook.add_format({'num_format': '#,##0'})

# 应用格式
for col_num, value inenumerate(df.columns.values):
    worksheet.write(0, col_num, value, header_format)

# 设置列宽
worksheet.set_column('A:A', 15)
worksheet.set_column('B:B', 15)
worksheet.set_column('C:C', 15, money_format)

writer.close()

八、完整实战案例:批量处理并生成报告

import pandas as pd
import os
from datetime import datetime

defbatch_process_excel(folder_path, output_file):
"""批量处理Excel文件并生成报告"""

# 获取所有Excel文件
    excel_files = [f for f in os.listdir(folder_path) if f.endswith('.xlsx')]

ifnot excel_files:
print("未找到Excel文件!")
return

    all_data = []
    processed_count = 0

for file in excel_files:
try:
            file_path = os.path.join(folder_path, file)
            df = pd.read_excel(file_path)

# 添加文件来源列
            df['来源文件'] = file
            df['处理时间'] = datetime.now().strftime('%Y-%m-%d %H:%M:%S')

            all_data.append(df)
            processed_count += 1

except Exception as e:
print(f"处理文件 {file} 时出错: {e}")

if all_data:
# 合并所有数据
        result = pd.concat(all_data, ignore_index=True)

# 保存结果
        result.to_excel(output_file, index=False)

print(f"=" * 50)
print(f"处理完成!")
print(f"成功处理: {processed_count} 个文件")
print(f"总记录数: {len(result)} 条")
print(f"输出文件: {output_file}")
print(f"=" * 50)
else:
print("没有成功处理任何文件!")

# 使用示例
if __name__ == '__main__':
    batch_process_excel('./销售数据/', '汇总报告.xlsx')

九、性能优化技巧

9.1 使用多进程加速

from multiprocessing import Pool
import pandas as pd
import os

defprocess_single_file(file_path):
"""处理单个文件"""
return pd.read_excel(file_path)

defbatch_process_parallel(folder_path, n_processes=4):
"""使用多进程批量处理"""
    excel_files = [
        os.path.join(folder_path, f) 
for f in os.listdir(folder_path) 
if f.endswith('.xlsx')
    ]

with Pool(n_processes) as pool:
        results = pool.map(process_single_file, excel_files)

return pd.concat(results, ignore_index=True)

9.2 使用chunksize分块读取大文件

defread_large_excel(file_path, chunksize=10000):
"""分块读取大文件"""
    chunks = []
for chunk in pd.read_excel(file_path, chunksize=chunksize):
# 处理每个块
        processed_chunk = chunk[chunk['销售额'] > 0]
        chunks.append(processed_chunk)

return pd.concat(chunks, ignore_index=True)

十、常见问题解答

Q1: 文件编码问题怎么办?

# 尝试不同编码
df = pd.read_excel(file_path, encoding='utf-8')  # 默认
df = pd.read_excel(file_path, encoding='gbk')    # 中文Windows常用

Q2: 如何处理不同格式的Excel?

# 指定引擎
df = pd.read_excel(file_path, engine='openpyxl')  # .xlsx
df = pd.read_excel(file_path, engine='xlrd')      # .xls

Q3: 内存不足怎么处理?

# 只读取需要的列
df = pd.read_excel(file_path, usecols=['姓名', '工资'])

# 指定数据类型减少内存
df = pd.read_excel(file_path, dtype={'工资': 'float32'})

总结

场景
方法
效率提升
合并文件
pd.concat()
100倍+
提取列
df[columns]
50倍+
数据筛选
df[df['col'] > value]
80倍+
数据统计
df.agg()
100倍+

记住:Python不是要取代Excel,而是让Excel为你工作!

下期预告

下一篇我们将讲解:如何用Python打造一个财务/HR专用的数据处理工具,敬请期待!


关注我,每天学习一个Python小技巧,让你的工作效率翻倍!

最新文章

随机文章