我正在使用 Open XML SDK 创建 excel 文件。
我想用密码保护他们。
您是否知道使用 Open XML SDK 使用密码保护 excel 文件?
我知道保护它们的“com”对象方式,但是它不适合我的应用程序。我需要使用 Open XML SDK 或其他方式来保护文件。
我正在使用 Open XML SDK 创建 excel 文件。
我想用密码保护他们。
您是否知道使用 Open XML SDK 使用密码保护 excel 文件?
我知道保护它们的“com”对象方式,但是它不适合我的应用程序。我需要使用 Open XML SDK 或其他方式来保护文件。
可以通过打开 xml 创建用于保护工作簿或工作表的 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/
您有一个受密码保护的压缩文件,其中包含使用 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);
}
}