Параметр сводной таблицы не включается в Excel после защиты - PullRequest
1 голос
/ 10 июня 2019

Я защитил лист Excel с помощью модуля записи xlsx, чтобы пользователь не мог удалять, изменять или вставлять какие-либо строки или столбцы, и предоставил пользователям несколько вариантов, таких как сводная таблица, сортировка, форматирование.Все хорошо, но опция сводной таблицы не включается на листе.Я делюсь фиктивным кодом ниже.

anomalies = pd.DataFrame({'A' : np.random.randint(0, 100, 10),
                          'B' : np.random.randint(10, 100, 10),
                          'C' : np.random.randint(0, 100, 10),
                          'D' : np.random.randint(10, 100, 10)})

anomalies['Status'] = 'Pending'

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

# Convert the dataframe to an XlsxWriter Excel object.
anomalies.to_excel(writer, sheet_name='Sheet1')

# Get the xlsxwriter objects from the dataframe writer object.
workbook  = writer.book
worksheet = writer.sheets['Sheet1']

# Create some cell formats with protection properties.
locked = workbook.add_format()
locked.set_locked(True)

unlocked = workbook.add_format()
unlocked.set_locked(False)

# Format the worksheet to unlock all cells.
worksheet.set_column(anomalies.shape[1], anomalies.shape[1], None, unlocked)
worksheet.set_column(0,0, anomalies.shape[1], None, {'hidden' : 1})

worksheet.autofilter(0, 0, 0,anomalies.shape[1])  # Same as above.

# Turn worksheet protection on.
options = {
    'objects':               True,
    'scenarios':             True,
    'format_cells':          True,
    'format_columns':        True,
    'format_rows':           True,
    'insert_columns':        False,
    'insert_rows':           False,
    'insert_hyperlinks':     False,
    'delete_columns':        False,
    'delete_rows':           False,
    'select_locked_cells':   True,
    'sort':                  True,
    'autofilter':            True,
    'pivot_tables':          True,
    'select_unlocked_cells': True,
}

worksheet.protect(options = options)
workbook.close()
writer.save()

1 Ответ

0 голосов
/ 10 июня 2019

Я запустил ваш пример кода, и он включает опцию «Использовать сводную таблицу и сводную диаграмму», как и ожидалось:

enter image description here

Тем не менее, обратите вниманиечто Excel позволяет "пользователям этой таблицы .. использовать сводные таблицы".В нем ничего не говорится о том, чтобы позволить пользователям создавать сводные таблицы.Поэтому я предполагаю, что Excel не позволяет создавать сводные таблицы, когда такие опции, как «вставить строки» отключены.Вы можете проверить это самостоятельно в Excel.

Обновление : похоже, что Excel отключает создание сводной таблицы, если включена какая-либо форма защиты листа (даже если все параметры разрешены).

...