目前,我的 excel 文件有两张表,一张名为“English”,一张名为“French”。
我以编程方式打开我的工作簿并编辑我的英文表,没有任何问题。当我打开第二张工作表时,出现以下错误:
The cell or chart you're trying to change is on a protected sheet. To make a change, unprotect the sheet. You might be requested to enter a password.
请问,我应该如何编辑我的第二张表?
Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
Workbook wb = excel.Workbooks.Open(fileLocation);
ws1.Range["E5"].Value = StartDate;
ws1.Range["G5"].Value = EndDate;
Worksheet ws = wb.Worksheets.get_Item("French");
ws.Select(Type.Missing);
ws.Range["E5"].Value = StartDate; // <- Crashes here
ws.Range["G5"].Value = EndDate;
最佳答案
您的工作表受到保护,因此您需要在修改之前取消保护它。
Worksheet ws = wb.Worksheets.get_Item("French");
// Check for protection and unlock the worksheet
If ws.ProtectContents {
ws.Unprotect("PROTECTION_PASSWORD");
}
ws.Select(Type.Missing);
ws.Range["E5"].Value = StartDate; // <- Crashes here
ws.Range["G5"].Value = EndDate;
如果您不知道密码,您可以使用代码 in this question 在旧 Excel 文件上轻松暴力破解。 (您必须将其移植到 C#,但这应该是微不足道的)。对于 Excel 2013 及更高版本,请注意该问题中提出的问题,因为暴力破解不再有效。
之后您可能想要重新保护工作表(否则您通过删除某人决定放在工作表上的保护来显着改变文件的结构。为此,您需要使用 Worksheet.Protect 。可能您我想保存旧的保护参数,如
Worksheet.ProtectContents
、 Worksheet.ProtectData
、 Worksheet.ProtectDrawingObjects
、 Worksheet.ProtectFormatting
和 Worksheet.ProtectionMode
以便您可以以相同的方式重新保护它。如果您使用密码破解程序而不是知道密码后,您还可以从例程中获取破解的密码并将其用作 Password
方法的 Worksheet.Protect
参数。这将无缝地将保护设置为以前的方式。
关于c# - 更改 protected 工作表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39130278/