【问题标题】:Collect information from excel and to be stored into a list in Python从 excel 中收集信息并存储到 Python 列表中
【发布时间】:2023-02-21 13:40:49
【问题描述】:

我正在做一个自动化,比如工作没有在预定的时间段运行需要为失败的工作设置邮件警报,在这种情况下我使用 python 和 selenium。我有一个 excel 表从 excel 获取工作信息并进行比较用网页输入excel。

在这种情况下,我尝试使用下面的代码从 Excel 工作表中获取信息,但没有获得预期的输出。

我的代码:

import openpyxl
from datetime import datetime, timedelta
import sys

job_file_path = 'C:\\Users\\PycharmProjects\\Portal_Monitoring\\AllSites_Schedule.xlsx'
job_book = openpyxl.load_workbook(job_file_path)
job_sheet = job_book.active
num_rows = job_sheet.max_row
job_details = []

site_map = {
    'TCR': 'TCR site',
    'MAA': 'MAA site',
    'RTR': 'RTR site'
}

for i in range(6, num_rows + 1):
    site_code = None
    for j in range(3, 11):
        if job_sheet.cell(row=i, column=j).value in site_map:
            site_code = job_sheet.cell(row=i, column=j).value
            break
    site_name = site_map.get(site_code, '')
    print(site_name)
    if job_sheet.cell(row=i, column=1).value is not None:
        job_name = job_sheet.cell(row=i, column=1).value
        print(job_name)
        date_string = job_sheet.cell(row=i, column=3).value
        if date_string is not None and not isinstance(date_string, str):
            rt = date_string.time()
        else:
            rt = None
        print(date_string)
        
        if job_sheet.cell(row=i, column=3).value == 'TCR' or job_sheet.cell(row=i, column=4).value == 'TCR' or job_sheet.cell(row=i, column=5).value == 'TCR' or job_sheet.cell(row=i, column=6).value == 'TCR':
            site_name = 'TCR site'
        elif job_sheet.cell(row=i, column=7).value == 'MAA' or job_sheet.cell(row=i, column=8).value == 'MAA':
            site_name = 'MAA site'
        elif job_sheet.cell(row=i, column=9).value == 'RTR' or job_sheet.cell(row=i, column=10).value == 'RTR':
            site_name = 'RTR site'
        else:
            site_name = ''
        print(site_name)
    
    run_times = []
    for j in range(3, 13):
        cell_value = job_sheet.cell(row=i, column=j).value
        try:
            if cell_value is not None:
                run_time = datetime.strptime(cell_value, '%I:%M%p').time()
            else:
                run_time = None
        except ValueError:
            run_time = None
        run_times.append(run_time)
    run_days = str(job_sheet.cell(row=i, column=2).value).split(' & ')
    for day in run_days:
        print(day)
        if day == 'Mon - Fri':
            run_times_for_day = run_times[2:7]
        elif day == 'Tue - Sat':
            run_times_for_day = run_times[3:8]
        else:
            try:
                day_int = int(day)
                day_str = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'][day_int-1]
            except ValueError:
                day_str = day
            run_times_for_day = [run_times[j] for j in range(len(run_days)) if run_days[j].startswith(day_str)]
        for run_time in run_times_for_day:
            next_run_time = datetime.now().replace(hour=run_time.hour, minute=run_time.minute, second=0, microsecond=0)
            days_to_add = (['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'].index(day_str) - next_run_time.weekday()) % 7
            job_details.append((job_name, site_name, next_run_time + timedelta(days=days_to_add)))

print(job_details)

我的 excel 表看起来像:

[![Source file][1]][1]
 [![enter image description here][1]][1]

所以从 excel 中,当天运行的作业是什么需要存储到 jobdetails[] 中。

【问题讨论】:

    标签: python excel


    【解决方案1】:

    您的代码似乎有一些问题。主要问题之一是您没有正确地将作业详细信息附加到 job_details 列表。相反,您正在循环内打印值。

    这是应该工作的代码的更正版本:

     import openpyxl
    from datetime import datetime, timedelta
    
    job_file_path = 'C:\Users\z036276\PycharmProjects\Portal_Monitoring\AllSites_Schedule.xlsx'
    job_book = openpyxl.load_workbook(job_file_path)
    job_sheet = job_book.active
    num_rows = job_sheet.max_row
    job_details = []
    
    site_map = {
        'TCR': 'TCR site',
        'MAA': 'MAA site',
        'RTR': 'RTR site'
    }
    
    for i in range(6, num_rows + 1):
        site_code = None
        for j in range(3, 11):
            if job_sheet.cell(row=i, column=j).value in site_map:
                site_code = job_sheet.cell(row=i, column=j).value
                break
        site_name = site_map.get(site_code, '')
        print(site_name)
        if job_sheet.cell(row=i, column=1).value is not None:
            job_name = job_sheet.cell(row=i, column=1).value
            print(job_name)
            date_string = job_sheet.cell(row=i, column=3).value
            if date_string is not None and not isinstance(date_string, str):
                rt = date_string.time()
            else:
                rt = None
            print(date_string)
            
            if job_sheet.cell(row=i, column=3).value == 'TCR' or job_sheet.cell(row=i, column=4).value == 'TCR' or job_sheet.cell(row=i, column=5).value == 'TCR' or job_sheet.cell(row=i, column=6).value == 'TCR':
                site_name = 'TCR site'
            elif job_sheet.cell(row=i, column=7).value == 'MAA' or job_sheet.cell(row=i, column=8).value == 'MAA':
                site_name = 'MAA site'
            elif job_sheet.cell(row=i, column=9).value == 'RTR' or job_sheet.cell(row=i, column=10).value == 'RTR':
                site_name = 'RTR site'
            else:
                site_name = ''
            print(site_name)
        
        run_times = []
        for j in range(3, 13):
            cell_value = job_sheet.cell(row=i, column=j).value
            try:
                if cell_value is not None:
                    run_time = datetime.strptime(cell_value, '%I:%M%p').time()
                else:
                    run_time = None
            except ValueError:
                run_time = None
            run_times.append(run_time)
        run_days = str(job_sheet.cell(row=i, column=2).value).split(' & ')
        for day in run_days:
            print(day)
            if day == 'Mon - Fri':
                run_times_for_day = run_times[2:7]
            elif day == 'Tue - Sat':
                run_times_for_day = run_times[3:8]
            else:
                try:
                    day_int = int(day)
                    day_str = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'][day_int-1]
                except ValueError:
                    day_str = day
                run_times_for_day = [run_times[j] for j in range(len(run_days)) if run_days[j].startswith(day_str)]
            for run_time in run_times_for_day:
           
    

    【讨论】:

      猜你喜欢
      • 2023-03-22
      • 2018-02-01
      • 2018-01-22
      • 1970-01-01
      • 1970-01-01
      • 2020-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多