无法使用python将Excel文件附加到电子邮件-TypeError:预期的类似字节的对象,而不是工作簿

我正在研究将在excel文件中添加一个字符串并将该文件附加到电子邮件的python代码。我正在使用AWS SES发送此电子邮件。

当我尝试运行我的代码时,它给我以下错误-

TypeError: expected bytes-like object,not Workbook

下面是我的代码-

import boto3
import xlsxwriter
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart


def lambda_handler(event,context):
    client = boto3.client('ses',region_name=AWS_REGION)
    sender = "xxx@gmail.com"
    to = "aaa@gmail.com"
    workbook = xlsxwriter.Workbook('abc.xlsx') 
    worksheet = workbook.add_worksheet() 
    worksheet.write('A1','Hello..')
    #send email with attachment
    msg = MIMEMultipart()
    msg['Subject'] = 'Test Email'
    msg['From'] = sender
    msg['To'] = to
    body_text = MIMEText(BODY_TEXT,"html")
    attachment = MIMEApplication(workbook)
    attachment.add_header('Content-Disposition','attachment',filename='Expenses01.xlsx')
    msg.attach(attachment)
    msg.attach(body_text)
    response = client.send_raw_email(
        Source=sender,Destinations=[to],RawMessage={"Data": msg.as_string()}

    )

我知道工作簿对象有问题。但是我不知道如何解决这个问题。有人可以帮我吗?

a786782040 回答:无法使用python将Excel文件附加到电子邮件-TypeError:预期的类似字节的对象,而不是工作簿

您的问题没有说错误发生的地方 , 但我认为它发生在这里:

attachment = MIMEApplication(workbook)

您应该以字节为单位,而不是复杂的python对象。

调用workbook.close()写出'abc.xlsx'文件, 并发送那个二进制文件作为附件。

,

阅读XLSXWriter文档后,我找到了答案。链接-https://xlsxwriter.readthedocs.io/workbook.html

我正在发布此答案,以便它可以帮助其他像我这样的新python开发人员。 早期的MIMEApplication()不接受工作簿对象,因此我们需要对其进行转换。我已经更新了我的代码。我已经使用BytesIO创建Workbook对象,然后将该对象添加到MIMEApplication()中。本示例将创建excel文件并将该文件附加到电子邮件。  新代码-

from io import BytesIO
output = BytesIO()
    workbook = xlsxwriter.Workbook(output) 
    worksheet = workbook.add_worksheet() 
    worksheet.write('A1','Hello..')
attachment = MIMEApplication(output.getvalue())
    attachment.add_header('Content-Disposition','attachment',filename='abc.xlsx')
    attachment.add_header('Content-Type','application/vnd.ms-excel; charset=UTF-8')
本文链接:https://www.f2er.com/3123291.html

大家都在问