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

#python-3.x #xlsxwriter

#python-3.x #xlsxwriter

Вопрос:

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

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

 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')
 

Мои заголовки выглядят так, как показано ниже:

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

Ответ №1:

В Excel вы можете установить защиту рабочего листа, но разрешить пользователю изменять отдельные элементы, такие как автофильтры. В XlsxWriter вы можете указать, какие элементы рабочего листа вы хотите защитить, используя options аргумент in 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()
 

Вывод:

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