是否可以通过编程方式密码保护Excel电子表格?

时间:2011-05-23 15:12:15

标签: c# .net excel

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

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

我是一名C#/ .net开发人员,但任何语言/方法都会受到赞赏

9 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分: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();
        }
    }

答案 2 :(得分:1)

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

答案 3 :(得分:0)

编辑:误解了问题,无视。

我解决这个问题的最简单方法是使用加密压缩。

答案 4 :(得分:0)

我能想到的任何东西都需要服务器上的Excel并使用Excel Automation。

然而,替代方案是SharpZipLib并将Excel文件放入受密码保护的ZIP文件中。 Windows XP和更好的附带ZIP的默认处理程序,可以处理密码,因此净效果是受密码保护的文件,他们只需要先提取它,但不需要额外的软件。唯一的缺点是密码保护Zip使用了一个有缺陷的算法,我不相信ZIP的Windows Shell扩展可以理解AES。

答案 5 :(得分:0)

您不是为轻松的任务而设置的,但无论如何,您应该查看Gray Knowlton撰写的文章“使用Open XML的Office 2007中的文档加密”http://blogs.technet.com/b/gray_knowlton/archive/2008/09/02/document-encryption-in-office-2007-with-open-xml.aspx

同时在http://social.msdn.microsoft.com/Forums/en-US/oxmlsdk/thread/c48048a3-4013-419f-b612-3d971acb1919

上查看MSDN上的主题

我希望这有点帮助。

:○)

答案 6 :(得分:0)

我自己没试过,但是 http://xlsgen.arstdesign.com/intro.html 看起来它可能适合您(尤其是http://xlsgen.arstdesign.com/core/locked.html

上的详细信息

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

答案 7 :(得分:0)

我不知道这是否有帮助,但是最近我不得不做一些非常相似的事情。我必须使用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")

答案 8 :(得分:0)

  

我不希望在服务器上安装Excel并使用表格   自动化做到这一点。

您必须尝试使用​​.NET API的GroupDocs.Merger。无论您是否在服务器上安装了Excel,都可以使用它来保护Excel的电子表格。

string password = "iamironman";  
Stream openFile = new FileStream(sourceFile, FileMode.Open);  
DocumentResult result = new DocumentHandler().AddPassword(openFile, password);  
Stream documentStream = result.Stream;
var fileStream = File.Create(@"D:/Data/Output." + result.FileFormat);
documentStream.CopyTo(fileStream);
documentStream.Close();

披露:我是GroupDocs的一名开发人员。