Ep Plus: применение одного фильтра к диапазонам таблиц - PullRequest
0 голосов
/ 28 марта 2019

Я создал экспорт, чтобы преуспеть в c #, используя EP plus. Я сгенерировал несколько таблиц в Excel успешно. Проблема, с которой я сейчас сталкиваюсь, связана с фильтром. У каждой таблицы есть заголовки столбцов, что является ожидаемым форматом, но я также ожидаю, что фильтр будет применяться только к первому заголовку таблицы, и пользователь должен иметь возможность фильтровать таблицы по рабочему листу с помощью того же фильтра. На данный момент каждая таблица имеет свой собственный фильтр, который ограничен фильтрацией строк, попадающих в ее диапазон.

Я попытался применить фильтр вручную к первому заголовку столбца на экспортированном листе, и он работает. Как мне сделать это программно, используя EP plus.

enter image description here

Код

public static void Print(ExcelPackage package, ILookup<string, FIRMWIDE_MANAGER_ALLOCATION> allocation)
        {

            ExcelWorksheet wsSheet1 = package.Workbook.Worksheets.Add("Sheet1");
            wsSheet1.Protection.IsProtected = false;

            IEnumerable<FIRMWIDE_MANAGER_ALLOCATION> allocationGroup = null;

            var rowNumber = 1;
            int tableIndex = 0;

           // var showFilter = true;
            var showHeader = true;
            var showTotals = true;
            var rowAdderForHeader = Convert.ToInt32(showHeader);
            var rowAdderForFooter = Convert.ToInt32(showTotals);

            //var range = wsSheet1.Cells["A1:G100"];
            //range.AutoFilter = true;

            foreach (var ag in allocation)
            {
                tableIndex += 1;
                Console.WriteLine(tableIndex);

                allocationGroup = ag.Select(a => a);
                var allocationList = allocationGroup.ToList();
                var count = allocationList.Count();
                wsSheet1.Cells["E" + rowNumber + ":E" + (count + rowNumber)].Style.Numberformat.Format = "#,##0";


                using (ExcelRange Rng = wsSheet1.Cells["A" + rowNumber + ":G" + (count + rowNumber)])
                {
                    ExcelTableCollection tblcollection = wsSheet1.Tables;
                    ExcelTable table = tblcollection.Add(Rng, "tblAllocations" + tableIndex);



                    //Set Columns position & name  
                    table.Columns[0].Name = "Manager Strategy";
                    table.Columns[1].Name = "Fund";
                    table.Columns[2].Name = "Product Name";
                    table.Columns[3].Name = "As Of";
                    table.Columns[4].Name = "EMV (USD)";
                    table.Columns[5].Name = "% of Fund Strategy";
                    table.Columns[6].Name = "% of Product";


                    wsSheet1.Column(1).Width = 45;
                    wsSheet1.Column(2).Width = 45;
                    wsSheet1.Column(3).Width = 55;
                    wsSheet1.Column(4).Width = 15;
                    wsSheet1.Column(5).Width = 25;
                    wsSheet1.Column(6).Width = 20;
                    wsSheet1.Column(7).Width = 20;

                    table.ShowHeader = showHeader;
                    //table.ShowFilter = showFilter;
                    table.ShowTotal = showTotals;
                    //Add TotalsRowFormula into Excel table Columns  
                    table.Columns[0].TotalsRowLabel = "Total Rows";
                    table.Columns[4].TotalsRowFormula = "SUBTOTAL(109,[EMV (USD)])";
                    table.Columns[5].TotalsRowFormula = "SUBTOTAL(109,[% of Fund Strategy])";
                    //table.Columns[6].TotalsRowFormula = "SUBTOTAL(109, [% of Product])";

                    table.TableStyle = TableStyles.Dark10;
                }

                //Account for the table header
                rowNumber += rowAdderForHeader;

                foreach (var ac in allocationGroup)
                {
                    wsSheet1.Cells["A" + rowNumber].Value = ac.MANAGER_STRATEGY_NAME;
                    wsSheet1.Cells["B" + rowNumber].Value = ac.MANAGER_FUND_NAME;
                    wsSheet1.Cells["C" + rowNumber].Value = ac.PRODUCT_NAME;
                    wsSheet1.Cells["D" + rowNumber].Value = ac.EVAL_DATE.HasValue ? ac.EVAL_DATE.Value.ToString("MMM dd, yyyy") : string.Empty;
                    wsSheet1.Cells["E" + rowNumber].Value = Math.Round((double)ac.UsdEmv,2);
                    wsSheet1.Cells["F" + rowNumber].Value = Math.Round((double)ac.GroupPercent,2);
                    wsSheet1.Cells["G" + rowNumber].Value = Math.Round((double)ac.WEIGHT_WITH_EQ, 2); 
                    rowNumber++;
                }
                //Account for the table footer
                rowNumber += rowAdderForFooter;
            }
        }
    }
...