import openpyxl as xl
from datetime import date
workbook = xl.load_workbook('Schedule.xlsx')
sheet = workbook['Sheet1']
for column in range(2, sheet.max_column + 1):
for row in range(2, sheet.max_row + 1):
date1 = date.today()
day1 = date1.strftime("%A")
n = date1.weekday()
days = ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday']
day2 = days[n + 1]
cell = sheet.cell(row, column)
time = sheet.cell(row, 1).value
if sheet.cell(1, column).value == day1:
if cell.value != None:
reminder1 = f"{time}: {cell.value} "
else:
pass
elif sheet.cell(1, column).value == day2:
if cell.value != None:
reminder2 = f"{time}: {cell.value}"
else:
pass
else:
pass
print(f"""REMINDER:
Today:
{reminder1}
Tommorow:
{reminder2}""")
这是我在 python 中的代码。 它从电子表格(“Schedule.xlsx”)获取输入并检查今天或明天是否有任何任务,如果有则发送提醒。 问题是如果一天有超过 1 个任务,python 只显示 1 个任务。 (对不起,我知道代码很乱,我是新手。) 谢谢
我尝试使用 for 循环,希望在有超过 1 个任务时重复相同的提醒,但它不起作用。 我也尝试制作列表的任务元素,然后尝试它,但代码变得复杂,很难安排时间完成任务。
这是您可以使用的方法,可能需要根据您想要对结果执行的操作进行调整。
首先对你的代码做一些说明
date
,day1
,day2
。您可以在我的示例中看到,这些是与代码顶部附近的其他静态项目一起设置的。cell.value != None
时,您不应使用相等运算符。根据您想要的比较,使用 cell.value is None
或 cell.value is not None
。
代码操作
因为我们知道今天是星期三,所以我们知道我们想要在您的 Excel 工作表中搜索 D 列。
这是静态的周一总是 B,周二总是 C 和周三总是 D 等(除非你修改工作表的布局).
因此,我们知道在哪一列运行循环,无需遍历 B、C 列来寻找正确的日期。单元格值循环设置为使用 iter_rows 仅循环所需的列
sheet.iter_rows(min_col=col, max_col=col, min_row=2, max_row=12)
min 和 max column 是列号,即天数加 2,因为列从 1 开始。行 min 设置为 2 以跳转标题行,max 为 12,因为这又是一个设置值,行覆盖上午 11:00 至晚上 9:00 的时间。
同样只需要遍历今天的列,我们使用单元格
offset
属性在我们向下移动今天的列时同时从明天的列中获取值。time_dict
.column=
值来读取A列中相应的单元格{'Wednesday': {'1:00 PM': 'Running checks on Project 5', '3:00 PM': 'Audit regarding Project 14'}}
然后只需打印出信息或根据需要使用即可。我使用了一个列表,
display_list
来组合两个词典,以便轻松循环遍历相同的打印代码。注意
如果今天是星期天,代码将失败,因为需要从 H 列返回到 B。不知道是否需要这样做,因为它看起来可能是一个工作日历,但如果需要,可以包括该检查。
import openpyxl as xl
from datetime import date
days_list = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
time_dict = {2: '11:00 AM', 3: '12:00 AM', 4: '1:00 PM', 5: '2:00 PM', 6: '3:00 PM', 7: '4:00 PM', 8: '5:00 PM',
9: '6:00 PM', 10: '7:00 PM', 11: '8:00 PM', 12: '9:00 PM'}
date = date.today().weekday()
day1 = days_list[date]
day2 = days_list[date + 1]
workbook = xl.load_workbook('Schedule.xlsx')
sheet = workbook['Sheet1']
### Create Dictionary for today and tomorrow
today_dict = {day1: {}}
tomorrow_dict = {day2: {}}
display_list = [today_dict, tomorrow_dict]
### Start loop at todays column from the expected position of today
col = 2 + date
for column in sheet.iter_rows(min_col=col, max_col=col, min_row=2, max_row=12):
### Checking cells in today's column
for cell in column:
### Today's column
if cell.value is not None:
today_dict['Wednesday'].update({time_dict[cell.row]:cell.value})
### Tomorrows column
elif cell.offset(column=1).value is not None:
tomorrow_dict['Thursday'].update({time_dict[cell.row]:cell.offset(column=1).value})
### Print the reminders from the dictionaries
print('***Reminder***')
for dict in display_list:
for sched_day, sched_items in dict.items():
print(f'Schedule Day: {sched_day}')
for tm, item in sched_items.items():
print(f'Time: {tm} - {item}')
print('')
输出
使用您的示例表将项目移至周三/周四。
***Reminder***
Schedule Day: Wednesday
Time: 1:00 PM - Running checks on Project 5
Time: 3:00 PM - Audit regarding Project 14
Schedule Day: Thursday
Time: 2:00 PM - Meeting with General Manager