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

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