使用 vsto,C# fx 3.5, 如何检查Excel工作簿或工作表是否受密码保护?
最佳答案
您可以通过 Workbook.HasPassword 检查工作簿是否受密码保护属性(property)。您可以通过 Workbook.SaveAs 设置工作簿密码方法:
Excel.Workbook myWorkbook = ...;
if (!myWorkbook.HasPassword)
{
excelWorkbook.Application.DisplayAlerts = false;
excelWorkbook.SaveAs(
excelWorkbook.Name,
Type.Missing,
"My Password",
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing);
}
工作表可以保护其单元格内容、保护绘图对象和/或保护场景。这些可以通过 Worksheet.ProtectContents 检查, Worksheet.ProtectDrawingObjects , 和 Worsksheet.ProtectScenarios属性,分别。除了尝试调用 Worksheet.Unprotect 之外,我不知道有什么方法可以测试工作表是否受密码保护。 ,传入一个空字符串作为密码,然后查看工作表是否成功取消保护:
bool wasPasswordProtected;
try
{
myWorksheet.Unprotect(string.Empty);
// Unprotect suceeded:
wasPasswordProtected = false;
}
catch
{
// Unprotect failed:
wasPasswordProtected = true;
}
您可以通过 Worksheet.Protect 为工作表设置保护设置方法。如果未设置三个保护元素中的任何一个,以下示例将保护工作表。它还设置密码并将“UserInterfaceOnly”参数传递为“true”,这意味着只有用户被阻止编辑工作表,而不会阻止 VBA、VB.NET 或 C# 等代码操纵工作表工作表。将“UserInterfaceOnly”设置为“false”将锁定所有更改,无论是由用户还是通过代码进行的。
if(!myWorksheet.ProtectContents ||
!myWorksheet.ProtectDrawinngObjects ||
!myWorsksheet.ProtectScenarios)
{
string myPassword = "...";
bool protectContents = true;
bool protectDrawingObjects = true;
bool protectScenarios = true;
bool userInterfaceOnly = true;
myWorksheet.Protect(
myPassword,
protectDrawingObjects,
protectContents,
protectScenarios,
userInterfaceOnly,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing);
请注意,保存工作簿时“UserInterfaceOnly”不会持续存在,并在工作簿关闭时自动恢复为“false”。如果您希望它在所有 future 的 session 中也为“true”,则必须在每次打开工作簿时调用“Worksheet.Protect”方法来重新应用“UserInterfaceOnly”设置。这可以通过订阅 Workbook.Open 来完成。事件。
您可能还想阅读有关 Worksheet.Protect 的帮助文件方法,以便您了解可选参数,特别注意“UserInterfaceOnly”参数。
关于c# - 如何检查Excel工作簿或工作表是否受密码保护?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1943881/