Openpyxl获取百分比格式公式计算结果为字符串的方案咨询
获取Excel公式单元格的百分比显示字符串
你遇到的问题很典型:当前代码拿到的是单元格里的公式文本,而不是公式计算后最终显示的百分比格式字符串。这是因为Openpyxl默认加载工作簿时,会优先读取公式本身,而非计算后的结果,也不会自动应用单元格的格式规则。
下面是针对Python 2.7 + Openpyxl 2.2.4的解决方案:
1. 用data_only=True加载工作簿
要获取公式计算后的数值,你需要在加载Excel文件时添加data_only=True参数。这个参数会让Openpyxl读取单元格已经计算好的数值(前提是Excel已经保存过文件,确保计算结果被写入),而不是公式内容。
示例代码:
from openpyxl import load_workbook # 替换成你的文件路径和工作表名 wb = load_workbook('your_excel_file.xlsx', data_only=True) act_sheet = wb['Sheet1']
2. 将数值格式化为百分比字符串
拿到计算后的数值(比如0.8对应80%)后,我们可以用Python的字符串格式化把它转换成带百分号的字符串格式。修改你的循环逻辑:
table = [] # 替换col为你的目标列索引 col = 你的列序号 for row in act_sheet.iter_rows(): cell = row[col] # 处理有效数值的情况 if cell.value is not None: # .0%表示保留0位小数,如需保留1位可以改成.1% percent_str = "{:.0%}".format(cell.value) table.append(unicode(percent_str)) # Python2.7需要转成unicode else: # 处理空值或无效公式(比如你的输出里的单独=) table.append(u"") print(table)
额外说明
- 如果需要同时获取公式和计算值,可以不用
data_only=True,此时cell.formula会返回公式文本,cell.value在文件已保存的情况下也能拿到计算结果,但data_only=True是更稳定的获取计算值的方式。 - 对于那些仅含
=的无效公式单元格,cell.value会是None,所以我们添加了else分支避免报错,你可以根据需求改成其他标记(比如u"无效公式")。
内容的提问来源于stack exchange,提问作者Rikkas




