使用xlrd读取Excel百分比值显示为1.0,如何保留百分比格式?
如何用xlrd保留Excel百分比的显示格式(不修改数值)
这是个很常见的问题——Excel里的百分比本质上就是数值(比如100%对应1.0,50%对应0.5),xlrd默认读取的是这个底层数值,所以你看到的都是1.0。要在不修改原始数值的前提下显示成百分比格式,我们需要读取单元格的格式信息,再做转换。
下面是具体的解决方法,直接修改你的代码就行:
import xlrd # 初始化工作簿和工作表(替换成你的文件路径和工作表获取方式) book = xlrd.open_workbook("你的Excel文件路径.xls") xlsheet = book.sheet_by_index(0) # 获取工作簿的格式相关资源 xf_list = book.xf_list format_map = book.format_map for r in range(1, xlsheet.nrows): num_cols = xlsheet.ncols print('-'*40) print('Row: %s' % r) for col_idx in range(1, num_cols): cell_obj = xlsheet.cell(r, col_idx) # 获取当前单元格的格式索引 xf_index = xlsheet.cell_xf_index(r, col_idx) xf = xf_list[xf_index] # 尝试获取格式字符串,兼容无格式的单元格 try: format_str = format_map[xf.format_key].format_str except KeyError: format_str = "" # 判断是否为百分比格式并转换显示 if '%' in format_str: # 这里保留两位小数,你可以根据需求调整精度 display_val = f"{cell_obj.value * 100:.2f}%" print(f'Column:[{col_idx}] 显示值: [{display_val}] | 原始数值: [{cell_obj.value}]') else: print('Column:[%s] cell_obj: [%s]' % (col_idx, cell_obj))
关键说明:
- xlrd通过
cell_xf_index获取单元格的格式索引,再通过book.format_map拿到对应的格式字符串(比如0.00%)。 - 只要格式字符串里包含
%,就说明这是百分比格式,此时把原始数值乘以100再加上%符号,就能实现百分比显示,而原始的cell_obj.value(比如1.0)完全不会被修改。 - 加入
try-except是为了兼容一些没有设置任何格式的单元格,避免运行时报错。
这样修改后,你就能同时看到原始数值和百分比格式的显示值,完美满足你的需求~
内容的提问来源于stack exchange,提问作者edcoder
相关产品推荐
相关产品推荐

