excel - 无法使用 python 将 Excel 文件附加到电子邮件 - TypeError : expected bytes-like object, 不是工作簿

标签 excel python-3.x amazon-ses xlsxwriter

我正在编写Python代码,它将在Excel文件中添加一个字符串,并将该文件附加到电子邮件中。我使用 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 = "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="9ae2e2e2dafdf7fbf3f6b4f9f5f7" rel="noreferrer noopener nofollow">[email protected]</a>"
    to = "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="35545454755258545c591b565a58" rel="noreferrer noopener nofollow">[email protected]</a>"
    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()}

    )

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

最佳答案

阅读 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')

关于excel - 无法使用 python 将 Excel 文件附加到电子邮件 - TypeError : expected bytes-like object, 不是工作簿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58803820/

相关文章:

python - 使用 IAM 角色和 boto3 连接到 Amazon SES

ruby-on-rails - Errno::ECONNREFUSED(连接被拒绝 - connect(2) for nil port 587):对于 Heroku 上的 Rails

java - 获取 CSV 格式的 Excel 数据

excel - SUMIF(条件,值)、SUMPROD(条件,值)和 SUM(条件*值)之间的区别

python - 从类定义中的列表理解访问类变量

python - 保存图像时,保存的 jpg 文件的颜色不正确(cv2.COLOR_BGR2RGB 无法修复)

node.js - 作为 Cognito 验证的一部分,在 SES 中验证电子邮件

vba - LEN() 在 VBA 中返回错误值

C# Excel 互操作 : Opening and Showing CSV file

python - 一个类的独特方法叫什么?