Python读取Excel写入XML日期格式转换与循环逐行读数据问题咨询
问题1:Excel日期转指定格式写入XML解决方案
原有代码问题:
- 第一行创建的
DATA子元素对象被第二行的单元格值赋值直接覆盖,导致最终无法写入XML - 若Excel单元格本身设置为日期格式,
sheet.cell()读取到的结果本身就是datetime对象,不需要调用strptime解析字符串,直接格式化即可 - 目标格式需要四位年份,使用
%Y格式符,同时保留时分秒
修正后代码:
# 先创建DATA元素,不要覆盖变量 s2 = ET1.SubElement(PmtInf, 'DATA') # 读取单元格日期值 cell_value = sheet.cell(row=2, column=3).value # 格式化日期为目标格式,适配单元格直接返回datetime对象的场景 if isinstance(cell_value, datetime): date_str = cell_value.strftime('%d/%m/%Y %H:%M:%S') else: # 若单元格返回字符串,先解析再格式化,原字符串如果是两位年用%y,四位年用%Y date_object = datetime.strptime(str(cell_value), '%d/%m/%y') date_str = date_object.strftime('%d/%m/%Y %H:%M:%S') # 给XML元素赋值 s2.text = date_str
问题2:循环逐行读取Excel数据解决方案
原有代码问题:
- 行号写死为2,没有使用循环变量
i实现递增 - 给
InstrId、EndToEndId的text属性赋值后,又将变量重新赋值为常量字符串,属于无效代码,会丢失之前的元素引用
修正后代码:
for i in range(1,21): #first CdtTrfTxInf section with subsection CdtTrfTxInf = ET1.SubElement(PmtInf, 'CdtTrfTxInf') PmtId = ET1.SubElement(CdtTrfTxInf, 'PmtId') InstrId = ET1.SubElement(PmtId, 'InstrId') # 行号替换为循环变量i InstrId.text = sheet.cell(row=i, column=4).value EndToEndId = ET1.SubElement(PmtId, 'EndToEndId') EndToEndId.text = sheet.cell(row=i, column=3).value
内容的提问来源于stack exchange,提问作者Davide Ferlazzo
相关产品推荐
相关产品推荐

