Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用openpyxl获取Excel工作表中总和的绝对值_Python_Openpyxl - Fatal编程技术网

Python 使用openpyxl获取Excel工作表中总和的绝对值

Python 使用openpyxl获取Excel工作表中总和的绝对值,python,openpyxl,Python,Openpyxl,我开始使用openpyxl,我想复制一行的总和。 在Excel中,值为150,但当我尝试打印它时,得到的输出是公式,而不是实际值: =SUM(B1:B19) 我使用的脚本是: print(ws["B20"].value) 使用“仅限数据”不起作用 wb = ("First_File_b.xlsx" , data_only=True) 你知道我怎么解才能得到数值吗?非常感谢您的帮助 好的,这里有一个简单的例子 我用第一个电子表格“Feuil1”(法语版本)创建了一个电子表格,其中包含A1,…

我开始使用openpyxl,我想复制一行的总和。 在Excel中,值为150,但当我尝试打印它时,得到的输出是公式,而不是实际值:

=SUM(B1:B19)
我使用的脚本是:

print(ws["B20"].value)
使用“仅限数据”不起作用

wb = ("First_File_b.xlsx" , data_only=True)

你知道我怎么解才能得到数值吗?非常感谢您的帮助

好的,这里有一个简单的例子

我用第一个电子表格“Feuil1”(法语版本)创建了一个电子表格,其中包含
A1,…,A7
as
1,2,3,4,5,6,7
A8=SUM(A1:A7)

这是代码,可能适用于其他操作员。也许不是那么简单。例如,它还支持A1:B12的范围,未经测试,并且不支持对COL(如
AA
)的解析,尽管可以这样做

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

我使用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)

副本。简而言之,你不能!有解决方法吗?你可以试着解析表达式。对于像
SUM
这样的简单表达式,只要B1:B19行包含真实数据,而不是公式,它就可以工作!如果你有兴趣的话,我可以试着为你写一些变通方法。珍,如果不占用你太多时间的话,那就太好了。谢谢你,简,谢谢你的帮助。这真的很有用。我几个月前才开始编程,非常感谢您的帮助。告诉我它是否有效,如果有效,请不要忘记接受答案:)