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

每到月底,财务、HR、运营的同学们都要面对一个噩梦:批量处理大量Excel表格。
手动操作?一个表格5分钟,100个表格就是8个多小时!
今天教你用Python,1分钟搞定100个Excel表格,从此告别加班!
欢迎大家关注此公众号,后台点击按钮【免费资料】可免费获取【Python入门30节课】电子书

此外小庄推荐一本适合于新手\小白入手一本 Python基础书籍,欢迎大家订阅,也感谢大家支持,我才有更新的动力
pip install pandas openpyxl xlsxwriterimport pandas as pd
# 读取Excel文件
df = pd.read_excel('销售报表.xlsx')
# 查看前5行数据
print(df.head())
# 查看数据基本信息
print(df.info())
# 查看数据形状(行数,列数)
print(df.shape)一个文件夹中有100个Excel文件,需要全部读取并合并成一个总表。
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)} 行数据')每个Excel文件中只需要提取"姓名"、"部门"、"工资"三列。
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)从每个表格中筛选出"销售额 > 10000"的记录。
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)} 条高销售额记录')统计每个文件中的数据汇总(求和、平均值、计数等)。
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)将处理后的数据输出为格式美观的Excel文件。
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')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)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)# 尝试不同编码
df = pd.read_excel(file_path, encoding='utf-8') # 默认
df = pd.read_excel(file_path, encoding='gbk') # 中文Windows常用# 指定引擎
df = pd.read_excel(file_path, engine='openpyxl') # .xlsx
df = pd.read_excel(file_path, engine='xlrd') # .xls# 只读取需要的列
df = pd.read_excel(file_path, usecols=['姓名', '工资'])
# 指定数据类型减少内存
df = pd.read_excel(file_path, dtype={'工资': 'float32'})记住:Python不是要取代Excel,而是让Excel为你工作!
下一篇我们将讲解:如何用Python打造一个财务/HR专用的数据处理工具,敬请期待!
关注我,每天学习一个Python小技巧,让你的工作效率翻倍!