Openpyxl读取Excel日期输出为datetime对象如何转格式化字符串
解决openpyxl读取Excel日期输出为datetime对象的问题
openpyxl默认会将Excel中格式为日期的单元格值自动转换为datetime.datetime类型对象,直接写入文本文件时会输出对象的序列化格式,需要手动做类型判断和格式化转换。另外你原有代码还存在两个可优化的问题:一是不能直接将列表写入文本文件,二是循环边界设置错误会导致索引越界。
修改后的完整代码
from openpyxl import load_workbook import datetime wb = load_workbook(filename) sheet = wb.active # 使用with上下文管理器自动管理文件关闭,更安全 with open('textfile.txt', 'w+', encoding='utf-8') as report: # 遍历所有行,替代手动计数的while循环避免越界 for row in sheet.rows: processed_cells = [] for cell in row: cell_val = cell.value # 判断值类型为datetime时做格式化 if isinstance(cell_val, datetime.datetime): processed_cells.append(cell_val.strftime('%Y-%m-%d')) else: # 非日期类型直接转字符串,空值留空 processed_cells.append(str(cell_val) if cell_val is not None else '') # 用制表符拼接每行内容后写入,和原Excel列分隔格式对齐 report.write('\t'.join(processed_cells) + '\n')
核心修改点说明
- 增加datetime类型判断:通过
isinstance(cell_val, datetime.datetime)识别日期类型的单元格值,调用strftime('%Y-%m-%d')方法转换为你需要的年-月-日格式字符串 - 修复原代码写入报错问题:将每行的单元格处理后用制表符拼接为字符串再写入,避免直接写入列表触发类型错误
- 优化循环逻辑:直接遍历
sheet.rows替代手动计数的while循环,避免索引越界问题 - 添加上下文管理器管理文件操作,避免文件忘记关闭导致的资源占用
内容的提问来源于stack exchange,提问作者zsh_18
相关产品推荐
相关产品推荐

