首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >无法使用pd.xlsxwriter解锁具有自定义值的单元格

无法使用pd.xlsxwriter解锁具有自定义值的单元格
EN

Stack Overflow用户
提问于 2019-05-21 22:36:01
回答 1查看 159关注 0票数 1

我有一个数据帧,如下面的代码所示。我只想锁定标题(顶行),并让用户更改其余的单元格。根据下面的代码,它确实锁定了标题,并使我能够更改除"Date“列之外的所有列的值。我无法更改日期列的值。它也应该允许我更改date列的值

代码语言:javascript
复制
import pandas as pd


df = pd.DataFrame({'Data1': [10, 20, 30],
                   'Data2': [11, 21, 31],
                   'Date': ["", 
                            "", 
                            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})
worksheet.protect()
for row in range(1, 150):
    worksheet.set_row(row, None, unlocked)

writer.save()
EN

回答 1

Stack Overflow用户

发布于 2019-05-21 23:35:51

在XlsxWriter中,单元格格式覆盖行格式,而行格式覆盖列格式。

datetime单元格没有解锁的原因是Pandas对这些单元格应用了一种单元格格式(对于日期格式),因此忽略/覆盖了行格式。

避免这种情况的唯一方法是将数据单元数据与其他数据帧数据分开写入(或覆盖),并应用未锁定的日期格式。如下所示:

代码语言:javascript
复制
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()

修改后的输出:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56240667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档