【发布时间】:2021-12-10 09:54:57
【问题描述】:
我正在创建一个 Excel 表,我必须在其中下拉所有状态。代码如下:
excel_file_dir = os.path.join(os.path.dirname(__file__), 'template')
name = 'Template.xlsx'
excel_file = os.path.join(os.path.dirname(__file__), 'template', name)
workbook = xlsxwriter.Workbook(excel_file)
sheet = workbook.add_worksheet("Details")
sheet.write("C1", "Address", style_center)
sheet.write("D1", "State", style_center)
sheet.data_validation(1, 3, 5000, 3, {'validate': 'list', 'source': ["Alabama-AL", "Alaska-AK", "Arizona-AZ", "Arkansas-AR", "California-CA", "Colorado-CO", "Connecticut-CT",
"Delaware-DE", "District of Columbia-DC", "Florida-FL", "Georgia-GA", "Hawaii-HI", "Idaho-ID", "Illinois-IL", "Indiana-IN",
"Iowa-IA", "Kansas-KS", "Louisiana-LA", "Maine-ME", "Maryland-MD", "Massachusetts-MA", "Michigan-MI", "Minnesota-MN", "Mississippi-MS",
"Missouri-MO", "Montana-MT", "Nebraska-NE", "Nevada-NV", "New Hampshire-NH", "New Jersey-NZ", "New Mexico-NM", "New York-NY",
"North Carolina-NC", "North Dakota", "Ohio", "Oklahoma-OK", "Oregon-OR", "Pennsylvania-PA", "Rhode Island-RI", "South Dakota-SD",
"Tennessee-TN", "Texas-TX", "Utah-UT", "Vermont-VT", "Virginia-VA", "Washington-WA", "West Virginia-WV", "Wisconsin-WI", "Wyoming-WY"]})
workbook.close()
我遇到以下错误:
UserWarning: Length of list items exceeds Excel's limit of 255, use a formula range instead
我无法理解公式范围。我试图找到一种方法来做到这一点,在其他一些文章中,它说在其他一些单元格中添加一些数据,比如说 E1,然后在 E2 中添加其余信息,然后将这些单元格组合起来,放在你想要的地方优秀。
所以我试着去做
sheet.write("K10", "Alabama-AL, Alaska-AK, Arizona-AZ", border_format)
sheet.write("L11", "Arkansas-AR, California-CA, Colorado-CO, Connecticut-CT", border_format)
我在K10和L11中写了一些信息,然后尝试合并:
sheet.data_validation(1, 3, 5000, 3, {'validate': 'list', 'source': '=K10&" "&L11'})
但它实际上并没有工作,并显示空下拉。
如何在 Python 中使用 xlsxwriter 将超过 255 个字符值放在下拉列表中
编辑:
state_list = ["Alabama-AL", "Alaska-AK", "Arizona-AZ", "Arkansas-AR", "California-CA", "Colorado-CO", "Connecticut-CT",
"Delaware-DE", "District of Columbia-DC", "Florida-FL", "Georgia-GA", "Hawaii-HI", "Idaho-ID", "Illinois-IL", "Indiana-IN",
"Iowa-IA", "Kansas-KS", "Louisiana-LA", "Maine-ME", "Maryland-MD", "Massachusetts-MA", "Michigan-MI", "Minnesota-MN", "Mississippi-MS",
"Missouri-MO", "Montana-MT", "Nebraska-NE", "Nevada-NV", "New Hampshire-NH", "New Jersey-NZ", "New Mexico-NM", "New York-NY",
"North Carolina-NC", "North Dakota", "Ohio", "Oklahoma-OK", "Oregon-OR", "Pennsylvania-PA", "Rhode Island-RI", "South Dakota-SD",
"Tennessee-TN", "Texas-TX", "Utah-UT", "Vermont-VT", "Virginia-VA", "Washington-WA", "West Virginia-WV", "Wisconsin-WI", "Wyoming-WY"]
i = 10
for state in state_list:
sheet.write("K{}".format(i), state, border_format)
i = i + 1
sheet.data_validation(1, 3, 5000, 3, {'validate': 'list', 'source': '=Details!K10:K61'})
【问题讨论】:
-
DV 列表公式限制为 255 个字符,因此您不能。将每个值添加到行/列中的单元格,然后将该范围的地址用于 DV 列表公式。
-
@Rory 我对公式不太擅长。请问你能回答这个问题吗
-
在每个单元格中输入一个状态(比如 K10:K61),然后使用
=Sheet1!K10:K61作为公式。 -
@Rory 我已经添加了我在问题编辑部分使用的代码。但它不反映下拉数据。你能检查一下吗
-
我不会说 python,所以不确定我是否可以提供更多帮助,但该表实际上是否称为 Sheet1?
标签: python excel xlsxwriter