Python 无法锁定excel工作表中的列-xlsxwriter

Python 无法锁定excel工作表中的列-xlsxwriter,python,python-3.x,pandas,xlsxwriter,Python,Python 3.x,Pandas,Xlsxwriter,我正在尝试使用xlsx writer锁定excel工作表中的几列。作者已经通过获取panda数据帧并将其转换为excel生成了工作表 当使用xlsxwriter(已找到)的简单锁定和保护时,整个工作表最终被锁定,而不是我选择的列中的特定单元格。以下是我的代码: writer=pd.ExcelWriter('workbook.xlsx',engine='xlsxwriter') df2.to_excel(写入程序“除外”,索引=False,标题=False) df1.to_excel(写入程序'R

我正在尝试使用xlsx writer锁定excel工作表中的几列。作者已经通过获取panda数据帧并将其转换为excel生成了工作表

当使用xlsxwriter(已找到)的简单锁定和保护时,整个工作表最终被锁定,而不是我选择的列中的特定单元格。以下是我的代码:

writer=pd.ExcelWriter('workbook.xlsx',engine='xlsxwriter')
df2.to_excel(写入程序“除外”,索引=False,标题=False)
df1.to_excel(写入程序'Rec',索引=False,标题=False)
工作簿=writer.book
rec_sheet=writer.sheets['rec']
except_sheet=writer.sheets['except']
#添加锁定/解锁功能
锁定的\u格式=工作簿。添加\u格式()
锁定格式。设置锁定(真)
解锁的\u格式=工作簿。添加\u格式()
解锁\u格式。设置\u锁定(错误)
#解锁需要保持解锁状态的列
记录表。设置列('AC:AD',无,未锁定格式)
除表外。设置列('AC:AD',无,未锁定的格式)
#启用工作表保护
除了_sheet.protect()
记录表保护()
#锁定需要保持锁定的列
记录表。设置列('A:AB',无,锁定格式)
除工作表。设置列('A:AB',无,锁定格式)

我希望最终的workbook.xlsx有两个表,其中列在列AC之前被锁定。

应该可以工作。我在您的示例中添加了一些示例数据帧,并且我能够写入单元格AC3(但不是AB3):

输出:


你检查过这个链接吗?当我添加一些示例数据帧时,上面的代码对我有效。AC列之前的单元格被锁定,AC列之后的单元格被解锁。@jmcnamara它不适用于我,当我单击一个应该解锁的单元格(AC3)时,它会给我以下错误消息:“您试图更改的单元格或图表位于受保护的工作表上。若要进行更改,请取消对工作表的保护。可能会要求您输入密码。”当我取消对工作表的保护时,所有单元格都是可编辑的。@suhas\u Pete我看到了该链接,但没有解决我的问题。在这里,我从数据框中选择,而不是直接写入。
import pandas as pd

df1 = pd.DataFrame([10, 20, 30, 20, 15])
df2 = pd.DataFrame([10, 20, 30, 20, 15])

writer = pd.ExcelWriter('workbook.xlsx', engine='xlsxwriter')
df2.to_excel(writer, 'Except', index=False, header=False)
df1.to_excel(writer, 'Rec', index=False, header=False)
workbook = writer.book
rec_sheet = writer.sheets['Rec']
except_sheet = writer.sheets['Except']

# Adding lock/unlock capabilities.
locked_format = workbook.add_format()
locked_format.set_locked(True)  
unlocked_format= workbook.add_format()
unlocked_format.set_locked(False)

# Unlocking columns that need to remain unlocked.
rec_sheet.set_column('AC:AD', None, unlocked_format)
except_sheet.set_column('AC:AD', None, unlocked_format)

# Enable worksheet protection.
except_sheet.protect()
rec_sheet.protect()

# Lock columns that need to remain locked.
rec_sheet.set_column('A:AB', None, locked_format)
except_sheet.set_column('A:AB', None, locked_format)

writer.save()