диапазон проверки данных Django и xlsxwriter

Я использую Django и xlsxwriter в проекте, над которым работаю. Я хочу использовать data_validation в Sheet1 для получения списков, которые я распечатал в Sheet2. Я получаю списки для печати, но не вижу data_validation в Sheet1, когда открываю файл. Любое понимание того, что я делаю неправильно, очень ценится!

wb = xlsxwriter.Workbook(TestCass)
sh_1 = wb.add_worksheet()
sh_2 = wb.add_worksheet()
col = 15
head_col = 0


for header in headers:
    sh_1.write(0,head_col,header)
    sh_2.write(0,head_col,header)
    list_row = 1
    list = listFunction(headerToModelDic[header])
    for entry in list:
        sh_2.write(list_row,col,entry)
        list_row += 1
    sh_1.data_validation(1,col,50,col,{'validate':'list','source':'=Sheet2!$A2:$A9'})
    col += 1
wb.close()

Примечание. Причина, по которой я не беру список напрямую с сайта, заключается в том, что он слишком длинный (более 256 символов). Во-вторых, я в конечном итоге хотел бы, чтобы исходный диапазон при проверке данных принимал переменные из листа 2, однако я не могу заставить лист 1 иметь какую-либо проверку данных как есть, поэтому я решил начать с абсолютных значений.


person Cassidy    schedule 05.02.2015    source источник


Ответы (1)


Похоже, что диапазоны данных в примере неверны. Похоже, вы записываете данные списка в столбце, но проверка данных относится к строке данных.

Возможно, в вашем полном примере в этой строке есть данные, но в приведенном выше примере их нет.

Я немного изменил ваш пример на пример, отличный от Django, с некоторыми примерами данных. Я также изменил диапазон проверки данных, чтобы он соответствовал диапазону записанных данных:

import xlsxwriter

wb = xlsxwriter.Workbook('test.xlsx')
sh_1 = wb.add_worksheet()
sh_2 = wb.add_worksheet()
col = 15
head_col = 0

headers = ['Header 1']

for header in headers:
    sh_1.write(0,head_col,header)
    sh_2.write(0,head_col,header)
    list_row = 1
    list = [1, 2, 3, 4, 5]
    for entry in list:
        sh_2.write(list_row,col,entry)
        list_row += 1
    sh_1.data_validation(1,col,50,col,
                         {'validate':'list','source':'=Sheet2!$P2:$P6'})
    col += 1
wb.close()

И вот результат: введите здесь описание изображения

person jmcnamara    schedule 06.02.2015
comment
Спасибо, что вернулись ко мне! Теперь я могу правильно заполнить проверку данных. Мой другой вопрос: есть ли способ написать исходный диапазон при проверке данных, чтобы включить переменные вместо заданных диапазонов? Например, я надеюсь, что диапазон списка в столбце A на листе Sheet2 — это параметры проверки данных в столбце A на листе 1, а диапазон списка для столбца B на листе 2 соответствует параметрам списка в столбце B на листе 1 и т. д. . - person Cassidy; 06.02.2015
comment
Кажется, этот вопрос проще всего решить в Excel, а затем применить к программе XlsxWriter. Вы можете поиграть с абсолютными ссылками (ячейки с префиксом знаком $) и относительными ссылками (без знака $). Они влияют на то, как проверка применяется к диапазонам. - person jmcnamara; 06.02.2015