【问题标题】:xlsxwriter set password to open document?xlsxwriter 设置密码以打开文档?
【发布时间】:2019-10-29 02:43:16
【问题描述】:

我正在尝试使用 xlsxwriter 创建带有工作簿密码的 xlsx 文件。我浏览了文档并浏览了源代码,但似乎找不到任何相关内容。

【问题讨论】:

    标签: python password-protection xlsxwriter


    【解决方案1】:

    找到问题的完美解决方案。不完全使用 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

    【讨论】:

    • 我相信这也需要您在 Windows 上运行并安装 Microsoft Excel。例如,如果您从 Linux 机器生成报告,这可能不是一个可行的选择。
    • 是的,你是对的,这只适用于安装了 Excel 的 Windows。与 Linux 系统或 mac 不兼容。
    【解决方案2】:

    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()
    

    【讨论】:

    • 感谢您的建议。虽然这可能很有用,但我特别需要工作簿密码。我需要对数据进行加密,而不仅仅是隐藏。
    【解决方案3】:

    根据文档here

    Excel 中的工作表级密码提供非常薄弱的​​保护。他们是这样 不加密您的数据,并且很容易停用。完整的工作簿 XlsxWriter 不支持加密,因为它需要 完全不同的文件格式,需要几个月的时间 实施。

    您可以在工作表中添加密码,但这不是一种强保护方法

    worksheet.protect(<password>)
    

    【讨论】:

    • 我特别需要防止打开文档的工作簿密码。这是我理解的唯一真正加密数据的密码。
    • 感谢您找到说明它不受支持的文档。我想这是最接近我现在要得到的答案的事情,谢谢。
    • 这个的预期结果是什么?当我这样做时,什么也没有发生
    【解决方案4】:

    您是否尝试这样设置密码:

    wb = Workbook()
    ws = wb.worksheets[0]
    ws.protect('abc123')
    

    【讨论】:

    • 根据微软的说法,“工作表级别的保护并不是一种安全功能。它只是阻止用户修改工作表中的锁定单元格。” (support.microsoft.com/en-us/office/…) 上面的问题是询问工作簿密码,但您建议的答案仅适用于工作表密码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多