Как включить группировку на защищенном листе Excel 2007 - без макросов - PullRequest
1 голос
/ 14 октября 2010

У меня есть книга Excel 2007 XLSX, которую я разрабатываю. Он имеет несколько листов, и большинство из них используют функцию группировки Excel. Я хочу иметь возможность защищать листы, защищать некоторые формулы и тому подобное от вмешательства пользователя, но, похоже, нет способа сделать это и все же позволить пользователю расширять или сворачивать сгруппированные столбцы в любое время.

Похоже, что стандартным ответом на это является вставка макроса с такими командами, как:

ActiveSheet.EnableGrouping
ActiveSheet.Proect UserInterfaceonly = true

Но в этой книге нет макросов и не может быть никогда. Есть ли способ сделать это в Excel без макроса?

Спасибо!

1 Ответ

0 голосов
/ 18 октября 2010

Если ничто не мешает запускать код извне, просто поместите этот код в другую книгу с поддержкой макросов ИЛИ запустите его из отдельного exe-приложения C # winform / console.Примечание. У меня был быстрый поиск объектной модели Excel 2007, и я не нашел метод EnableGrouping, но, возможно, я не выглядел достаточно усердно.

Внешний VBA

Sub UpdateWorkbook()  
Constant workbookpath As String = "C:\somepath\someworkbookname.xlsx"  
Dim wkbk As Workbook  
Set wkbk = Application.Workbooks.Open(workbookpath)  
Dim wksht As Worksheet  
Set wksht = wkbk.Worksheets.Item("sheetname")  
wksht.EnableGrouping  
wksht.Protect UserInterfaceonly = true  
Set wksht = Nothing  
Set wkbk = Nothing  
End Sub

Внешний C #

    public void UpdateWorkbook()  
    {  
        const string workbookpath = @"C:\somepath\someworkbookname.xlsx";  
    Excel.Application xlApp = New Excel.Application();   
    // To use the next line you need the Excel Extension library otherwise use Type.Missing.  
        Excel.Workbook wkbk  = Application.Workbooks.Open(workbookpath);  
        Excel.Worksheet wksht wksht = (Excel.Worksheet)wkbk.Worksheets.get_Item("sheetname");  
//Check the way this method works..  
        wksht.EnableGrouping();  
    // UserInterfaceOnly is the 6th parameter, so 5 before and 11 after.  
        wksht.Protect(missing,missing,missing,missing,missing,True,missing,missing,missing, missing,missing,missing,missing,missing,missing,missing,missing);  
        Set wksht = null;  
        Set wkbk = null;  
    Set xlApp = null;   
    }
...