Пишу надстройку для excel 2010, с помощью VSTO на C#, библиотека Microsoft.Office.Interop.Excel
Хочу контролировать отображение следующих элементов:
Ловлю следующую ошибку "Нельзя установить свойство Visible класса PivotItem"
Код:
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("Это не сводная таблица");
}
}