首页 > 解决方案 > 在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);

        }
    }
}

标签: c#excelvsto

解决方案


哦,我的,我的坏。我设置了 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);

        }
    }
}

推荐阅读