使用Python的Openpyxl进行索引匹配

使用Python的Openpyxl进行索引匹配,python,excel,automation,pycharm,openpyxl,Python,Excel,Automation,Pycharm,Openpyxl,我正在尝试构建一个工具,该工具将在电子表格的单元格中运行索引匹配,然后用python显示公式的结果。我的理解是Openpyxl实际上不会运行公式,但我可以写入excel,然后刷新文件来运行它 from openpyxl import load_workbook path= "C:\\Users\\Me\\Documents\\Python\\File.xlsx" myworkbook=load_workbook(path) worksheet=myworkbook.get_sheet_by_na

我正在尝试构建一个工具,该工具将在电子表格的单元格中运行索引匹配,然后用python显示公式的结果。我的理解是Openpyxl实际上不会运行公式,但我可以写入excel,然后刷新文件来运行它

from openpyxl import load_workbook
path= "C:\\Users\\Me\\Documents\\Python\\File.xlsx"
myworkbook=load_workbook(path)
worksheet=myworkbook.get_sheet_by_name('Sheet1')
mycell=worksheet['B2']
mycell.value="index(B4:B72,match(B1,A4:A72,0))"
print(mycell)
不管怎样,我收到了错误,我不知道发生了什么。输出:

弃用警告:调用弃用函数get_sheet_by_name Use wb[sheetname]。 工作表=我的工作簿。按名称“Sheet1”获取工作表

进程已完成,退出代码为0

要明确的是,如果我只是在Excel中执行该公式,则该公式是有效的,因为B1填充在文件中


我不确定输出在做什么。它并没有抛出错误,但我不知道退出代码0结束的进程试图告诉我什么。我需要一个字符串输出,因为我试图在一个句子中建立索引。

运行公式需要在Excel中打开文件。正如你所说:

我的理解是Openpyxl实际上不会运行公式,但我可以写入excel,然后刷新文件来运行它

如果刷新文件以运行它意味着在Excel中打开文件,则是,Excel将执行公式

B您得到的错误实际上只是一个警告,告诉您您使用的功能在Openpyxl的未来版本中将不可用。在这种情况下,警告还会告诉您访问工作表的正确方法

调用不推荐使用的函数get_sheet_by_name使用wb[sheetname][强调添加]

为避免出现警告,请将线路更换为:

worksheet=myworkbook['Sheet1']
C使用Openpyxl将公式添加到单元格时,必须在公式开头包含=字符,因此您的行应为:

mycell.value="=index(B4:B72,match(B1,A4:A72,0))"
D在print语句中,将mycell对象传递给它,这就是它打印对象“名称”的原因。如果您想验证mycell变量是否指向工作簿中的正确单元格,但它不是您想要的,那么这可能非常有用。要访问单元格的内容,需要参考该单元格的.value。将打印语句修改为:

print(mycell.value)
把所有这些放在一起:

from openpyxl import load_workbook
path= "C:\\Users\\Me\\Documents\\Python\\File.xlsx"
myworkbook=load_workbook(path)
worksheet=myworkbook['Sheet1']
mycell=worksheet['B2']
mycell.value="=index(B4:B72,match(B1,A4:A72,0))"
print(mycell.value)

谢谢,我试试这个。然后我将添加openpyxl命令my工作簿.RefreshAll,然后添加您编写的print命令,它将正确显示?openpyxl中没有.RefreshAll方法。最接近的是.RefreshAllConnections,它是一个参数,用于告诉Excel在打开工作表时刷新连接。为了做你想做的事情,你需要使用win32com在Excel中打开和刷新工作簿,正如回答:嗨,Craig,因为在我想要ping你之前,你是一个难以置信的帮助。在接受了你的建议后,我发布了一个新问题。如果你有空的话能插话,我将不胜感激。