c# - 更改 protected 工作表

标签 c# excel

目前,我的 excel 文件有两张表,一张名为“English”,一张名为“French”。

Valid XHTML

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

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.ProtectContentsWorksheet.ProtectDataWorksheet.ProtectDrawingObjectsWorksheet.ProtectFormattingWorksheet.ProtectionMode 以便您可以以相同的方式重新保护它。如果您使用密码破解程序而不是知道密码后,您还可以从例程中获取破解的密码并将其用作 Password 方法的 Worksheet.Protect 参数。这将无缝地将保护设置为以前的方式。

关于c# - 更改 protected 工作表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39130278/

相关文章:

c# - 如何返回一个空的 IEnumerable?

sql-server - 带有数据连接文件的 Excel

范围从-1而不是0开始的Excel VBA数组

python - 使用 python 打印 Excel 工作簿

c# - 在 Unity 中闪烁游戏对象

c# - AutoMapper 花费 4 秒绘制 19 个对象

C# Entity Framework SaveChanges() 不工作

c# - 是否可以通过代码创建Azure数据工厂数据流?

oracle - 对象关闭时不允许执行 ADO Oracle 操作

excel - .选定的命令形式 Excel