如何将datetime日期时间列表写入Excel?解决代码覆盖与迭代错误
解决方案:将datetime列表写入Excel对应行列
问题根源分析
你遇到的两个核心问题:
- 最初的循环里每次调用
write_row都传入了整个列表,导致每次循环都会覆盖之前的单元格内容; - 后来修改为传入单个
datetime.date对象时报错,是因为write_row方法要求第三个参数必须是可迭代的序列(比如列表、元组),而单个datetime对象不满足这个要求。
修正后的代码
我们可以通过两种方式解决:
方式一:遍历索引逐个写入(适配你的原有思路)
把单个datetime对象包装成列表,同时调整循环逻辑,确保每个元素写入对应位置:
from datetime import date, time import xlsxwriter date_list = [date(2019, 12, 2), date(2019,12,5), date(2019,12,4), date(2019,12,6)] time_list = [time(10, 11, 55), time(10, 42, 46), time(10, 11, 45), time(10, 20, 15)] workbook = xlsxwriter.Workbook('output.xlsx') Report_Sheet = workbook.add_worksheet() # 写入日期行(第1行,列从1开始) for col_idx, date_val in enumerate(date_list, start=1): # 将单个datetime对象包装成列表,满足write_row的可迭代要求 Report_Sheet.write_row(0, col_idx, [date_val]) # 写入时间行(第2行,列从1开始) for col_idx, time_val in enumerate(time_list, start=1): Report_Sheet.write_row(1, col_idx, [time_val]) workbook.close()
方式二:更高效的批量写入(推荐)
其实write_row可以直接写入整行数据,不需要循环单个元素,这样代码更简洁:
from datetime import date, time import xlsxwriter date_list = [date(2019, 12, 2), date(2019,12,5), date(2019,12,4), date(2019,12,6)] time_list = [time(10, 11, 55), time(10, 42, 46), time(10, 11, 45), time(10, 20, 15)] workbook = xlsxwriter.Workbook('output.xlsx') Report_Sheet = workbook.add_worksheet() # 直接将整个date_list写入第1行,从列1开始 Report_Sheet.write_row(0, 1, date_list) # 直接将整个time_list写入第2行,从列1开始 Report_Sheet.write_row(1, 1, time_list) workbook.close()
这种方式既避免了循环的冗余,也不会出现覆盖问题,因为我们一次性把整行数据写入对应位置。
额外提示
如果需要让Excel正确识别日期/时间格式,可以添加格式对象:
# 创建日期格式 date_format = workbook.add_format({'num_format': 'yyyy-mm-dd'}) # 创建时间格式 time_format = workbook.add_format({'num_format': 'hh:mm:ss'}) # 写入时指定格式 Report_Sheet.write_row(0, 1, date_list, date_format) Report_Sheet.write_row(1, 1, time_list, time_format)
内容的提问来源于stack exchange,提问作者pyboy1995
相关产品推荐
相关产品推荐

