【问题标题】:Excel File Password Protection with Open XML SDK使用 Open XML SDK 保护 Excel 文件密码
【发布时间】:2013-02-16 13:27:44
【问题描述】:

我正在使用 Open XML SDK 创建 excel 文件。

我想用密码保护他们。

您知道如何使用 Open XML SDK 使用密码保护 excel 文件吗?

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

【问题讨论】:

    标签: excel passwords openxml protection


    【解决方案1】:

    可以通过打开 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);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2019-05-06
      • 2011-02-06
      • 1970-01-01
      • 2010-10-29
      • 1970-01-01
      • 2011-09-22
      • 2018-12-18
      • 1970-01-01
      相关资源
      最近更新 更多