备忘2
#! /usr/bin/python3
# coding=utf-8
import os
import xlrd
import smtplib
import pandas as pd
file_path = input("请输入需要发送的文件名称【注意全称包含文件名】格式为:(./文件名.xlsx):")
card_list = []
def show_menu():
"""显示菜单"""
print("*" * 50)
print("")
print("欢迎使用 【 自动发送系统 】 V 1.0")
print("")
print("选择 【1】 显示全部名单")
print("选择 【2】 发送到邮箱")
print("")
print("选择 【0】 退出系统")
print("")
print("*" * 50)
def show_all():
"""
显示所有人员信息
:return: 把值返回给函数
"""
print("=" * 50)
print("显示所有人员信息")
if len(card_list) == 0:
print("当前没有任何人员信息记录,请检查是否添加发送表格!")
return
print("")
# 打印分割线
print("#" * 50)
# 遍历列表依次输出字典信息
# for card_dict in card_list:
# print(card_dict["value"])
df = pd.read_excel(file_path)
df = df.set_index('姓名') #表示索引为'姓名'的值,即去掉默认索引(1,2,3...)
print(df)
# print("-----------------------前3行-------------------------")
# print(df.head(3)) # 显示文件前几行信息括号中可以加显示行号参数
# print("="*50)
# print("-----------------------后3行-------------------------")
# print(df.tail(3)) # 显示末尾几行数据可以加参数
def r_excel_cards():
# 先打开一个文件
wb = xlrd.open_workbook(file_path)
# 获取第一个表
sheet1 = wb.sheet_by_index(0)
# 总行数
nrows = sheet1.nrows
# 总列数
ncols = sheet1.ncols
# 后面就通过循环即可遍历数据了
# 取数据
for i in range(ncols):
for j in range(nrows):
# cell_value方法取出第i行j列的数据
value = sheet1.cell_value(j, i)
card_dict = {"value": value, }
card_list.append(card_dict)
def email_qq():
from email.mime.text import MIMEText # 邮件正文
from email.header import Header # 邮件头
# 加载Excel文件
wb = xlrd.open_workbook(file_path)
sheet = wb.sheet_by_index(0)
user_name = input("请输入您自己的邮箱号:")
user_pass = input("请输入邮箱密码:")
# 登录邮箱
smtp_obj = smtplib.SMTP()
smtp_obj.connect("smtp.qq.com")
smtp_obj.login(user_name + "@qq.com", user_pass)
# 循环遍历Excel
count = 0
table_col_html = '<thead>' # 表头
for row in sheet: # sheet.iter_rows(min_row=0)
count += 1
if count == 1: # 第一行
for col in row:
table_col_html += f"<th>{col.value}</th>"
table_col_html += "</thead>"
# print(table_col_html)
continue
else:
row_text = "<tr>" # 开始一行
for cell in row:
row_text += f"<td>{cell.value}</td>"
row_text += "</tr>" # 结束一行
name = row[1]
staff_email = row[0].value
# print(name.value, staff_email)
mail_body_context = f'''
<h3>{name.value}\t你好:</h3>
<p>请查收您本月工资,如有疑问电话联系</p>
<table border="1px solid black">
{table_col_html}
{row_text}
</table>
'''
msg_body = MIMEText(mail_body_context, "html", "utf-8")
msg_body["From"] = Header("xxx公司人事部", "utf-8") # 发送者
msg_body["To"] = Header("xxx公司员工", "utf-8") # 接受者
msg_body["Subject"] = Header("xxx公司", "utf-8") # 主题
# 发邮件
smtp_obj.sendmail(user_name + "@qq.com", [staff_email, ], msg_body.as_string())
print(f"成功发送 {name.value} 到 {staff_email} 中.....")
while True:
# 显示菜单
show_menu()
action_str = input("请选择希望执行的操作:")
print("您选择的操作是 【%s】" % action_str)
if action_str in ["1", "2", "3"]:
if action_str == "1":
r_excel_cards()
show_all()
elif action_str == "2":
email_qq()
elif action_str == "0":
print("欢迎再次使用 【 自动发送系统 】")
# w_excel_cards()
break
else:
print("您输入的序号不正确请重新输入!")