摘要:曾天天加班到9点的我,靠3个Python脚本把3小时工作压缩到5分钟,现在准点下班还能多睡1小时!这3个技巧不用懂编程,改改路径就能用,帮你从复制粘贴里彻底解放。
(附复制即用代码)
曾天天加班到9点的我,靠3个Python脚本把3小时工作压缩到5分钟,现在准点下班还能多睡1小时!这3个技巧不用懂编程,改改路径就能用,帮你从复制粘贴里彻底解放。
痛点:每月收20个部门报表,手动合并1.5小时,还总漏行、算错数。
解法:Python自动找文件、去重合并,还能美化报表。
小白3步操作
1. 把所有Excel放进同一文件夹(如“D:/部门报表”);
2. 复制代码,改3处路径(看注释);
3. 双击运行,等10秒出结果。
复制即用代码
import pandas as pd
import os
from openpyxl.styles import Font, PatternFill, Border, Side
# 报表美化样式(不用改)
Header_font = Font(name='微软雅黑', size=12, bold=True, color='FFFFFF')
header_fill = PatternFill(start_color='366092', end_color='366092', fill_type='solid')
thin_border = Border(left=Side(style='thin'), right=Side(style='thin'),
top=Side(style='thin'), bottom=Side(style='thin'))
def merge_excel(source_folder, output_file, deduplicate_col):
all_data = pd.DataFrame
# 遍历所有Excel
for root, _, files in os.walk(source_folder):
for file in files:
if file.endswith(('.xlsx', '.xls')) and not file.startswith('~$'):
df = pd.read_excel(os.path.join(root, file), engine='openpyxl', dtype={'ID': str})
df['数据来源'] = file
all_data = pd.concat([all_data, df], ignore_index=True)
# 去重并美化
all_data = all_data.drop_duplicates(subset=[deduplicate_col], keep='last')
with pd.ExcelWriter(output_file, engine='openpyxl') as writer:
all_data.to_excel(writer, sheet_name='合并数据', index=False)
ws = writer.sheets['合并数据']
# 加表头样式和边框
for col in range(1, len(all_data.columns)+1):
cell = ws.cell(row=1, column=col)
cell.font = header_font
cell.fill = header_fill
for row in ws.iter_rows(min_row=1, max_row=len(all_data)+1, min_col=1, max_col=len(all_data.columns)):
for cell in row:
cell.border = thin_border
# 改这3行
merge_excel(
source_folder='D:/部门报表', # 放Excel的文件夹
output_file='D:/月度总表.xlsx', # 合并后保存路径
deduplicate_col='订单号' # 去重字段(如身份证号)
)
痛点:改合同客户名、金额要1小时,还总写错,被客户吐槽不专业。
解法:Word模板+Excel数据,批量生成个性化合同。
小白3步操作
1. 做Word模板:把要改的内容用“{标记}”代替(如“{客户名称}”“{合同金额}”);
2. 整理Excel:列名和“{标记}”完全一致(如“客户名称”“合同金额”);
3. 复制代码,改3处路径,运行出合同。
复制即用代码
from docx import Document
import pandas as pd
import os
def batch_make_contracts(template_path, data_path, output_folder):
data = pd.read_excel(data_path, engine='openpyxl')
# 处理金额和日期格式
if '合同金额' in data.columns:
data['合同金额'] = data['合同金额'].apply(lambda x: f"{x:,.2f}元" if pd.notna(x) else '')
if '签订日期' in data.columns:
data['签订日期'] = data['签订日期'].apply(lambda x: x.strftime('%Y年%m月%d日') if pd.notna(x) else '')
os.makedirs(output_folder, exist_ok=True)
# 批量生成
for idx, row in data.iterrows:
doc = Document(template_path)
customer = row['客户名称'] if pd.notna(row['客户名称']) else f'客户{idx+1}'
# 替换段落和表格里的标记
for para in doc.paragraphs:
if '{' in para.text:
for col in data.columns:
para.text = para.text.replace(f"{{{col}}}", str(row[col]) if pd.notna(row[col]) else '')
for table in doc.tables:
for row_t in table.rows:
for cell in row_t.cells:
if '{' in cell.text:
cell.text = cell.text.replace(f"{{{col}}}", str(row[col]) if pd.notna(row[col]) else '')
doc.save(os.path.join(output_folder, f'{customer}_合同.docx'))
print(f"已生成:{customer}的合同")
# 改这3行
batch_make_contracts(
template_path='D:/合同模板.docx', # Word模板路径
data_path='D:/客户信息.xlsx', # 客户Excel路径
output_folder='D:/5月合同' # 合同保存文件夹
)
痛点:发报表邮件1小时,漏附件、写错名,领导批评不细心。
解法:自动连邮箱发邮件,带附件还能看日志。
小白2分钟准备
1. 开smtp服务:QQ邮箱点“设置-账户”开启SMTP,拿授权码(不是密码);
2. 整理Excel:要有“收件人邮箱”“客户名称”“附件文件名”。
复制即用代码
import smtplib
import pandas as pd
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
from email.header import Header
def batch_send_emails(smtp_server, smtp_port, sender_email, sender_auth, data_path, attachment_folder):
data = pd.read_excel(data_path, engine='openpyxl')
data = data[data['收件人邮箱'].notna]
if len(data) == 0:
print("无有效收件人!")
return
# 登录邮箱
try:
server = smtplib.SMTP_SSL(smtp_server, smtp_port)
server.login(sender_email, sender_auth)
except Exception as e:
print(f"登录失败:{e}")
return
# 批量发送
for _, row in data.iterrows:
to_email = str(row['收件人邮箱'])
customer = str(row['客户名称']) if pd.notna(row['客户名称']) else '客户'
attach_name = str(row['附件文件名']) if pd.notna(row['附件文件名']) else ''
msg = MIMEMultipart
msg['From'] = Header(f'业务部', 'utf-8')
msg['To'] = Header(to_email, 'utf-8')
msg['Subject'] = Header(f'【报表】{customer}数据', 'utf-8')
# 正文
msg.attach(MIMEText(f"尊敬的{customer}:附件为您的报表,有疑问请联系。", 'plain', 'utf-8'))
# 加附件
if attach_name != '':
attach_path = os.path.join(attachment_folder, attach_name)
if os.path.exists(attach_path):
with open(attach_path, 'rb') as f:
attach = MIMEApplication(f.read)
attach.add_header('Content-Disposition', 'attachment', filename=attach_name)
msg.attach(attach)
# 发送
try:
server.sendmail(sender_email, to_email, msg.as_string)
print(f"✅ 发给:{customer}")
except Exception as e:
print(f"❌ 失败:{customer},原因:{e}")
server.quit
# 改这6行
batch_send_emails(
smtp_server='smtp.qq.com', # 邮箱SMTP(.qq.com;163:smtp.163.com)
smtp_port=465, # 端口(SSL用465)
sender_email='123456@qq.com', # 你的邮箱
sender_auth='abcdefghijk', # 你的授权码
data_path='D:/客户邮箱.xlsx', # 收件人Excel
attachment_folder='D:/报表' # 附件文件夹
)
1. 装Python:百度搜“Python下载”,选3.9-3.11,安装时勾“Add Python to PATH”;
2. 装依赖:按Win+R输“cmd”,粘贴 pip install pandas openpyxl python-docx pywin32 回车;
3. 改代码路径,后缀改“.py”,双击运行。
这3个脚本帮我每天多睡1小时,你要是运行报错(比如“找不到文件”),把报错截图发给我,我帮你排查。需要我把某个脚本的操作做成图文小教程吗?
来源:绿叶菜