c# Свернуть поля в сводной таблице Excel

У меня есть готовый Excel со сводной таблицей, которая получает данные с другого листа, я заполняю код С#.

В сводной таблице есть 3 поля строк, которые после заполнения и обновления сводной таблицы с помощью кода сделали все строки расширенными после открытия Excel.

Я уже пробовал использовать метод DrilledDown (в полях, но получаю ошибку), ShowDetails работает только в элементах (внутри полей).

Я заставил его работать, но это занимает слишком много времени, потому что он использует ShowDetails в каждом элементе, есть ли другой способ и быстро свернуть поля? (открыть Excel и сделать это вручную не вариант: P).

Мой код (который сворачивает поля):

listItems.Add("Data");
                listItems.Add("Months");
                listItems.Add("Grocery");

                Microsoft.Office.Interop.Excel.PivotFields pfs = (Microsoft.Office.Interop.Excel.PivotFields)pivot.PivotFields();

                foreach (String s in listItems){
                Microsoft.Office.Interop.Excel.PivotField pf = (Microsoft.Office.Interop.Excel.PivotField)pivot.PivotFields(s);

                foreach (Microsoft.Office.Interop.Excel.PivotItem item in (Microsoft.Office.Interop.Excel.PivotItems)pf.PivotItems())
                {
                    if (item.Value == "(blank)")
                       item.Visible = false;
                   item.ShowDetail = false;
                }
                }

Дело в том, что, может быть, есть более простой и быстрый способ? Я пытался что-то вроде

pf.DrilledDown = False;

or

pf.ShowDetail = False;

Но это не работает.. :\ Любые идеи?

ТИА


person chimino    schedule 17.07.2015    source источник


Ответы (1)


Ну, как-нибудь умудритесь свернуть только первый элемент в каждом поле (таким образом, цикл не доходит до конца, а поскольку Excel автоматически сворачивает другие подобные элементы (когда вы сворачиваете одно из полей того же типа), он работает ).

PS: Так как первое поле из продуктов всегда "_blank", я точно знаю, что после "_blank" всегда что-то есть, но я не могу применить только коллапс к "_blank", потому что тогда это не применяются к другим элементам (я предположил, что это должно быть что-то со значением внутри).

Так что... получил это (это намного быстрее, но все же, я думаю, что он будет существовать по-другому (с более простым кодом на c # (без использования макросов VB внутри Excel)), но если есть, то трудно найти - немногие люди управляют сводными таблицами программно.

                listItems.Add("Date");
                listItems.Add("Months");
                listItems.Add("Groceries");

                Microsoft.Office.Interop.Excel.PivotFields pfs = (Microsoft.Office.Interop.Excel.PivotFields)pivot.PivotFields();

                foreach (String s in listItems)
                {
                    Microsoft.Office.Interop.Excel.PivotField pf = (Microsoft.Office.Interop.Excel.PivotField)pivot.PivotFields(s);



                    foreach (Microsoft.Office.Interop.Excel.PivotItem item in (Microsoft.Office.Interop.Excel.PivotItems)pf.PivotItems())
                    {
                        if (pf.Value == "Date")
                        {
                            item.ShowDetail = false;
                            break;
                        }
                        if (pf.Value == "Months")
                        {
                            item.ShowDetail = false;
                            break;
                        }
                        if (pf.Value == "Groceries")
                        {

                            if (item.Value == "(blank)")
                            {
                                item.Visible = false;
                                continue;
                            }
                            item.ShowDetail = false;
                            break;

                        }
                    }
                }
person chimino    schedule 17.07.2015