OpenPyXL: 是否可以在excel表中创建一个下拉菜单?

14 人关注

我试图用openpyxl在一个单元格中存储一个有效的ip地址列表。目前,数据被简单地放在一个单元格中,并且通常会溢出到其他单元格中。使用下面的代码。

# Regex to return a tidy list of ip addresses in that block
    r = row to be checked
    s = source or destination columns
    iptc = ips to check
def regex_ips(r, s):
    iptc = ['165.11.14.20', '166.22.24.0/24', '174.68.19.11', '165.211.20.0/23']
    if r is not None:
        if s is not None:
            iptc = str(sheet.cell(r, s).value)
            san = re.sub('\n', ', ', iptc)
            sheet_report.cell(r, 8).value = san

然而,我更希望能把这些IP地址放到一个下拉列表中,因为这样会更容易阅读 - 所以我的问题是双重的,首先,这能做到吗? 因为我找不到任何相关的信息,其次,是否有更好的方法来显示数据而不至于溢出?

谢谢你读完这个

编辑:增加了一些地址和子网的例子,以反映列表中可能存在的内容。

5 个评论
HaR
"下拉 "列表可以用openpyxl相当容易地完成,所谓的 "数据验证 "在Excel中,你能提供 iptc 的内容,或者一些例子ips的列表,或者它们是如何存储的。
HaR
另外,你的列表中有多少个ip地址?
列表的大小不一,通常总共不超过40个地址,而且它们被存储在一个列表中--我更新了这个例子,以反映出一些假的例子。
HaR
此外,你必须将你的ip地址存储为独立的字符串,像这样。【替换代码0
@HaR 谢谢你指出这一点--刚刚更新了例子以反映这一点。
python
openpyxl
Connor J
Connor J
发布于 2018-07-24
2 个回答
HaR
HaR
发布于 2018-07-24
已采纳
0 人赞同

如果你有更多的ips(10个以上),最好先把它们存储到excel的某一列,然后用它们的范围作为数据验证的 "源",也就是公式1。

from openpyxl import Workbook
from openpyxl.worksheet.datavalidation import DataValidation
wb = Workbook()
ws = wb.create_sheet('New Sheet')
for number in range(1,100): #Generates 99 "ip" address in the Column A;
    ws['A{}'.format(number)].value= "192.168.1.{}".format(number)
data_val = DataValidation(type="list",formula1='=$A:$A') #You can change =$A:$A with a smaller range like =A1:A9
ws.add_data_validation(data_val)
data_val.add(ws["B1"]) #If you go to the cell B1 you will find a drop down list with all the values from the column A
wb.save('Test.xlsx')