EPPlus 数据透视表/图表

2024-01-04

我已经使用 EPPlus for .net 一段时间了,但仅用于简单的数据操作。 有没有关于如何使用它来创建数据透视表/图表的示例? 它似乎支持它,因为我可以在智能感知中看到数据透视表,但只是不确定语法。

我只能在提供的示例中找到饼图/条形图之类的内容。


我从蒂姆的答案中得出了类似的解决方案。首先,我定义了一个简单的接口,将其用作导出方法的一部分:

public interface IPivotTableCreator
{
    void CreatePivotTable(
        OfficeOpenXml.ExcelPackage pkg, // reference to the destination book
        string tableName,               // "tab" name used to generate names for related items
        string pivotRangeName);         // Named range in the Workbook refers to data
}

然后我实现了一个简单的类,它保存变量值和完成工作的过程代码:

public class SimplePivotTable : IPivotTableCreator
{
    List<string> _GroupByColumns;
    List<string> _SummaryColumns;
    /// <summary>
    /// Constructor
    /// </summary>
    public SimplePivotTable(string[] groupByColumns, string[] summaryColumns)
    {
        _GroupByColumns = new List<string>(groupByColumns);
        _SummaryColumns = new List<string>(summaryColumns);
    }

    /// <summary>
    /// Call-back handler that builds simple PivatTable in Excel
    /// http://stackoverflow.com/questions/11650080/epplus-pivot-tables-charts
    /// </summary>
    public void CreatePivotTable(OfficeOpenXml.ExcelPackage pkg, string tableName, string pivotRangeName)
    {
        string pageName = "Pivot-" + tableName.Replace(" ", "");
        var wsPivot = pkg.Workbook.Worksheets.Add(pageName);
        pkg.Workbook.Worksheets.MoveBefore(PageName, tableName);

        var dataRange = pkg.Workbook./*Worksheets[tableName].*/Names[pivotRangeName];
        var pivotTable = wsPivot.PivotTables.Add(wsPivot.Cells["C3"], dataRange, "Pivot_" + tableName.Replace(" ", ""));
        pivotTable.ShowHeaders = true;
        pivotTable.UseAutoFormatting = true;
        pivotTable.ApplyWidthHeightFormats = true;
        pivotTable.ShowDrill = true;
        pivotTable.FirstHeaderRow = 1;  // first row has headers
        pivotTable.FirstDataCol = 1;    // first col of data
        pivotTable.FirstDataRow = 2;    // first row of data

        foreach (string row in _GroupByColumns)
        {
            var field = pivotTable.Fields[row];
            pivotTable.RowFields.Add(field);
            field.Sort = eSortType.Ascending;
        }

        foreach (string column in _SummaryColumns)
        {
            var field = pivotTable.Fields[column];
            ExcelPivotTableDataField result = pivotTable.DataFields.Add(field);
        }

        pivotTable.DataOnRows = false;
    }
}

然后我创建一个我的实例SimplePivotTable创作者类别:

IPivotTableCreator ptCreator = new SimplePivotTable(
    new string[] { "OrganizationTitle", "GroupingTitle", "DetailTitle" }, /* collapsible rows */
    new string[] { "Baseline", "Increase", "Decrease", "NetChange", "CurrentCount"}); /* summary columns */

我有第三个类,它当前公开了大约六种不同的方法来获取一个或多个数据集(通常是 List 对象),并将每个数据集转换为具有指定数据范围的数据工作表。现在,我正在调整这些导出方法,以便为任何/所有这些导出方法生成数据透视表。他们都做了这样的事情:

OfficeOpenXml.ExcelPackage pkg = new ExcelPackage();
ExportCollectionToExcel(pkg, tableName, dataset);   // Create worksheet filled with data
                                                    // Creates a NamedRange of data
ptCreator.CreatePivotTable(pkg, tableName, GetPivotRangeName(tableName));

通过使用界面,我留下了更多机会(我认为)来生成多个工作表的不同数据透视表。我的基本SimplePivotTable类仅用于具有一些特定假设的单个表,但将配置数据放入以表名称为键的字典中并不困难。

希望对某人有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

EPPlus 数据透视表/图表 的相关文章

随机推荐

  • Angular 7+:将静态 html 文件注入组件视图中间

    我无法找到将文件中的静态 html 注入视图中间的最佳方法 我有一个名为 eula dialog 的组件 其中该组件尚未执行任何操作 但视图如下所示 eula dialog component html h1 Sign EULA h1
  • 持续集成、持续交付、持续部署

    这三个术语有什么区别 我的大学提供了以下定义 持续集成基本上只是意味着开发人员的工作副本每天与共享主线同步多次 持续交付被描述为持续集成的逻辑演变 始终能够将产品投入生产 持续部署被描述为持续交付后合乎逻辑的下一步 只要产品通过 QA 就自
  • 计算任意大整数的整数平方根 (isqrt) 的有效算法

    Notice 对于解决方案Erlang or C C go to Trial 4 below 维基百科文章 整数平方根 http en wikipedia org wiki Integer square root 整数平方根 的定义可以在这
  • 请求的 JSON 解析失败

    由于某种原因 下面的 ajax 代码存在解析错误 我怎样才能找出它是什么 和 或有人能看到出了什么问题吗 listElements sortable revert true update function event ui var orde
  • 我是否必须切换到 https 才能在 Chrome 92 中使用“SharedArrayBuffer”?

    我的网站不适用于 Chrome 92 使用 Chrome 91 一切都很好 问题是SharedArrayBuffer自 Chrome 92 起未启用 当我尝试通过添加标题 Cross Origin Embedder Policy requr
  • 从命令行创建新的 Visual Studio 解决方案

    有没有办法使用 devenv 从我制作的多项目模板创建新的 Visual Studio 解决方案 有很多关于使用命令行构建的资源 但我似乎找不到任何关于创建新解决方案的信息 我希望能够从我制作的代码生成器的模板中打开一个新的解决方案 以便我
  • 无法通过 USB 将计算机时间同步到 Arduino

    我想将时间从我的电脑同步到arduino 我正在使用他们的时间库 但它不起作用 如何让arduino与我的电脑上的时间相同 我目前使用的是Mac 他们的文件说 在unix系统上 可以使用shell命令设置时间 TZ adjust 8 ech
  • Ruby:转换数组中的对象后传递键/值

    给定数据 data id 14 sort 1 content 9 foo 2022 id 14 sort 4 content 5 foo 2022 id 14 sort 2 content 1 foo 2022 id 14 sort 3 c
  • 在 Google 地图中标记街道

    我想在 Google 地图上创建一个叠加层 以不同的颜色显示不同的街道 在 Google 地图 API 中 可以创建覆盖某些区域的标记和多边形 有没有办法以某种方式标记不同的街道 在我看来 您有兴趣为您的 Google 地图显示 而不是交通
  • 在Eclipse中调试时,在返回之前可以查出返回值吗?

    是否可以在该行运行之后 指令指针返回到调用函数之前查看方法的返回值 我正在调试无法修改的代码 阅读 不想重新编译第三方库 有时它会跳转到我没有源代码的代码 或者返回表达式有副作用 使我无法在Display tab 返回值通常用在复合语句中
  • Apache Commons 电子邮件和 UTF-8

    如何将 Apache Commons Email 生成的电子邮件的编码更改为 UTF 8 我想发送根据收件人的语言生成的电子邮件 并且我需要考虑日语和俄语 问题是 Email 类没有提出我可以传递给的 UTF 8 常量Email setCh
  • Android:使用 OMXCodec 作为 MediaSource 时 MPEG4Writer 无法启动

    我正在尝试从字节数组缓冲区对视频进行编码 为此我正在使用MPEG4Writer来自本机代码的 API 我已经创建了我的自定义MediaSource提供数据的类 我用它包装它OMXCodec给它MPEG4Writer sp
  • 如何使用视图绑定从单选组中获取选中的 id 文本?

    我曾经经历过this https stackoverflow com questions 18179124 android getting value from selected radiobutton并找到了一个共同的答案 即 int s
  • 如何修复“CURLFile”函数未找到错误?

    我正在尝试实现 marketo 创建文件休息 API 但由于我的 php 版本 我收到 找不到类 CURLFile 错误 因此 请帮助我如何在较低的 php 中使用 CURLFile 功能 或者它们是相同功能的任何其他等效项 请检查我的以下
  • 在 NSXmlParser 中处理自关闭标签?

    我们如何处理 NSXmlparser 中的自关闭标签 没有 起始元素和结束元素 是否可以处理以下类型的标签
  • 如果数据库大小大于 2 GB,SQLite 性能是否会下降?

    去年 当我在他们的网站上查看 SQLite 时 建议的 SQLite 数据库大小是 2 GB 但现在 我再也找不到那个推荐了 那么有人尝试过使用最新版本的大于 2 GB 的 SQLite 数据库吗 SQLite 的表现如何 P S 我想制作
  • 如何将 Microsoft Expression Web 文档类型更改为 HTML 5

    我正在使用 Microsoft Expression Web 并且遇到以下问题 当我创建新的HTML文件 我得到这个 我怎样才能改变XHTML 1 0 to HTML 5 如果您只想在新创建的文件中将文档类型从 XHTML 1 0 更改为
  • IIS 6 将 html 执行为 aspx

    您好 有没有办法配置 IIS6 来执行 html 扩展名 就好像它们是 aspx 一样 好的 在 IIS6 中 您可以打开网站属性并转到 主目录 选项卡 其中有一个名为 应用程序设置 的部分 在此部分下 点击 配置 按钮 您可以在此处调整不
  • 使用 Silverlight 时防止 ASP.NET 会话超时

    我正在编写一个程序 它同时具有 ASP NET 配置系统和 Silverlight 应用程序 大多数用户将停留在 Silverlight 页面上 除了登录等之外不会访问 ASP NET 站点 问题是 我需要会话保持活动状态以进行身份 验证
  • EPPlus 数据透视表/图表

    我已经使用 EPPlus for net 一段时间了 但仅用于简单的数据操作 有没有关于如何使用它来创建数据透视表 图表的示例 它似乎支持它 因为我可以在智能感知中看到数据透视表 但只是不确定语法 我只能在提供的示例中找到饼图 条形图之类的