Python设置Excel日期列条件格式触发NoneType报错求解决方案
问题原因
运行代码抛出'NoneType' object has no attribute 'group'错误,核心来自两个实现问题:
- xlsxwriter写入引擎的
date类型条件格式,不支持直接传入Python原生datetime对象作为边界值,传入后内部正则匹配标准日期格式失败,就会触发空对象调用属性的报错。 - 需求是筛选H列中晚于
ip_date的单元格高亮,不需要用between规则搭配9999年的远场上限,直接用大于判断的规则逻辑更简洁,也能减少参数传错的概率。
可行实现方案
需要先把Python日期对象转成Excel可识别的日期序列值,用xlsxwriter自带的datetime_to_excel_datetime工具方法做转换即可,推荐直接用大于匹配规则,代码如下:
import datetime import xlsxwriter from xlsxwriter.utility import datetime_to_excel_datetime # 日期转换:第二个参数对应是否为1904日期系统,普通Windows Excel默认填False target_excel_date = datetime_to_excel_datetime(ip_date, False, False) writer.sheets[sheet_name].conditional_format('H:H', { 'type': 'date', 'criteria': 'greater than', 'value': target_excel_date, 'format': latest_format } )
如果要保留原有between的写法,只需要把上下限两个日期都做同样的格式转换即可:
import datetime import xlsxwriter from xlsxwriter.utility import datetime_to_excel_datetime min_excel_date = datetime_to_excel_datetime(ip_date, False, False) max_excel_date = datetime_to_excel_datetime( datetime.datetime.strptime('9999-01-01','%Y-%m-%d'), False, False ) writer.sheets[sheet_name].conditional_format('H:H', { 'type': 'date', 'criteria': 'between', 'minimum': min_excel_date, 'maximum': max_excel_date, 'format': latest_format } )
注意:如果处理的是Mac系统生成的、启用了1904日期系统的Excel文件,转换日期时把
datetime_to_excel_datetime的第二个参数改为True即可,避免日期偏移。
内容的提问来源于stack exchange,提问作者Anju Balan
相关产品推荐
相关产品推荐

