You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 07:28:12