В XlsxWriter формат ячейки переопределяет формат строки, который переопределяет формат столбца.
Причина, по которой ячейки даты и времени не разблокированы, заключается в том, что Pandas применяет к этим ячейкам формат ячеек (для формата даты), и поэтому формат строки игнорируется / переопределяется.
Единственный способ избежать этого - записать (или перезаписать) данные ячейки даты отдельно от других данных фрейма данных и применить разблокированный формат даты. Как то так:
import pandas as pd
df = pd.DataFrame({'Data1': [10, 20, 30],
'Data2': [11, 21, 31],
'Date': [pd.to_datetime('today'),
pd.to_datetime('today'),
pd.to_datetime('today')]})
writer = pd.ExcelWriter('pandas_filter.xlsx', engine='xlsxwriter', )
df.to_excel(writer, sheet_name='Sheet1', index=False)
workbook = writer.book
worksheet = writer.sheets['Sheet1']
unlocked = workbook.add_format({'locked': False})
locked = workbook.add_format({'locked': True})
# Write the 'Date' column data.
worksheet.set_column('C:C', 20)
unlocked_date_format = workbook.add_format({'num_format': 'yyyy-mm-dd',
'locked': False})
worksheet.write_column('C2', df['Date'], unlocked_date_format)
worksheet.protect()
for row in range(1, 150):
worksheet.set_row(row, None, unlocked)
writer.save()
Вывод, после модификации: