2015-01-28 5 views
1

Я не могу добавить названия печати на рабочий лист Excel с помощью openpyxl. Именованный диапазон создается правильно, но он не стал соответствующим образом именованным диапазоном для заголовков печати. Проблема заключается в том, что область заголовков печати с указанным диапазоном неверна (по крайней мере, если я правильно ее понимаю). Вместо области, являющейся именем рабочего листа, как если бы я вручную печатал заголовки в Excel, область всегда является «рабочей книгой». Вот соответствующий фрагмент кода я использую:Добавление титров печати на рабочий лист с использованием openpyxl

wb = Workbook() 
ws = wb.active 
ws.add_print_title(1, rows_or_cols='rows') 

Насколько я могу сказать add_print_title нужно только количество строк или столбцов, чтобы добавить в именованный диапазон и строки и столбцы добавляются ли. И, как я уже сказал, это правильно создает именованный диапазон, он просто не превращает этот именованный диапазон в заголовки печати. Может быть, мне не хватает чего-то глупого, но я исчерпал все поисковые запросы Google и свои знания.

+0

Найдено некоторые вещи здесь: http://openpyxl.readthedocs.org/en/latest/_modules/openpyxl/worksheet/ worksheet.html # Worksheet.add_print_title – nycynik

+0

, и это документы для него: http://openpyxl.readthedocs.org/en/latest/api/openpyxl.worksheet.html?highlight=add_print_title#openpyxl.worksheet.worksheet.Решетки. add_print_title – nycynik

ответ

1

Acording в тестовом случай ваших вызывающий правильно:

def test_print_titles(): 
    wb = Workbook() 
    ws1 = wb.create_sheet() 
    ws2 = wb.create_sheet() 
    ws1.print_title_rows = '1:2' # NOTE this was depricated, old code was ws1.add_print_title(2) 
    ws2.print_title_cols = '1:3' # NOTE: this replaces depricated add_print_title, code was ws2.add_print_title(3, rows_or_cols='cols') 

    def mystr(nr): 
     return ','.join(['%s!%s' % (sheet.title, name) for sheet, name in nr.destinations]) 

    actual_named_ranges = set([(nr.name, nr.scope, mystr(nr)) for nr in wb.get_named_ranges()]) 
    expected_named_ranges = set([('_xlnm.Print_Titles', ws1, 'Sheet1!$1:$2'), 
           ('_xlnm.Print_Titles', ws2, 'Sheet2!$A:$C')]) 
    assert(actual_named_ranges == expected_named_ranges) 

Кажется, это известная проблема прямо сейчас, но есть исправление на месте, так что следующая версия должна заботиться о нем. Вы можете исправить это сейчас, редактируя файл самостоятельно, как показано здесь, в этом дифф:

https://bitbucket.org/openpyxl/openpyxl/pull-request/47/fix-issue-417-creating-print-titles/diff

+1

только что увидел это. Я фактически отправил исправление, о котором вы писали, - должен был обновиться здесь, когда я это понял. Спасибо, что обновили его здесь! – johaywood

+0

add_print_title устарел с версии 2.4.0. Вместо этого используйте print_title_rows или print_title_cols – Tom

+0

спасибо @Tom, вы знаете, что такое print_title_rows? Это всего лишь массив строк? Я не могу найти его в http://openpyxl.readthedocs.io/en/default/api/openpyxl.worksheet.worksheet.html?highlight=add_print_title – nycynik

0

Я не уверен, насколько хорошо мы (можем) поддержать это, поскольку оно, похоже, использует материал, не охваченный спецификацией. Я никогда не использовал этот метод самостоятельно, поэтому я не знаком с этим.

Пожалуйста, предоставьте ошибку с двумя файлами: что производит openpyxl; что это должно быть.

Смежные вопросы