我正在使用Python XlsxWriter模块使用data_validation
当前设置的方法添加下拉列表,因此我将重复项放在Pandas Series上,然后将其转换为列表,并为下拉列表设置值,如下所示:
# set the column values to be a list
worksheet.data_validation(xlsx_header_letter + '2:' + xlsx_header_letter + str(1+n_rows),
{'validate': 'list', 'source': col_dropped_duplicates})
这可以正常工作,但是如果列表超过255个字符,则根据Excel,它将不允许它进行验证。相反,他们提到您应该使用如下范围:
# Using 'source'.
worksheet.data_validation('B10', {'validate': 'list',
'source': '=$E$4:$G$4'})
上面的例子来自他们的文档。但是,我无法创建这样的动态范围,因为我的系列的值降低了(我删除了重复的值)。因此,我只希望为这些值选择单元格。
这可能吗?
我试图使用类似的东西:
worksheet.data_validation(xlsx_header_letter + '2:' + xlsx_header_letter + str(1+n_rows),
{'validate': 'list', 'source': '=($C$2:$C$2, $C$7:$C$7)'})
但是当我保存Excel时,它已损坏。
更新:我还尝试使用删除的重复值创建另一个工作表,并将范围设置为该工作表的名称和范围。但是它仍然保存损坏的文件。类似于:
worksheet.data_validation(
xlsx_header_letter + '2:' + xlsx_header_letter + str(1+n_rows), {'validate':
'list', 'source': '=' + new_sheet_name + '!A2:A4'})
更新2 /已解决:根据@jmcnamara注释。我在Excel中进行了测试,并能够使用另一张工作表中删除的重复项来创建验证。我在工作表名称周围缺少单撇号(')。因此,为了使其正常工作,您必须首先使用未复制的数据像这样创建一个新工作表:
# create new worksheet with the values
col_dropped_duplicates_df = pd.DataFrame({'Data':col_dropped_duplicates})
col_dropped_duplicates_df.to_excel(writer, index=False, sheet_name=new_sheet_name, encoding='utf-8')
然后使用A列作为数据验证来源的范围,如下所示:
worksheet.data_validation(
xlsx_header_letter + '2:' + xlsx_header_letter + str(1 + n_rows),
{'validate': 'list',
'source': "='" + new_sheet_name + "'!$A$2:$A" + str(
len(col_dropped_duplicates)+1)})
上面的例子来自他们的文档。但是,我无法创建这样的动态范围,因为我的系列的值降低了(我删除了重复的值)。因此,我只希望为这些值选择单元格。
这可能吗?
据我所知,这在Excel中是不可能的(甚至与XlsxWriter无关)。
如果您尝试在Excel数据验证中选择不连续的范围,则会收到以下消息:“您不能为数据验证条件使用引用运算符(例如并集,交集和范围)或任何常量”。
您可以验证自己。如果在Excel中有可能,则在XlsxWriter中有可能。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句