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

使用VSTO,C#FX 3.5,如何检查Excel工作簿或工作表是密码保护或不?

检查HasPassword属性。

您可以通过Workbook.HasPassword属性检查工作簿是否受密码保护。 您可以通过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); } 

工作表可以保护单元格内容,保护graphics对象和/或保护脚本。 这些可以分别通过Worksheet.ProtectContents , Worksheet.ProtectDrawingObjects和Worsksheet.ProtectScenarios属性进行检查。 我不知道任何testing方式,如果工作表是用密码保护的,除了试图调用Worksheet.Unprotect ,传递一个空的string作为密码,然后看看工作表是否被成功解除保护:

 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”将locking所有更改,无论是由用户还是通过代码进行。

 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”不会保留,并且在工作簿closures时会自动恢复为“false”。 如果您希望在以后的所有会话中都成为“真实”,则每次打开工作簿时都必须通过调用“Worksheet.Protect”方法重新应用“UserInterfaceOnly”设置。 这可以通过订阅Workbook.Open事件来完成。

您也可能需要阅读有关Worksheet.Protect方法的帮助文件,以便了解可选参数,特别注意“UserInterfaceOnly”参数。