今天接到一个自动处理excel的需求,网上查了一下用python+openpyxl处理。在进行带公式的数据复制移动时出现一个问题,直接用
openpyxl.load_workbook(path)
打开excel复制数据保存后,新位置上保存的是原位置数据的公式,不是想要的计算结果。然后尝试用
openpyxl.load_workbook(path, data_only=True)
打开excel移动数据 保存后,新位置是计算后的数据了,但原位置上数据的公式不见了,也变成了计算后的数值。然后想到了一个笨方法,先用
openpyxl.load_workbook(path)
打开一遍excel,获得带公式的值,再用
openpyxl.load_workbook(path, data_only=True)
打开一遍excel,获得带数据的值。然后把带数据的值复制到带公式的excel里保存,最后得到了移动后的位置是数值,原位置还是公式的数据。
不知道这样做会不会带来其他的问题,也欢迎大佬评论区留言指教。
附一下代码:
import openpyxl
def copy_cells(copy_from, paste_to_cell):#这是一个复制移动数据的函数,网上能找到,我也是网上找的,忘记出处了,就不粘贴别人的代码了
path = '待处理.xlsx'
workbook_data = openpyxl.load_workbook(path, data_only=True) # 用包含计算结果的方式打开数据文件
sheet_data = workbook_data['xxx'] # 选定要处理的sheet名
workbook_formula = openpyxl.load_workbook(path) # 用包含公式的方式再次打开打开数据文件
sheet_formula=workbook_formula['xxx']# 再次选定要处理的sheet名
copy_cells(sheet_data['A1':'C8'],sheet_formula['F12'])#从数据表起始数据位置,移动到公式表目标位置 workbook_formula.save(path) # 保存数据