使用 Python 填充 Excel 日期时,无法正确排序

When filling Excel dates with Python they cannot be sorted correctly

提问人:Noob AF 提问时间:9/17/2023 最后编辑:Noob AF 更新时间:9/28/2023 访问量:30

问:

我有一个 python 3.9 脚本,我用它来向用户询问信息并将其转储到 excel 中。向用户请求的数据之一是日期,该数据必须在 Excel 中以 DD/MM/YYYY 格式显示在第一列中。下面,我向您展示与此问题最相关的代码的简化部分:

def obtain_user_info():         
    
    date = datetime.today()
    if input('Has it happened today?') != 'y':
        valid_date = False
        while not valid_date:
            date_str = input('Type the date (YYYY-MM-DD format): ')
            try:
                # Trying to convert the entered date into an object of type datetime
                date = datetime.strptime(date_str, '%Y-%m-%d')
                valid_date = True
            except ValueError:
                # If a ValueError exception occurs, the date is invalid
                print ('Invalid date. Please enter a valid date in YYYY-MM-DD format.')
    
    return date

def excel_update(date):   
    
    excel_date= date.strftime("%d/%m/%Y")
      
    new_row = [excel_date]
        
    # Append the new row to the first empty row after the last row with content
    for col, value in enumerate(new_row, start=1):
            cell = sheet.cell(row=empty_row, column=col, value=value)
            cell.alignment = Alignment(horizontal='center', vertical='center')
            
            # Format date, time, and duration columns
            if col in [1, 5, 6]:
                cell.number_format = 'DD/MM/YYYY' if col == 1 else 'HH:MM:SS'
            elif col == 7:
                cell.number_format = 'hh:mm:ss'
    
    empty_row += 1  # Move to the next empty row
    
    wb.save(excel_file)

该脚本以 DD/MM/YYYY 格式在 Excel 中正确写入日期。但是,当按日期对列进行排序时,无法正确识别这些列。

Example

您可以看到脚本添加的日期(属于 9 月的日期)是如何无法正确识别的。

我尝试将格式更改为 DD-MM-YYYY,但同样的事情一直在发生。

python-3.x excel 日期时间

评论

2赞 Ron Rosenfeld 9/17/2023
确保 Excel 中的日期实际上是日期,而不是看起来像日期的文本字符串。为此,可以使用引用被错误分类的日期的函数。注意:单元格编号格式不会改变数据类型,因此检查它不是区分的好方法。ISTEXT
0赞 taller 9/18/2023
操作 Excel 的引擎是什么?openpyxl?
0赞 Noob AF 9/25/2023
@RonRosenfeld 没错,当使用 ISTEXT 时,即使单元格格式是 Date,它也会给我 TRUE。如何在我的代码中修复它?提前致谢
0赞 Noob AF 9/25/2023
我使用 openpyxl @taller_ExcelHome
0赞 Ron Rosenfeld 9/25/2023
不幸的是,不够熟悉,无法就代码更改提供建议。但是,您的用户很可能以 MDY 与 DMY 的形式输入日期。避免这种情况的一种方法是使用某种形式,用户分别输入日期/月份/年份。在继续之前,让他们使用明确的日期格式(例如拼写月份并使用四位数年份的格式)确认输入正确。您需要在数据输入阶段修复它的原因是,您没有其他方法可以判断,当用户输入时,他是否真的意味着 vsopenpyxl1/10/20231-Oct10-Jan

答: 暂无答案