#遇到的问题
试着改写了一个读取工资表,然后自动读取数据并发送邮件的脚本,现在一切运行正常,但是发送的邮件里面, 最后的实发工资数据不正常,小数点后会有十二位数据,发送的前两条数据正常,第三条数据就不正常。EXCEL表格中有统计公式,单元格设置取小数点后两位。
先取列名
table_col_name = []
for row in sheet.rows:
for cell in row:
# print(cell.value)
table_col_name.append(cell.value)
break
循环excel
for row in sheet.iter_rows(min_row=2):
table_col_html = '<thead>' # 表头
row_text = '<tr>' # 开始一行
list_finally = table_col_name[:] # 最终的字段
for cell in row:
if cell.value == None or cell.value == 0: # 数据为零或空
cell.value="0"
row_text += f'<td>{cell.value}</td>'
else:
row_text += f'<td>{cell.value}</td>'
row_text += '</tr>' # 结束一行
重写首行
for i in list_finally:
table_col_html += f'<th bgcolor="89c3ed">{i}</th>'
table_col_html += '</thead>'
员工姓名
name = row[1].value # 从0开始数,第2列
staff_email = row[19].value # 员工邮箱地址 从0开始数,第20列
mail_body_context = f'''<h3>{name}:你好!</h3>
<p>请查收你{tm_Y}年{tm_M}月的工资条。</p>
<table border="1px solid black">
{table_col_html}
{row_text}
</table>
'''
msg = MIMEText(mail_body_context, 'html', 'utf-8')
msg['From'] = Header('XX公司人力资源部', 'utf-8') # 发送者
msg['To'] = Header(f'{name}', 'utf-8') # 接收者
msg['Subject'] = Header(f'XX公司 {tm_Y}年{tm_M}月工资条', 'utf-8') # 主题
发邮件
try:
send_email(smtp_obj, sender, [staff_email], msg.as_string())
print(f'成功发送工资条到{staff_email}--{name}...')
except smtplib.SMTPException as e:
print('Error:无法发送邮件.Case:%s' % e)
if name == 'main':
time_start = time.time()
smtp_server = 'smtp.qq.com' # SMTP服务器
ssl_port = 465 # SMTP端口
sender = '562112864@qq.com' # 发件人邮箱
passwd = '' # 发件人密码
filename = ""
smtp_obj = login(smtp_server, ssl_port, sender, passwd)
op_excel(smtp_obj, filename)
time_end = time.time()
print('脚本执行完毕,耗时%.3f秒。' % (time_end - time_start))
#软件环境
操作系统:Windows 10 家庭中文版 64位
python版本:3.10
Excel版本:2019