如何在Angular中解析Excel文件的日期与Float数据类型?
Excel单元格数据类型解析问题解决方案
日期类型被识别为数字的解决方法
Excel的日期本质是从1899-12-30(部分库以1900-01-01为起点)开始计数的序列化数字,直接读取单元格值会拿到这类数字,需结合单元格格式判断并转换:
- 使用openpyxl的示例代码:
from openpyxl import load_workbook from datetime import datetime, timedelta wb = load_workbook("demo.xlsx") ws = wb.active for row in ws.iter_rows(values_only=False): for cell in row: # 匹配常见日期格式,可根据实际需求补充 if cell.number_format in ('DD-MM-YYYY', 'YYYY-MM-DD', 'MM/DD/YYYY') or 'date' in cell.number_format.lower(): # 转换序列化数字为日期 date_val = datetime(1899, 12, 30) + timedelta(days=cell.value) print(f"日期类型: {date_val.strftime('%d-%m-%Y')}") - 使用pandas的简化处理:
import pandas as pd # 读取时自动解析日期 df = pd.read_excel("demo.xlsx", parse_dates=True) # 或针对指定列手动转换 df['目标日期列'] = pd.to_datetime(df['目标日期列'], unit='D', origin='1899-12-30')
浮点数与整数类型区分方法
Python中int和float同属数值类型,但可通过返回值的原生类型严格区分:
- 以openpyxl为例(
values_only=True会直接返回Python原生类型):from openpyxl import load_workbook wb = load_workbook("demo.xlsx", data_only=True) ws = wb.active for row in ws.iter_rows(values_only=True): for val in row: if isinstance(val, int): print("整数类型") elif isinstance(val, float): print("浮点数类型") - 注意:若Excel单元格是文本格式存储的小数,需先通过
float(val)转换后再判断类型。
关键提示
判断数据类型时,需结合单元格格式设置和返回值的原生类型双重校验,避免仅靠值判断导致的误判;不同Excel处理库(如xlrd、openpyxl)的细节逻辑有差异,需根据使用的库调整代码。
内容的提问来源于stack exchange,提问作者lowkey
相关产品推荐
相关产品推荐

