使用Python的Openpyxl进行索引匹配

问题描述 投票:0回答:1

我正在尝试构建一个工具,该工具将在电子表格的单元格中运行索引匹配,然后在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)

无论如何,我收到并出错,我不确定发生了什么。 Ouput:

DeprecationWarning:调用已弃用的函数get_sheet_by_name(使用wb [sheetname])。worksheet = myworkbook.get_sheet_by_name('Sheet1')

处理完成,退出代码为0

要清楚,如果我只是在Excel中执行此公式,则该公式将起作用,因为B1已填充在文件中。

我不确定输出在做什么。它没有引发错误,但是我不知道<Cell 'Sheet1'.B2>和“退出代码为0的过程已完成”是什么试图告诉我。我期望输出字符串,因为我正在尝试在句子中建立索引。

python excel automation pycharm openpyxl
1个回答
1
投票

A)运行公式需要在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对象,这就是为什么它打印对象<Cell 'Sheet1'.B2>的“名称”的原因。如果要验证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)
© www.soinside.com 2019 - 2024. All rights reserved.