c# - 如何检查Excel工作簿或工作表是否受密码保护?

标签 c# .net security excel vsto

使用 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/

相关文章:

c# - Unity 中的 Mathf.clamp() 函数

c# - 具有异步/等待的 ContextBoundObject

.net - Silverlight 安全吗?

security - session 安全

c# - 计算客户端和服务器之间的带宽?

c# - Linq复制/复制整个记录

.net - 获取对象的DataContext

mysql - 如何防止数据库用户查询系统变量

c# - 未知鉴别器值 "SqlException",如何忽略动态类型的鉴别器

.NET CORE 身份主键