Что не так с блокировкой ячеек в Excel c# - PullRequest
0 голосов
/ 20 марта 2020

Я попробовал следующий код ниже с 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);

        }
    }
}

1 Ответ

0 голосов
/ 20 марта 2020

О боже, мой плохой. Я установил 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);

        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...