对受保护的工作表进行更改

时间:2016-08-24 18:11:03

标签: c# excel

目前我的Excel文件有两张,一张标题为“英文”的图纸和一张标题为“法文”的图纸。

Valid XHTML

我以编程方式打开我的工作簿并编辑我的英文表,没有任何问题。当我打开第二张纸时,我收到以下错误:

  

您尝试更改的单元格或图表位于受保护的工作表上。要进行更改,请取消保护工作表。可能会要求您输入密码。

请问,我应该如何编辑第二张表?

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;

1 个答案:

答案 0 :(得分:2)

您的工作表受到保护,因此您需要在修改之前对其进行取消保护。

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.ProtectContentsWorksheet.ProtectDataWorksheet.ProtectDrawingObjectsWorksheet.ProtectFormatting和{{1}所以你可以用同样的方式重新保护它。如果你使用的是密码破解程序而不是知道密码,你也可以从例程中获取破解的密码并将其用作Worksheet.ProtectionMode的{​​{1}}参数。 {1}}方法。这将无缝地将保护设置恢复到以前的状态。