【发布时间】:2019-10-29 02:43:16
【问题描述】:
我正在尝试使用 xlsxwriter 创建带有工作簿密码的 xlsx 文件。我浏览了文档并浏览了源代码,但似乎找不到任何相关内容。
【问题讨论】:
标签: python password-protection xlsxwriter
我正在尝试使用 xlsxwriter 创建带有工作簿密码的 xlsx 文件。我浏览了文档并浏览了源代码,但似乎找不到任何相关内容。
【问题讨论】:
标签: python password-protection xlsxwriter
找到问题的完美解决方案。不完全使用 xlsxwriter 但可以完美运行。 使用 pywin32,可惜仅限于 windows 机器。
import win32com.client as win32
excel = win32.gencache.EnsureDispatch('Excel.Application')
#Before saving the file set DisplayAlerts to False to suppress the warning dialog:
excel.DisplayAlerts = False
wb = excel.Workbooks.Open(your_file_name)
# refer https://docs.microsoft.com/en-us/previous-versions/office/developer/office-2007/bb214129(v=office.12)?redirectedfrom=MSDN
# FileFormat = 51 is for .xlsx extension
wb.SaveAs(your_file_name, 51, 'your password')
wb.Close()
excel.Application.Quit()
这是原始答案的link。
【讨论】:
worksheet.protect() 仅保护工作表不被编辑。 但是,我们可以将protect() 方法与隐藏格式结合起来,从第一个视图中隐藏数据。只有拥有密码才能解锁和取消隐藏单元格。
这是我的方法:
import xlsxwriter
workbook = xlsxwriter.Workbook('test.xlsx')
worksheet = workbook.add_worksheet()
test_content = (
['Hi', 123],
['I', 1123],
['AM', 1231231],
['LOCKED',1123123],
)
row = 0
col = 0
for text, num in (test_content):
worksheet.write(row, col, text)
worksheet.write(row, col + 1, num)
worksheet.set_row(row, None, None, {'hidden': True}) #hide the row
row += 1
worksheet.protect('password') # set the password and protect
workbook.close()
【讨论】:
根据文档here
Excel 中的工作表级密码提供非常薄弱的保护。他们是这样 不加密您的数据,并且很容易停用。完整的工作簿 XlsxWriter 不支持加密,因为它需要 完全不同的文件格式,需要几个月的时间 实施。
您可以在工作表中添加密码,但这不是一种强保护方法
worksheet.protect(<password>)
【讨论】:
您是否尝试这样设置密码:
wb = Workbook()
ws = wb.worksheets[0]
ws.protect('abc123')
【讨论】: