在python中使用panda修改excel文件

pes8fvy9  于 2023-03-04  发布在  Python
关注(0)|答案(3)|浏览(227)

我正在尝试使用Python中的panda库修改一个现有的Excel文件。
我将文件内容用于自动发送电子邮件,触发发送给客户的电子邮件
一旦邮件发送,我只想在excel文件中更新客户的状态
有没有办法用python中的panda库来做这个?

subprocess.Popen('C:\\Program Files (x86)\\Microsoft Office\\Office15\\OUTLOOK')
    time.sleep(10)
    for i in range(0, len(DAYS_COUNT)):
        if df['Acceptance status'][i] in NO_FOLLOWUP:
            pass
        if df['Days \ncount'][i] >= 7 and df['Platform'][i] == "Email":
            time.sleep(3)
            print(df['Company Name/ \nEmail Address'][i])
            send_to = df['Company Name/ \nEmail Address'][i]
            pyautogui.click(x=25, y=244)  # sent_click
            time.sleep(1)
            pyautogui.click(x=118, y=158)  # search_sent_click
            time.sleep(1)
            pyautogui.click(x=286, y=74)  # search_by_to_click
            time.sleep(1)
            pyautogui.write(df['Company Name/ \nEmail Address'][i])
            time.sleep(2)
            # pyautogui.click(x=207, y=254)  # first_item_click
            pyautogui.click(x=186, y=276)  # first_item_click
            time.sleep(1)
            pyautogui.click(x=639, y=162)  # forward_click
            time.sleep(1)
            pyautogui.write(f"{send_to};")  # to_address
            time.sleep(5)
            pyautogui.press("tab")
            pyautogui.write(f"{CC};")  # cc_address
            time.sleep(5)
            pyautogui.press("tab")
            pyautogui.tripleClick(x=607, y=252)  # subject_line_remove_existing
            subject_status = df['Acceptance status'][i].lower()
            pyautogui.write(MAIL_SUBJECT[subject_status])  # subject
            time.sleep(5)
            pyautogui.press("tab")
            pyautogui.press("tab")
            mail_body_status = df['Acceptance status'][i].lower()
            if df['Remarks'][i] == "economic times":
                pyautogui.write(BD_FRESH_MAIL['economic_mail_body'])
            else:
                pyautogui.write(MAIL_BODY[mail_body_status])  # mail_body
            time.sleep(5)
            # pyautogui.press("delete")
            # pyautogui.press("delete")
            pyautogui.click(x=489, y=205)  # send_click
            time.sleep(1)

一旦邮件发送,我只想在excel文件中更新客户的状态
并保存它而不会丢失excel文件中的数据

r6l8ljro

r6l8ljro1#

我建议你使用PandasDataFrame数据结构,你可以使用read_csv函数读取excel文件,然后使用DataFrame.at函数设置一个新的值。

import pandas as pd
data = pd.read_csv("PATH TO EXCEL FILE")
row_index = 5 # ROW THAT NEEDS TO BE UPDATES
col_name = "STATUS"
data.at[row_index, col_name] = True # SET THE NEW VALUE
data.to_csv("PATH TO A NEW EXCEL FILE")

更新后,您可以使用to_csv函数传递新文件路径保存数据框,或使用相同路径覆盖旧excel文件。
关于.at函数的Pandas文档:https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.at.html

jm81lzqq

jm81lzqq2#

当然可以!不过Pandas使用openpyxl来完成一些excel特有的操作,因此您可以直接使用该库。
您应该能够在所需的触发器操作之后插入Excel操作代码。
使用panda和openpyxl将excel表格读入内存的例子。让我们知道你还想做什么!

import pandas as pd
df = pd.read_excel('path_to_file.xlsx')

from openpyxl import load_workbook
wb = load_workbook(filename = 'empty_book.xlsx')

https://openpyxl.readthedocs.io/en/stable/tutorial.html
P.s.您可以通过win32 com库以编程方式使用outlook来简化(并防止错误)pyautogui操作,而不是使用GUI。
通过Python发送Outlook电子邮件?

zzlelutf

zzlelutf3#

如果我需要更多的控制,我使用openpyxl来编写excel文件,否则就使用pd.to_excel(),这只是一个大概的想法:

with pd.ExcelWriter("path_to_file.xlsx", 
  mode="a", engine="openpyxl") as writer:
     
  data_frame.to_excel(writer, sheet_name="Customers")

df.to_excel("name.xlsx")

如果您正处于需要首先更新df的阶段(仅举一例):

# Your source of emailed customers
# this is just a demo
listOfReceivers = [nam1, name2, name3]

def checkName(customer):
   # may want to strip() and lower() all names
   if customer in listOfReceivers:
      return True
   else:
     return False

# Change columns to match yours
df['Emailed'] = df['Customers'].apply(checkName)
df.to_excel("name.xlsx")

相关问题