Мне нужно заблокировать мои заголовки, чтобы никто не мог редактировать эти столбцы, но я хочу включить автофильтр для этого с помощью xlsxwriter - PullRequest
1 голос
/ 17 апреля 2019

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

Я могу применить защиту на основе приведенного ниже кода, но он также отключает автофильтр.

df.to_excel(writer_template, sheet_name='inputs')

worksheet = writer_template.sheets['inputs']

unlocked = workbook.add_format({'locked': False})
locked   = workbook.add_format({'locked': True})

worksheet.set_column('A:S', None, unlocked)

# Turn worksheet protection on.
worksheet.protect()
worksheet.set_row(0, None, locked)
worksheet.set_row(1, None, locked)

worksheet.autofilter('B2:I500')

Мои заголовки выглядят так:

enter image description here

1 Ответ

0 голосов
/ 18 апреля 2019

В Excel вы можете установить защиту листа, но позволить пользователю изменять отдельные элементы, такие как автофильтры. В XlsxWriter вы можете указать, какие элементы листа вы хотите защитить, используя аргумент options в protect() (см. документы ).

Например:

import pandas as pd


df = pd.DataFrame({'Data1': [10, 20, 30, 20, 15, 30, 45],
                   'Data2': [11, 21, 31, 21, 15, 31, 45]})

writer = pd.ExcelWriter('pandas_filter.xlsx', engine='xlsxwriter', )

df.to_excel(writer, sheet_name='Sheet1', index=False)

workbook  = writer.book
worksheet = writer.sheets['Sheet1']

worksheet.protect(options={'autofilter': True})
worksheet.autofilter('A1:B8')

writer.save()

Выход:

enter image description here

...