@esus1707

C# interop, почему ошибка «Нельзя установить свойство Visible класса PivotItem»?

Пишу надстройку для excel 2010, с помощью VSTO на C#, библиотека Microsoft.Office.Interop.Excel

Хочу контролировать отображение следующих элементов:
64252d1a87aa4072424797.png

Ловлю следующую ошибку "Нельзя установить свойство Visible класса PivotItem"
64252d761697f867020006.png

Код:
private void BtnDateBetween_Click(object sender, RibbonControlEventArgs e)
{
    _Excel.Range ActCell = Globals.ThisAddIn.Application.ActiveCell;    //  берем активную ячейку
    if (ActCell.PivotCell != null)  //   является ли ячейка сводной(?)
    {
        _Excel.PivotCell pc = ActCell.PivotCell;    //  объект сводная ячейка (?)
        _Excel.PivotTable pt = ActCell.PivotTable;  //  объект сводная таблица
        _Excel.PivotField field = pc.PivotField;    //  объект сводное поле (?)
        if (field.PivotFilters != null) //  есть ли в поле фильтры?
        {

            //  проходим по выделенным полям и находим максимальную/минимальную дату
            DateTime DateMin = DateTime.MaxValue;
            DateTime DateMax = DateTime.MinValue;
            foreach (_Excel.PivotItem pivotItem in field.VisibleItems)
            {
                if (pivotItem.Visible is true)
                {
                    DateTime DateThis = DateTime.Parse(pivotItem.Name);
                    if (DateThis < DateMin)
                    {
                        DateMin = DateThis;
                    }
                    if (DateThis > DateMax)
                    {
                        DateMax = DateThis;
                    }
                }
            }
            MessageBox.Show("Min: " + DateMin.ToString() + ", Max:" + DateMax.ToString());
                    
            //  проходим по невидимым полям и пытаемся сделать видимыми те, что между максимальной и минимальной датой
            String datelist = "";
            foreach (_Excel.PivotItem pivotItem in field.HiddenItems)
            {
                DateTime DateThis = DateTime.Parse(pivotItem.Name);
                if (DateMin < DateThis && DateMax > DateThis)
                {
                    pivotItem.Visible = true;  // ошибку ловлю здесь!
                }
            }
            MessageBox.Show(datelist);
        }
        else
        {
            MessageBox.Show("В этом поле нет фильтров");
        }
    }
    else
    {
        MessageBox.Show("Это не сводная таблица");
    }
}
  • Вопрос задан
  • 108 просмотров
Решения вопроса 1
@esus1707 Автор вопроса
Сам разобрался.
Вместо этого:
pivotItem.Visible = true;
Надо писать это:
field.PivotItems().Item(pivotItem.Name).Visible = true;
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы