C # Excel PivotItem Видимость - PullRequest
0 голосов
/ 05 апреля 2019

Я хочу использовать C #, чтобы получить значения флажков из фильтра Excel.enter image description here

, поэтому ...

Proj_1 should be true
Proj_2 should be true
Proj_3 should be false
Proj_4 should be false

Ниже приведен код, который я сейчас использую, но item.Visible ВСЕГДА false, независимо от того, имеет ли пользовательский интерфейспроверить это или нет (если я не сниму флажок Выбрать несколько элементов), но мне нужно, чтобы отмечен

  foreach (PivotField fld in pivotFields)
                {
                    Console.WriteLine(fld.Name + " -- " + fld.Orientation + " -- " + fld.EnableItemSelection + " -- " + fld.EnableMultiplePageItems + " -- ");

                    foreach (PivotItem item in fld.PivotItems(Type.Missing))
                    {
                        if (item.Visible == true)
                        {
                            Console.WriteLine("Item"  + item.Name + " in field " + fld.Name + "is Visible  (Selected)");
                        }
                        else
                        {
                            Console.WriteLine("Item" + item.Name + " in field " + fld.Name + "is Hidden (Not Selected)");
                        }
                    }

                }

1 Ответ

0 голосов
/ 05 апреля 2019

Это то, что работает, если добавлена ​​библиотека Microsoft.Office.Interop.Excel:

enter image description here

namespace ExcelAtSomething
{
    using System;
    using Excel = Microsoft.Office.Interop.Excel;

    class Startup
    {
        static void Main()
        {
            string filePath = @"C:\Users\stackoverflow\Desktop\Sample.xlsx";
            Excel.Application excel = new Excel.Application();
            excel.Visible = true;
            excel.EnableAnimations = true;

            Excel.Workbook wkb = Open(excel, filePath);

            foreach (Excel.Worksheet xlWorksheet in wkb.Worksheets)
            {
                Excel.PivotTables pivotTablesCollection = xlWorksheet.PivotTables();
                if (pivotTablesCollection.Count > 0)
                {
                    for (int i = 1; i <= pivotTablesCollection.Count; i++)
                    {
                        Excel.PivotTable currentPivotTable = pivotTablesCollection.Item(i);
                        Console.WriteLine($"Table is named -> {currentPivotTable.Name}");

                        foreach (Excel.PivotField pivotField in currentPivotTable.PivotFields())
                        {
                            Console.WriteLine($"\nField is named -> {pivotField.Name}");
                            foreach (Excel.PivotItem visibleItems in pivotField.VisibleItems)
                            {
                                Console.WriteLine($"Visible item name -> {visibleItems.Name}");
                            }

                            foreach (Excel.PivotItem PivotItem in pivotField.PivotItems())
                            {
                                Console.WriteLine($"Item is named -> {PivotItem.Name}");
                                Console.WriteLine(PivotItem.Visible);
                            }
                        }
                    }
                }
            }

            excel.EnableAnimations = true;
            wkb.Close(true);
            excel.Quit();
            Console.WriteLine("Finished!");
        }

        private static Excel.Workbook Open(Excel.Application excelInstance,
                string fileName, bool readOnly = false,
                bool editable = true, bool updateLinks = true)
        {
            Excel.Workbook book = excelInstance.Workbooks.Open(
                fileName, updateLinks, readOnly,
                Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                Type.Missing, editable, Type.Missing, Type.Missing, Type.Missing,
                Type.Missing, Type.Missing);
            return book;
        }
    }
}

Хитрость в том, что за исключением PivotItem есть PivotField, в котором есть список видимых элементов.Если вы отображаете их, то отображаются только видимые:

enter image description here

Воспроизведение немного и, возможно, создание пользовательской функции, которая возвращает невидимоеэлементы, которых нет в этом списке, является хорошим вариантом для Excel.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...