在 XlsxWriter 中使用工作表元素创建下拉列表

Seb*_*ian 4 python python-2.7 xlsxwriter

所以我正在创建一个包含某些数据的电子表格。电子表格中的某些单元格需要有一个包含预定义数据的下拉列表。对于某些细胞来说,这个过程非常简单:

worksheet.data_validation(start_row, start_column, end_row, end_column, {'validate': 'list', 'source': options }
Run Code Online (Sandbox Code Playgroud)

其中 options 是项目列表。

事实证明,这个项目列表被转换为字符串,如果字符串超过 255 个字符,那么(由于 Excel 限制)不可能创建下拉列表。

由于不同的单元格可能有不同的选项,我正在检查选项的长度(转换为字符串)是否 >= 255,如果是,那么我将创建一个新工作表并在那里记下选项。

def create_options_sheet(self, name, values):

    options_worksheet = self.workbook.add_worksheet(name)

    opt_col = 0
    opt_row = 0

    for elem in values:
        options_worksheet.write(opt_row, opt_col, elem)
        opt_row += 1
Run Code Online (Sandbox Code Playgroud)

因此,我计划采用与此类似的方法从当前工作表访问这些选项:

current_worksheet.data_validation(start_row, start_column, end_row, end_column, {'validate': 'list', 'source': options_sheet})
Run Code Online (Sandbox Code Playgroud)

其中 options_sheet 是对选项表的引用,使用类似 =$A$1:$A$10 的范围。我的问题是:如何加载该工作表并从当前工作表访问它?

Seb*_*ian 6

好吧,我明白了!由于我可以访问包含选项的不同电子表格的名称,因此我可以执行以下操作:

sheet_reference_str = '=' + sheet_name + '!$A$1:$A$10'
current_worksheet.data_validation(start_row, start_column, last_row, last_column, {'validate': 'list', 'source': sheet_reference_str})
Run Code Online (Sandbox Code Playgroud)

给定的范围仅作为示例来说明其工作原理