c# - EPPlus 从数据透视表创建图表

标签 c# .net excel pivot-table epplus

我在 .Net 中使用 EPPlus 并创建了一个带有行字段和一个汇总数据字段的数据透视表。

有谁知道如何从数据透视表创建图表?而且我不知道数据透视表的范围。

这是我的代码:

    static void DT2XL(DataTable dt, ExcelPackage excel)
    {
        var wsData = excel.Workbook.Worksheets["Eco-Data"];
        var wsPivot = excel.Workbook.Worksheets["Eco-Pivot"];

        if (wsData == null) wsData = excel.Workbook.Worksheets.Add("Eco-Data");
        if (wsPivot == null) wsPivot = excel.Workbook.Worksheets.Add("Eco-Pivot");

        wsData.Cells["A1"].LoadFromDataTable(dt, true, OfficeOpenXml.Table.TableStyles.Medium6);

        foreach (DataColumn col in dt.Columns)
        {
            if (col.DataType == typeof(System.DateTime))
            {
                var colNumber = col.Ordinal + 1;
                var range = wsData.Cells[2, colNumber, dt.Rows.Count + 1, colNumber];
                range.Style.Numberformat.Format = "dd.MM.yyyy";
            }
        }

        var dataRange = wsData.Cells[wsData.Dimension.Address.ToString()];
        dataRange.AutoFitColumns();
        var pivotTable = wsPivot.PivotTables.Add(wsPivot.Cells["A1"], dataRange, "EcoPivotTable");
        pivotTable.MultipleFieldFilters = true;
        pivotTable.RowGrandTotals = true;
        pivotTable.ColumGrandTotals = true;
        pivotTable.Compact = true;
        pivotTable.CompactData = true;
        pivotTable.GridDropZones = false;
        pivotTable.Outline = false;
        pivotTable.OutlineData = false;
        pivotTable.ShowError = true;
        pivotTable.ErrorCaption = "[error]";
        pivotTable.ShowHeaders = true;
        pivotTable.UseAutoFormatting = true;
        pivotTable.ApplyWidthHeightFormats = true;
        pivotTable.ShowDrill = true;
        pivotTable.FirstDataCol = 3;
        pivotTable.RowHeaderCaption = "Үзүүлэлтүүд";
        pivotTable.GrandTotalCaption = "Нийт";

        foreach (DataColumn c in dt.Columns)
        {
            var field = pivotTable.Fields[c.ColumnName];
            if (c.ColumnName.ToLower().StartsWith("column") ||
                c.ColumnName.ToLower().StartsWith("row"))
                pivotTable.RowFields.Add(field);
            else if (c.ColumnName.ToLower().StartsWith("data"))
                pivotTable.DataFields.Add(field);
        }

        //I want to create a chart from 'pivotTable'
        //...
        //...
        //...
        //...
        //...
    }

谢谢!

最佳答案

下面是创建数据透视图的代码:

    var reportFilterNames = new List<string>(); //TODO: Fill with column names from DataTable
    var valueNames = new List<string>(); //TODO: Fill with column names from DataTable

    ExcelWorksheet dataWorksheet = package.Workbook.Worksheets[report.ReportType];
    ExcelRange dataRange = dataWorksheet.Cells["A1:" + dataWorksheet.Dimension.End.Address];

    ExcelWorksheet pivotWorksheet = package.Workbook.Worksheets.Add(dt.TableName);
    ExcelRange pivotDataRange = pivotWorksheet.Cells["A" + (2 + reportFilterNames.Count)];
    ExcelPivotTable pivotTable = pivotWorksheet.PivotTables.Add(pivotDataRange, dataRange, "Stats");
    pivotTable.DataOnRows = false;

    pivotTable.RowFields.Add(pivotTable.Fields["DATE"]);

    foreach (string reportFilterName in reportFilterNames)
        pivotTable.PageFields.Add(pivotTable.Fields[reportFilterName]);

    foreach (string valueName in valueNames)
        pivotTable.DataFields.Add(pivotTable.Fields[valueName]);

    var chart = pivotWorksheet.Drawings.AddChart("PivotChart", eChartType.Line, pivotTable);
    chart.SetPosition(1, 0, 4, 0);
    chart.SetSize(1200, 800);

关于c# - EPPlus 从数据透视表创建图表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20766908/

相关文章:

c# - 什么是多态?

c# - 安装 .NET SDK 5.0 后,我还应该安装 .NET Core 吗?

oracle - 由于系统错误 193 : (Oracle in instant client_11_2, C :\. ..\SQORA32.dll),无法加载 VBA ODBC Oracle 指定的驱动程序

c# - ProtectedData.Protect 间歇性故障

.net - 在 .NET 中使用线程本地存储的最佳实践是什么?

python - 如何将大量数据写入 xls 文件?

excel - 我可以仅将自动填充限制为单元格内容吗?

c# - Mac 上的 Visual Studio Community 2017 : How to view same file in two columns?

c# - 如何检查一个节点有多少个 child ?

c# - DateTime.FromOADate 返回与 Excel 中的日期不同的日期