有没有更好的方法来使用OpenPyXL的defined_names功能从Excel命名范围返回值?

时间:2018-01-04 17:58:56

标签: python openpyxl

我有一个Excel工作簿,其中有一个名为' Professional Staff'的工作表。在该表上,有一系列名为' ProStaff'的单元格。我使用以下代码检索这些单元格中的值列表:

import openpyxl

wb = openpyxl.load_workbook(filename='SOexample.xlsx', read_only=True)


#Get the ProStaff range values
ProStaffRange = wb.defined_names['ProStaff']

#returns a generator of (worksheet title, cell range) tuples
dests = ProStaffRange.destinations

#use generator to create a list of (sheet, cell) tuples
cells = []
for title, coord in dests:
    ws = wb[title]
    cells.append(ws[coord])

#Above was from the OpenPyXL website

#Below is my best attempt to retrieve the values from those cells
cellsStr = []
startChar = '.'
stopChar = '>'

for item in cells[0]:
    itemStr = str(item)
    cellsStr.append( (itemStr.split("'")[1].strip(),  itemStr[itemStr.find(startChar)+1:itemStr.find(stopChar)]) )

for item in cellsStr:
    print(wb[item[0]][item[1]].value)

我操作的字符串操作类似于:

(<ReadOnlyCell 'Professional Staff'.A1>,)

并将其变为:

('Professional Staff', 'A1')

在我看来,应该有一种方法直接使用ReadOnlyCell项目来检索它们的值,但我还没有弄清楚如何。

1 个答案:

答案 0 :(得分:1)

尝试一下,根据我在其他地方看到的内容进行修改,它适用于单单元格命名范围:

wb = load_workbook('filename.xlsx', data_only=True)
ws = wb['sheet_name']

val=ws[list(wb.defined_names['single_cell_named_range'].destinations)[0][1]].value

print(val)

我正在使用Openpyxl 2.5.12。