话不多说
1)测试Excel用例
2)判断Excel中某个字段是否为公式
"""
测试对excel公式操作
"""
import pandas as pd
from openpyxl import load_workbook
from openpyxl.formula import Tokenizer
# 加载工作簿
workbook = load_workbook(r'./static/tt_excel/Excel测试公式导入.xlsx')
# 选择工作表
sheet = workbook.active # 或者通过名字 workbook['Sheet1']
# 遍历单元格
for row in sheet.iter_rows():
for cell in row:
# 检查单元格是否包含公式
if cell.data_type == 'f': # 'f' 表示公式
formula = cell.value # 公式的字符串表示
print(f"Cell {cell.coordinate} contains a formula: {formula}")
# 使用 Tokenizer 分析公式
tokenizer = Tokenizer(formula)
tokens = tokenizer.items
print(tokens) # 打印公式的 tokens
elif cell.data_type == 'n': # 'n' 表示数字
print(f"Cell {cell.coordinate} contains a number: {cell.value}")
# 可以添加更多的elif来处理其他数据类型
输出结果:
3)将Excel中公式计算为结果输出到pandas 格式为Dataframe
import pandas as pd
from openpyxl import load_workbook
"""
请注意,使用 data_only=True 时,如果公式的结果是错误(例如 #DIV/0!),你将得到错误字符串,而不是公式本身。如果公式没有计算结果(例如,如果它依赖于尚未加载的工作簿中的其他数据),则 cell.value 将是 None。
"""
# 加载工作簿,设置 data_only=True 来获取公式的计算结果
workbook = load_workbook(r'./static/tt_excel/Excel测试公式导入.xlsx', data_only=True)
sheet = workbook.active
# # 遍历单元格
# for row in sheet.iter_rows():
# for cell in row:
# # 检查单元格是否包含公式的计算结果
# if cell.value is not None:
# print(f"Cell {cell.coordinate} contains a value: {cell.value}")
# 初始化列表来存储数据
data = []
# 遍历单元格
for row in sheet.iter_rows():
row_data = [cell.value for cell in row if cell.value is not None]
data.append(row_data)
# 将数据转换为 DataFrame
df = pd.DataFrame(data)
print(df)
输出结果: