使用Open XML SDK保护Excel文件密码

前端之家收集整理的这篇文章主要介绍了使用Open XML SDK保护Excel文件密码前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用Open XML SDK来创建excel文件.

我想用密码保护他们.

您是否知道使用Open XML SDK保护excel文件的密码?

我知道“com”对象的方式来保护它们,但它不适合我的应用程序.我需要使用Open XML SDK或其他方式保护文件.

打开xml可以创建用于保护工作簿或工作表的Excel密码.

以下代码示例是Vincent(http://spreadsheetlight.com/about/)(https://stackoverflow.com/users/12984/vincent-tan)的建议(我再次感谢他:)

using (SpreadsheetDocument spreadSheet = SpreadsheetDocument.Open(docname,true))
        {
            foreach (var worksheet in spreadSheet.WorkbookPart.WorksheetParts)
           {
                worksheet.Worksheet.Append(new SheetProtection(){ Password = “CC”});
               // add this in case it still doesn’t work. This makes sure the data is saved.
               //worksheet.Worksheet.Save();
           }
        }

如果你有图表或其他东西

以下代码示例是Vincent(http://spreadsheetlight.com/about/)(https://stackoverflow.com/users/12984/vincent-tan)的建议(我再次感谢他:)

bool bFound;
OpenXmlElement oxe;
SheetProtection prot;
using (SpreadsheetDocument spreadSheet = SpreadsheetDocument.Open("OtoPark.xlsx",true))
{
    foreach (var worksheet in spreadSheet.WorkbookPart.WorksheetParts)
    {
        prot = new SheetProtection();
        prot.Password = "CC";
        // these are the "default" Excel settings when you do a normal protect
        prot.Sheet = true;
        prot.Objects = true;
        prot.Scenarios = true;

        // Open up Excel and do a password protect yourself and use the
        // Productivity Tool to see the property values of the resulting Excel file.
        // Consider not using the Password property and use:
        //prot.AlgorithmName = "SHA-512";
        //prot.HashValue = "somehashvaluebythealgorithm";
        //prot.SaltValue = "somesalt";
        //prot.SpinCount = 100000;

        bFound = false;
        oxe = worksheet.Worksheet.FirstChild;
        foreach (var child in worksheet.Worksheet.ChildElements)
        {
            // start with SheetData because it's a required child element
            if (child is SheetData || child is SheetCalculationProperties)
            {
                oxe = child;
                bFound = true;
            }
        }

        if (bFound)
        {
            worksheet.Worksheet.InsertAfter(prot,oxe);
        }
        else
        {
            worksheet.Worksheet.PrependChild(prot);
        }

        worksheet.Worksheet.Save();
    }
}

这些方法可以保护任何用户无法意外更改数据.但是,如果您不希望任何不知道密码的用户查看数据,那么您可以使用以下库:

http://dotnetzip.codeplex.com/

您有一个受密码保护的压缩文件,其中包含您使用dotnetzip库的excel.xlsx文件.

一个例子:

public void RNCreateZipFile(string ExcelDocName,string PassWord,string ZipDocName)
{
    // create a zip
    using (var zip = new ZipFile())
    {
        zip.Password = PassWord;
        zip.AddFile(ExcelDocName,"");
        zip.Save(ZipDocName);
    }
}

猜你在找的XML相关文章