如何用openpyxl判断Excel单元格是否包含计算公式?
使用openpyxl处理带公式的Excel单元格复制需求
嘿,刚好我之前做过类似的操作,用openpyxl就能轻松解决你的问题!下面一步步给你讲清楚怎么实现:
1. 判断单元格是否包含公式
openpyxl里的单元格对象有两个实用的属性可以用来判断是否带公式:
cell.has_formula:直接返回布尔值,True表示单元格是公式单元格cell.data_type:公式单元格的这个属性值为'f'(普通单元格是's'字符串或'n'数字等)
你可以根据习惯选其中一种判断方式,我个人更常用has_formula,可读性更强。
2. 复制公式单元格的计算值到另一个工作表
既然你提到某一列全是公式,那我们可以直接遍历这一列的有效单元格,把它们的计算后的值提取出来,写入目标工作表对应的位置。
给你一个完整的代码示例:
from openpyxl import load_workbook # 打开目标工作簿 wb = load_workbook("你的文件路径.xlsx", data_only=False) # 获取源工作表和目标工作表(这里假设源表是Sheet1,目标表是Sheet2,你可以改成自己的表名) source_sheet = wb["Sheet1"] target_sheet = wb["Sheet2"] # 假设要处理的是A列,遍历A列的所有有数据的单元格 for row_num, cell in enumerate(source_sheet["A"], start=1): # 判断单元格是否包含公式 if cell.has_formula: # 把计算后的值复制到目标工作表的对应行(比如也写到A列) target_sheet[f"A{row_num}"].value = cell.value # 保存修改后的工作簿 wb.save("处理后的文件路径.xlsx")
注意事项:
- 打开工作簿时
data_only=False:这个参数很重要,如果设为True,openpyxl只会读取单元格的计算值,而无法获取公式本身;设为False的话,既可以获取公式,也能拿到计算后的值(前提是文件之前被Excel打开并保存过,计算值已经被缓存)。 - 如果你的列不是A列,只需要把代码里的
"A"改成对应的列字母(比如"B")即可。 - 如果需要复制到目标工作表的不同列,修改
target_sheet[f"A{row_num}"]里的列字母就行。
这样操作后,目标工作表里就会有源表公式单元格的计算结果啦!
内容的提问来源于stack exchange,提问作者aniruddh sharma




