我开始使用openpyxl,我想复制一行的总和。 在Excel中,值为150,但是当我尝试打印时,我得到的输出是公式,而不是实际值:
=SUM(B1:B19)
我使用的脚本是:
print(ws["B20"].value)
使用“data_only”无效。
wb = ("First_File_b.xlsx" , data_only=True)
知道我如何解决以获得数值?非常感谢帮助。
答案 0 :(得分:1)
好的,这是一个简单的例子
我创建了一个电子表格,其中包含第一个电子表格“Feuil1”(法语版),其中包含A1,...,A7
1,2,3,4,5,6,7
和A8=SUM(A1:A7)
这是代码,可能适用于其他运营商。也许不那么简单。例如,它还支持A1:B12的范围,未经测试且不支持像AA
这样的cols,但可以完成。
import openpyxl,re
fre = re.compile(r"=(\w+)\((\w+):(\w+)\)$")
cre = re.compile(r"([A-Z]+)(\d+)")
def the_sum(a,b):
return a+b
d=dict()
d["SUM"] = the_sum
def get_evaluated_value(w,sheet_name,cell_name):
result = w[sheet_name][cell_name].value
if isinstance(result,int) or isinstance(result,float):
pass
else:
m = fre.match(result)
if m:
g = m.groups()
operator=d[g[0]] # ATM only sum is supported
# compute range
mc1 = cre.match(g[1])
mc2 = cre.match(g[2])
start_col = ord(mc1.group(1))
end_col = ord(mc2.group(1))
start_row = int(mc1.group(2))
end_row = int(mc2.group(2))
result = 0
for i in range(start_col,end_col+1):
for j in range(start_row,end_row+1):
c = chr(i)+str(j)
result = operator(result,w["Feuil1"][c].value)
return result
w = openpyxl.load_workbook(r"C:\Users\dartypc\Desktop\test.xlsx")
print(get_evaluated_value(w,"Feuil1","A2"))
print(get_evaluated_value(w,"Feuil1","A8"))
输出:
2
28
耶!
答案 1 :(得分:0)
我使用openpyxl和pandas的组合解决了这个问题:
import pandas as pd
import openpyxl
from openpyxl import Workbook , load_workbook
source_file = "Test.xlsx"
# write to file
wb = load_workbook (source_file)
ws = wb.active
ws.title = "hello world"
ws.append ([10,10])
wb.save(source_file)
# read from file
df = pd.read_excel(source_file)
sum_jan = df ["Jan"].sum()
print (sum_jan)