如何使用Python为Excel的每一行创建新的Outlook电子邮件
我正在尝试使用Excel工作表填充Outlook电子邮件草稿,并让每一新行创建一封新电子邮件。我正试图使用openpyxl库来实现这一点。 Excel文件看起来像这样。 我尝试使用列表理解对每一行进行迭代,但结果基本相同,我收到一封包含第一行数据的电子邮件,但其余信息未被使用。我现在使用这些信息的唯一方法是自己更改行偏移量,但显然,这对很多行都不起作用 我使用以下函数从Excel文件中获取信息 def get_info(): 从第2行开始获取数据。这里可能有问题吗? 数据=获取信息() 包含Excel文件数据的电子邮件文本正文 text=“你好,{1}!工单{0}已完成”。格式(数据[0],数据) 创建电子邮件功能 def Emailer(文本1、主题、收件人): 将win32com.client作为win32导入如何使用Python为Excel的每一行创建新的Outlook电子邮件,python,excel,openpyxl,Python,Excel,Openpyxl,我正在尝试使用Excel工作表填充Outlook电子邮件草稿,并让每一新行创建一封新电子邮件。我正试图使用openpyxl库来实现这一点。 Excel文件看起来像这样。 我尝试使用列表理解对每一行进行迭代,但结果基本相同,我收到一封包含第一行数据的电子邮件,但其余信息未被使用。我现在使用这些信息的唯一方法是自己更改行偏移量,但显然,这对很多行都不起作用 我使用以下函数从Excel文件中获取信息 def get_info(): 从第2行开始获取数据。这里可能有问题吗? 数据=获取信息() 包含E
outlook = win32.Dispatch('outlook.application')
mail = outlook.CreateItem(0)
mail.To = recipient
mail.Subject = subject
mail.HtmlBody = text1
mail.Display(False)
之后,我会调用Emailer函数,比如
Emailer(文本,“已完成的WO{0}{1}”。格式(数据[0],数据),数据[2])
但是,如何使这个函数对Excel工作表的每一行都单独工作,这让我感到困惑。到目前为止,它只会一遍又一遍地写同一封电子邮件,而不会阅读其余的行。我的建议是将每一行包装成一个对象,并将对象推到列表
信息中,如下所示:
class Recipient():
def __init__(self, w_order, name, email):
self.w_order = w_order
self.name = name
self.email = email
def get_info():
loc = "Excel_file_location.xlsx"
wb = load_workbook(loc)
info = []
ws = wb[wb.sheetnames[0]]
ws = wb.active
for row in range(2, 5):
rec = Recipient("", "", "")
for col in range(ord('A'), ord('D')):
if chr(col) == 'A':
rec.w_order = ws[chr(col) + str(row)].value
elif chr(col) == 'B':
rec.name = ws[chr(col) + str(row)].value
elif chr(col) == 'C':
rec.email = ws[chr(col) + str(row)].value
info.append(rec)
return info
从那时起,您可以通过如下循环从mail函数中的get_info()
访问信息:
def Emailer(text1, subject, recipient):
import win32com.client as win3
outlook = win32.Dispatch('outlook.application')
mail = outlook.CreateItem(0)
mail.To = recipient
mail.Subject = subject
mail.HtmlBody = text1
mail.Display(False)
data = get_info()
for i in range(0, len(data)):
Emailer(text, "Completed WO {0} | {1}".format(data[i].w_order, data[i].name), data[i].email)
row\u offset=1
看起来不对。这似乎有效,看起来这是正确的方法!谢谢!
class Recipient():
def __init__(self, w_order, name, email):
self.w_order = w_order
self.name = name
self.email = email
def get_info():
loc = "Excel_file_location.xlsx"
wb = load_workbook(loc)
info = []
ws = wb[wb.sheetnames[0]]
ws = wb.active
for row in range(2, 5):
rec = Recipient("", "", "")
for col in range(ord('A'), ord('D')):
if chr(col) == 'A':
rec.w_order = ws[chr(col) + str(row)].value
elif chr(col) == 'B':
rec.name = ws[chr(col) + str(row)].value
elif chr(col) == 'C':
rec.email = ws[chr(col) + str(row)].value
info.append(rec)
return info
def Emailer(text1, subject, recipient):
import win32com.client as win3
outlook = win32.Dispatch('outlook.application')
mail = outlook.CreateItem(0)
mail.To = recipient
mail.Subject = subject
mail.HtmlBody = text1
mail.Display(False)
data = get_info()
for i in range(0, len(data)):
Emailer(text, "Completed WO {0} | {1}".format(data[i].w_order, data[i].name), data[i].email)