C# 在EPPlus上导出具有自定义表样式的数据透视表

C# 在EPPlus上导出具有自定义表样式的数据透视表,c#,excel,pivot-table,epplus,C#,Excel,Pivot Table,Epplus,我正在使用EPPlus导出数据透视表。我能够正确地导出所有数据,现在我正在尝试为excel上的数据透视表设置自定义样式,但我无法为其设置其他样式 为了做一些测试,我使用了在 以下是EPPlus的代码: public static string RunSample12(string sqlServerName, DirectoryInfo outputDir) { var list = new List<SalesDTO>(); if (

我正在使用EPPlus导出数据透视表。我能够正确地导出所有数据,现在我正在尝试为excel上的数据透视表设置自定义样式,但我无法为其设置其他样式

为了做一些测试,我使用了在 以下是EPPlus的代码:

    public static string RunSample12(string sqlServerName, DirectoryInfo outputDir)
    {
        var list = new List<SalesDTO>();
        if (sqlServerName == "")
        {
            list = GetRandomData();
        }
        else
        {
            list = GetDataFromSQL(sqlServerName);
        }

        string file = outputDir.FullName + @"\sample12.xlsx";
        if (File.Exists(file)) File.Delete(file);
        FileInfo newFile = new FileInfo(file);

        using (ExcelPackage pck = new ExcelPackage(newFile))
        {
            // get the handle to the existing worksheet
            var wsData = pck.Workbook.Worksheets.Add("SalesData");

            var dataRange = wsData.Cells["A1"].LoadFromCollection
                (
                from s in list 
                orderby s.LastName, s.FirstName 
                select s, 
               true, OfficeOpenXml.Table.TableStyles.None);                

            wsData.Cells[2, 6, dataRange.End.Row, 6].Style.Numberformat.Format = "mm-dd-yy";
            wsData.Cells[2, 7, dataRange.End.Row, 11].Style.Numberformat.Format = "#,##0";

            dataRange.AutoFitColumns();

            var wsPivot = pck.Workbook.Worksheets.Add("PivotSimple");
            var pivotTable1 = wsPivot.PivotTables.Add(wsPivot.Cells["A1"], dataRange, "PerEmploee");

            pivotTable1.RowFields.Add(pivotTable1.Fields[4]);
            var dataField = pivotTable1.DataFields.Add(pivotTable1.Fields[6]);
            dataField.Format="#,##0";
            pivotTable1.DataOnRows = true;

            var chart = wsPivot.Drawings.AddChart("PivotChart", eChartType.Pie, pivotTable1);
            chart.SetPosition(1, 0, 4, 0);
            chart.SetSize(600, 400);

            var wsPivot2 = pck.Workbook.Worksheets.Add("PivotDateGrp");     
            var pivotTable2 = wsPivot2.PivotTables.Add(wsPivot2.Cells["A3"], dataRange, "PerEmploeeAndQuarter");

            pivotTable2.RowFields.Add(pivotTable2.Fields["Name"]);


            //Add a rowfield
            var rowField = pivotTable2.RowFields.Add(pivotTable2.Fields["OrderDate"]);
            //This is a date field so we want to group by Years and quaters. This will create one additional field for years.
            rowField.AddDateGrouping(eDateGroupBy.Years | eDateGroupBy.Quarters);
            //Get the Quaters field and change the texts
            var quaterField = pivotTable2.Fields.GetDateGroupField(eDateGroupBy.Quarters);
            quaterField.Items[0].Text = "<"; //Values below min date, but we use auto so its not used
            quaterField.Items[1].Text = "Q1";
            quaterField.Items[2].Text = "Q2";
            quaterField.Items[3].Text = "Q3";
            quaterField.Items[4].Text = "Q4";
            quaterField.Items[5].Text = ">"; //Values above max date, but we use auto so its not used

            //Add a pagefield
            var pageField = pivotTable2.PageFields.Add(pivotTable2.Fields["Title"]);

            //Add the data fields and format them
            dataField = pivotTable2.DataFields.Add(pivotTable2.Fields["SubTotal"]);
            dataField.Format = "#,##0";
            dataField = pivotTable2.DataFields.Add(pivotTable2.Fields["Tax"]);
            dataField.Format = "#,##0";
            dataField = pivotTable2.DataFields.Add(pivotTable2.Fields["Freight"]);
            dataField.Format = "#,##0";

            //We want the datafields to appear in columns
            pivotTable2.DataOnRows = false;

            pck.Save();
        }
        return file;
    }
我正在使用“LoadFromCollection”方法加载数据透视表,它接收3个参数,其中最后一个参数是我遇到问题的参数:

public ExcelRangeBase LoadFromCollection<T>(IEnumerable<T> Collection, bool PrintHeaders, TableStyles TableStyle)
因此,我尝试将“OfficeOpenXml.Table.TableStyles.None”和“OfficeOpenXml.Table.TableStyles.Custom”都设置为dataRange变量,但所有数据透视表都没有更改,它们都保持Medium9样式,无论我尝试在表样式上设置什么样式

当我设置其他表样式时,普通表的样式发生了变化


是否有人知道是否无法使用ePlus更改数据透视表的样式,并且默认为Medium9主题?如果可能的话,我做错了什么

错误之处在于,更改LoadFromCollection中的TableStyles参数不应更改任何透视表,而应更改表示集合的普通表

您可以看到LoadFromCollection的输出是一个普通的表,而不是pivot

要更改第一个透视表的样式,只需执行以下操作:

 pivotTable1.TableStyle = TableStyles.Dark2;
在这里,您可以将深色2更改为您想要的任何可用样式