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

我正在使用Open XML SDK来创buildExcel文件。

我想用密码保护他们。

不pipe怎样,你知道用Open XML SDK来保护excel文件的密码吗?

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

创build一个Excel密码保护woorkbook或工作表是可能的通过打开XML。

以下代码示例是Vincent( http://spreadsheetlight.com/about/ )的build议( 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/ )的build议( 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); } }