c# Свиване на полета в обобщена таблица на Excel

Имам предварително направен Excel с PivotTable, който получава данни от друг работен лист, попълвам чрез c# код.

В PivotTable има 3 полета за редове, които след като бяха попълнени и Pivot обновени чрез код, направиха всички редове разширени след отваряне на Excel.

Вече се опитах да използвам метода DrilledDown (в полетата, но получавам грешка), ShowDetails работи само в елементите (вътре в полетата).

Накарах го да работи, но отнема твърде много време, защото използва ShowDetails във всеки елемент, има ли друг начин и бърз за свиване на полетата? (отваряне на ексела и да го направите ръчно не е опция :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;

Но не става.. :\ Някакви идеи?

TIA


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