Killer_Chu 2021-10-21 15:35 采纳率: 0%
浏览 28

Python 读取Excel 发邮件遇到的问题?

#遇到的问题
试着改写了一个读取工资表,然后自动读取数据并发送邮件的脚本,现在一切运行正常,但是发送的邮件里面, 最后的实发工资数据不正常,小数点后会有十二位数据,发送的前两条数据正常,第三条数据就不正常。EXCEL表格中有统计公式,单元格设置取小数点后两位。

img

img

先取列名

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

  • 写回答

1条回答 默认 最新

  • 於黾 2021-10-21 15:45
    关注

    跟单元格设置没关系,那只是显示的时候显示几位,数据其实可能会有很多位
    而你用python直接读取值,那肯定是有几位读几位
    你想只保留2位,转str的时候format一下就行了

    评论

报告相同问题?

问题事件

  • 创建了问题 10月21日

悬赏问题

  • ¥15 matlab实现基于主成分变换的图像融合。
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊