【问题标题】:Is it possible to programmatically password protect an excel spreadsheet?是否可以以编程方式密码保护 Excel 电子表格?
【发布时间】:2011-05-23 15:12:15
【问题描述】:

我们目前在我们的服务器上创建 Excel 电子表格,然后邮寄给客户。我们现在需要密码保护这些文件。是否可以以编程方式为这些文件添加 Excel 密码保护?

我不希望在服务器上安装 Excel 并使用表单自动化来执行此操作。

我是 C#/.net 开发人员,但任何语言/方法都将不胜感激

【问题讨论】:

标签: c# .net excel


【解决方案1】:

您也可以在http://hivelink.io 上查看“HiveLink”。该服务允许您通过为您的用户创建电子表格的轻量级 版本来保护您的 Excel 电子表格。轻量版只有输入界面,去掉了所有的计算,还有输出结果界面。您可以向每个用户发送邀请,他们可以下载轻量级电子表格,输入他们的输入并在不久后收到结果。 HiveLink 安全地连接电子表格,从用户那里获取输入并通过原始电子表格运行并返回结果。

【讨论】:

    【解决方案2】:

    感谢您的回复。看来我不能轻易做到我所要求的。所以我不得不使用自动化。 !st 我添加了对 excel 互操作的引用,然后以下代码完成了我需要的操作。 (使用 2 个参数文件名和密码从命令行运行)

        static void Main(string[] args)
        {
            if (args.Length != 2)
                return;
    
            string filename = args[0];
            string password = args[1];
    
            if (!File.Exists(filename))
                return;
    
            Excel.Application oexcel;
            Excel.Workbook obook;
    
            oexcel = new Excel.Application();
            oexcel.DisplayAlerts = false;
    
            obook = oexcel.Workbooks.Open(filename, 0, false, 5, "", "", true, System.Reflection.Missing.Value, "\t", false, false, 0, true, 1, 0);
    
            try
            {
                obook.SaveAs(filename, Password: password, ConflictResolution: XlSaveConflictResolution.xlLocalSessionChanges);
            }
            finally
            {
                obook.Close();
                oexcel.Quit();
            }
        }
    

    【讨论】:

      【解决方案3】:

      我建议使用经过验证的加密包。 (例如 PGP)excel 提供的密码保护没有那么强。

      【讨论】:

      • 我们已经对一些文件使用了 PGP,但是一些用户指定他们只想要一个受密码保护的 excel 文件。
      • @user406225 - 为什么他们想要这样的文件?如果是为了提供数据安全,那么他们的请求是无效的。除了某些版本(2002、2003?)并且只有在选项设置完全正确的情况下,他们不会从受密码保护的 excel 中获得安全性。办公文档使用的加密和保护存在巨大的安全漏洞。
      • 嗨 Hogan,您对 Excel 密码保护中的安全性差的说法有什么参考吗? AFAIK Excel(至少从 2007 年开始)使用 AES 256 加密文件(Office 使用 Office CryptoAPI),但即使这样也可以防止短密码。
      • @Jesper - 据我了解,如果可以比较多个文档,这些文档可能会被破坏。旧的东西明显坏了,默认是使用兼容性。正如 MS 所说,它并非旨在保护文档“仅仅是一种防止文档意外更改的功能。”
      • 嗨,霍根,你说的是两件不同的事情。一个是使用 (AFAIR) RC4 进行加密的旧版 Office 应用程序,显然现在太弱而无法使用。但正如我所说,今天 Office 使用 AES 256 进行加密,并且没有已知的攻击——当然,除了字典攻击。 “mereley ...防止意外” - 该部分涉及“文档保护”,允许应用程序显示例如与用户的“解锁编辑”对话。它不保护文档本身。顺便说一句,Office 用来散列“解锁”密码的算法非常弱。
      【解决方案4】:

      编辑:被误解的问题,忽略。

      解决此问题的最简单方法是使用加密进行压缩。

      【讨论】:

      • 您可以为 ecel 文件添加密码,这样当您尝试使用 excel 打开它们时,系统会提示您输入密码。这就是用户希望我们做的事情
      【解决方案5】:

      我能想到的任何事情都需要服务器上的 Excel 并使用 Excel 自动化。

      但是,另一种选择是 SharpZipLib 并将 Excel 文件放入受密码保护的 ZIP 文件中。 Windows XP 和更好的 ZIP 附带一个可以处理密码的默认处理程序,因此最终效果是一个受密码保护的文件,他们只需要先解压缩它,但不需要额外的软件。唯一的缺点是受密码保护的 Zip 使用有缺陷的算法,我不相信 ZIP 的 Windows Shell 扩展可以理解 AES。

      【讨论】:

        【解决方案6】:

        您的任务并不容易,但无论如何,您应该看看 Gray Knowlton 的文章“Office 2007 中的文档加密与 Open XML”http://blogs.technet.com/b/gray_knowlton/archive/2008/09/02/document-encryption-in-office-2007-with-open-xml.aspx

        还可以查看 MSDN 上 http://social.msdn.microsoft.com/Forums/en-US/oxmlsdk/thread/c48048a3-4013-419f-b612-3d971acb1919 上的主题

        我希望这会有所帮助。

        :o)

        【讨论】:

          【解决方案7】:

          我自己没试过,但是 http://xlsgen.arstdesign.com/intro.html 看起来它可能对你有用(尤其是 http://xlsgen.arstdesign.com/core/locked.html 上的详细信息)

          作为推论,在我们几年前开展的一个项目中,我们有一个系统可以使用互操作库构建 Excel 文件。在开发中它工作得很好,在测试中它工作得很好,但每次都在登台时爆炸。最后将其追踪到支持服务器环境上的互操作程序集的 MS NOT。我们的登台是 Server 2008,测试是 2003,所以如果您在服务器上使用互操作,您的里程可能会非常大。

          【讨论】:

            【解决方案8】:

            我不知道这是否有帮助,但我最近不得不做一些非常相似的事情。我必须使用 OpenXML 创建工作簿,然后使用密码保护它们。

                 Public Sub CreateWorkBookPassword(WorkBookPath As String, password As String)
            
                    Dim excelApplication As New Application()
                    Dim excelWorkbook = excelApplication.Workbooks.Add(WorkBookPath)
            
                    Try
                        excelApplication.DisplayAlerts = False
                        excelWorkbook.SaveAs(WorkBookPath, XlFileFormat.xlOpenXMLWorkbook, password)
            
                    Finally
                        excelWorkbook.Close()
                        excelApplication.Quit()
            
                        'Close all excel processes that may be running
                        Dim excelProcesses() As Process = Process.GetProcessesByName("EXCEL")
                        For Each Process As Process In excelProcesses
                            Process.Kill()
                            Exit For
                        Next
                    End Try
                End Sub
            

            用法

             CreateWorkBookPassword("PathToExistingWorkbook", "yourPassword")
            

            【讨论】:

              猜你喜欢
              • 2018-06-11
              • 2011-07-20
              • 1970-01-01
              • 1970-01-01
              • 2014-02-16
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多