我用Python干掉90%重复活!3个办公黑科技,每天多睡1小时

B站影视 电影资讯 2025-09-23 15:29 1

摘要:曾天天加班到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小时,你要是运行报错(比如“找不到文件”),把报错截图发给我,我帮你排查。需要我把某个脚本的操作做成图文小教程吗?

来源:绿叶菜

相关推荐