有没有办法通过 openpyxl 将下拉列表保留或添加到 Excel?
Is there a way to Keep or Add a Dropdown to Excel via openpyxl?
我有一个工作脚本可以读取 excel 文件并将其另存为另一个文件。正在读取的文件包含多个具有数据验证(下拉菜单)的单元格,这些单元格引用另一个 sheet 上的单元格。我无法通过不覆盖下拉菜单或在脚本中插入下拉菜单来保留下拉菜单。
例如,我在 ws(主窗体)上有一个单元格 C42,我想要一个在 ws1(下拉列表)上引用 K2:K4 的下拉列表。这是我目前所拥有的:
from openpyxl import Workbook
from openpyxl import load_workbook
from openpyxl.worksheet.datavalidation import DataValidation
wb = load_workbook(pathdb+Filepathdb)
ws=wb['Main Form']
ws1=wb['Drop Down List']
dv = DataValidation(type='list', formula1=ws1['K2:K4'], allow_blank=True, showDropDown=True)
ws.add_data_validation(dv)
dv.add(ws["C42"])
任何人都可以帮助我哪里出错了吗?当我添加它时,它还会扰乱整个 excel 文件的格式。
也尝试过:
data_val = DataValidation(type="list",formula1='K2:K4', allow_blank=True, showDropDown=True)
ws1.add_data_validation(data_val)
data_val.add(ws["C42"])
如果您有更多的 ips (10+),最好先将它们存储到 excel 某处的列中,然后使用它们的范围作为数据验证 "Source"又名公式 1
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')
我有一个工作脚本可以读取 excel 文件并将其另存为另一个文件。正在读取的文件包含多个具有数据验证(下拉菜单)的单元格,这些单元格引用另一个 sheet 上的单元格。我无法通过不覆盖下拉菜单或在脚本中插入下拉菜单来保留下拉菜单。
例如,我在 ws(主窗体)上有一个单元格 C42,我想要一个在 ws1(下拉列表)上引用 K2:K4 的下拉列表。这是我目前所拥有的:
from openpyxl import Workbook
from openpyxl import load_workbook
from openpyxl.worksheet.datavalidation import DataValidation
wb = load_workbook(pathdb+Filepathdb)
ws=wb['Main Form']
ws1=wb['Drop Down List']
dv = DataValidation(type='list', formula1=ws1['K2:K4'], allow_blank=True, showDropDown=True)
ws.add_data_validation(dv)
dv.add(ws["C42"])
任何人都可以帮助我哪里出错了吗?当我添加它时,它还会扰乱整个 excel 文件的格式。
也尝试过:
data_val = DataValidation(type="list",formula1='K2:K4', allow_blank=True, showDropDown=True)
ws1.add_data_validation(data_val)
data_val.add(ws["C42"])
如果您有更多的 ips (10+),最好先将它们存储到 excel 某处的列中,然后使用它们的范围作为数据验证 "Source"又名公式 1
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')