2013-03-01 110 views
1

我正在使用Open XML SDK创建Excel文件。使用Open XML SDK进行Excel文件密码保护

我想用密码保护它们。

无论如何,您是否知道通过使用Open XML SDK来保护带密码的excel文件?

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

回答

4

通过打开xml,可以创建用于保护woorkbook或工作表的Excel密码。

下面的代码示例是文森特(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(); 
      } 
     } 

如果你有一个图表或东西然后

下面的代码示例是建议文森特(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/

你必须保护的压缩文件密码,通过包含您excel.xlsx文件使用dotnetzip库。

一个例子:

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); 
    } 
}