Excel c# 中锁定单元格有什么问题
What's wrong with locking cells in Excel c#
我用 Excel 365 尝试了下面的代码。
好吧,它不起作用。我尝试了几个变化。锁定似乎不起作用。
要么单元格根本没有锁定,要么它们不能被明显选中但仍然可以编辑。
这里似乎有什么东西坏了。
有人有解决办法吗?
我只是想锁定某些单元格而其他单元格不锁定,其实非常非常简单。
在下面的代码中,我的结果是我仍然可以编辑单元格。所有这些!
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
using Excel = Microsoft.Office.Interop.Excel;
using Office = Microsoft.Office.Core;
using Microsoft.Office.Tools.Excel;
namespace SampleVSTOAddIn
{
public partial class ThisAddIn
{
private void WorkbookOpen(Microsoft.Office.Interop.Excel.Workbook wb)
{
Excel.Worksheet activeWorksheet = ((Excel.Worksheet)Application.ActiveSheet);
activeWorksheet.Protect(UserInterfaceOnly: true);
activeWorksheet.EnableSelection = Excel.XlEnableSelection.xlUnlockedCells;
activeWorksheet.get_Range("A1").Value2 = "Locked";
activeWorksheet.get_Range("B1").Value2 = "Unlocked";
activeWorksheet.get_Range("A1").Style.Locked = true;
activeWorksheet.get_Range("B1").Style.Locked = false;
}
private void InternalStartup()
{
this.Application.WorkbookOpen += new Microsoft.Office.Interop.Excel.AppEvents_WorkbookOpenEventHandler(WorkbookOpen);
}
}
}
天哪,我的坏蛋。
我设置了 Style.Locked 但需要设置 .Locked。
真是个愚蠢的错误。
此处完成:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
using Excel = Microsoft.Office.Interop.Excel;
using Office = Microsoft.Office.Core;
using Microsoft.Office.Tools.Excel;
namespace SampleVSTOAddIn
{
public partial class ThisAddIn
{
private void WorkbookOpen(Microsoft.Office.Interop.Excel.Workbook wb)
{
Excel.Worksheet activeWorksheet = ((Excel.Worksheet)Application.ActiveSheet);
activeWorksheet.Protect(UserInterfaceOnly: true);
activeWorksheet.EnableSelection = Excel.XlEnableSelection.xlUnlockedCells;
activeWorksheet.get_Range("A1").Value2 = "Locked";
activeWorksheet.get_Range("B1").Value2 = "Unlocked";
activeWorksheet.get_Range("A1").Locked = true;
activeWorksheet.get_Range("B1").Locked = false;
}
private void InternalStartup()
{
this.Application.WorkbookOpen += new Microsoft.Office.Interop.Excel.AppEvents_WorkbookOpenEventHandler(WorkbookOpen);
}
}
}
我用 Excel 365 尝试了下面的代码。 好吧,它不起作用。我尝试了几个变化。锁定似乎不起作用。 要么单元格根本没有锁定,要么它们不能被明显选中但仍然可以编辑。 这里似乎有什么东西坏了。 有人有解决办法吗? 我只是想锁定某些单元格而其他单元格不锁定,其实非常非常简单。
在下面的代码中,我的结果是我仍然可以编辑单元格。所有这些!
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
using Excel = Microsoft.Office.Interop.Excel;
using Office = Microsoft.Office.Core;
using Microsoft.Office.Tools.Excel;
namespace SampleVSTOAddIn
{
public partial class ThisAddIn
{
private void WorkbookOpen(Microsoft.Office.Interop.Excel.Workbook wb)
{
Excel.Worksheet activeWorksheet = ((Excel.Worksheet)Application.ActiveSheet);
activeWorksheet.Protect(UserInterfaceOnly: true);
activeWorksheet.EnableSelection = Excel.XlEnableSelection.xlUnlockedCells;
activeWorksheet.get_Range("A1").Value2 = "Locked";
activeWorksheet.get_Range("B1").Value2 = "Unlocked";
activeWorksheet.get_Range("A1").Style.Locked = true;
activeWorksheet.get_Range("B1").Style.Locked = false;
}
private void InternalStartup()
{
this.Application.WorkbookOpen += new Microsoft.Office.Interop.Excel.AppEvents_WorkbookOpenEventHandler(WorkbookOpen);
}
}
}
天哪,我的坏蛋。 我设置了 Style.Locked 但需要设置 .Locked。 真是个愚蠢的错误。
此处完成:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
using Excel = Microsoft.Office.Interop.Excel;
using Office = Microsoft.Office.Core;
using Microsoft.Office.Tools.Excel;
namespace SampleVSTOAddIn
{
public partial class ThisAddIn
{
private void WorkbookOpen(Microsoft.Office.Interop.Excel.Workbook wb)
{
Excel.Worksheet activeWorksheet = ((Excel.Worksheet)Application.ActiveSheet);
activeWorksheet.Protect(UserInterfaceOnly: true);
activeWorksheet.EnableSelection = Excel.XlEnableSelection.xlUnlockedCells;
activeWorksheet.get_Range("A1").Value2 = "Locked";
activeWorksheet.get_Range("B1").Value2 = "Unlocked";
activeWorksheet.get_Range("A1").Locked = true;
activeWorksheet.get_Range("B1").Locked = false;
}
private void InternalStartup()
{
this.Application.WorkbookOpen += new Microsoft.Office.Interop.Excel.AppEvents_WorkbookOpenEventHandler(WorkbookOpen);
}
}
}