使用 ClosedXML 创建数据透视表

2024-05-20

我正在尝试使用 ClosedXML V0.91.1 创建数据透视表,但我不断遇到问题,因为我的 Excel 文件包含不可读的内容,然后 Excel 工作簿在单击时删除了我的数据透视表Yes below.

下面是我击中时的显示Yes。它正在删除我的数据透视表。

我的数据透视表正在从根据 TFS 历史记录创建的表中获取数据变更集 https://learn.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2013/bb170151(v=vs.120)。变更集被设置为IEnumerable<Changeset>然后将其转换为DataTable包含列标题的对象。

然后从创建一个表DataTable这是的来源PivotTable。这是我正在使用的代码:

public bool CreateReport(IEnumerable<Changeset> changesets)
{
    workbook = new XLWorkbook();
    var sumSheet= workbook.Worksheets.Add("Summary");
    // Converting IEnumerable<Changeset> into DataTable
    DataTable changesetTable = ConvertToDataTable(changesets);
    // Table
    var sumTable = sumSheet.Cell(1, 1).InsertTable(changesetTable.AsEnumerable(), "SummaryTable", true);
    // Table - Formatting table
    tableWithData.Column("A").Cells(firstRow, lastRow).DataType = XLDataType.Number;
    tableWithData.Column("C").Cells(firstRow, lastRow).DataType = XLDataType.DateTime;
    tableWithData.Column("C").Cells(firstRow, lastRow).Style.DateFormat.Format = "d-MMM-yyy";

    sumSheet.Columns().AdjustToContents();

    // Pivot Table
    var header = sumTable.Range(1, 1, 1, 6); // A1 to F1
    var range = sumTable.DataRange;
    var dataRange = sumSheet.Range(header.FirstCell(), range.LastCell());

    var pivotSheet = workbook.Worksheets.Add("History Report");

    var pivotTable = pivotSheet.PivotTables.AddNew("PivotTable", pivotSheet.Cell(1, 1), dataRange);

    // Pivot Table - Formatting table
    pivotTable.ShowPropertiesInTooltips = false;
    pivotTable.RepeatRowLabels = false;
    pivotTable.ShowGrandTotalsColumns = false;
    pivotTable.ShowGrandTotalsRows = false;
    pivotTable.ShowEmptyItemsOnRows = true;
    pivotTable.ShowEmptyItemsOnColumns = true;
    pivotTable.ShowExpandCollapseButtons = false;
    pivotTable.Layout = XLPivotLayout.Tabular;

    pivotTable.RowLabels.Add("Changeset");
    pivotTable.RowLabels.Add("Committer");
    pivotTable.RowLabels.Add("Date");
    pivotTable.RowLabels.Add("Comment");
    pivotTable.RowLabels.Add("File Changes");
    pivotTable.RowLabels.Add("Source");

    // Go off and save the workbook.
    bool saved = SaveFile();
    return saved;
}

我相信问题在于我如何选择dataRange了解数据透视表的来源。

    var header = sumTable.Range(1, 1, 1, 6); // A1 to F1
    var range = sumTable.DataRange;
    var dataRange = sumSheet.Range(header.FirstCell(), range.LastCell());

我跟着example https://github.com/ClosedXML/ClosedXML/wiki/Pivot-Table-example在他们的维基上找到,但它在我的实现中给出了这些错误。我的问题和示例之间的唯一区别是,我从以下位置获取数据透视表的来源:DataTable,我只是将值插入到RowLabels在我的数据透视表中。

如果有帮助,这就是我转换的方式IEnumerable<Changeset> to a DataTable

private DataTable ConvertToDataTable(IEnumerable<Changeset> changesets)
{
    DataTable table = new DataTable();
    table.Columns.Add("Changeset", typeof(int));
    table.Columns.Add("Committer", typeof(string));
    table.Columns.Add("Date", typeof(DateTime));
    table.Columns.Add("Comment", typeof(string));
    table.Columns.Add("File Changes", typeof(string));
    table.Columns.Add("Source", typeof(string));

    foreach(Changeset changeset in changesets) // Loop over all changesets
    {
        int changesetID = changeset.ChangesetId;
        string committer = changeset.CommitterDisplayName;
        DateTime creationDate = changeset.CreationDate;
        string comment = changeset.Comment;
        foreach(Change change in changeset.Changes) // Loop over all Changes in changeset
        {
            string filename = change.Item.ServerItem.Substring(change.Item.ServerItem.LastIndexOf("/") + 1);
            table.Rows.Add(changesetID, committer, creationDate, comment, filename, change.Item.ServerItem);
        }
    }
    return table;
}

如果我没记错的话,ClosedXML 中的数据透视表应该至少有一个值字段。

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

使用 ClosedXML 创建数据透视表 的相关文章

随机推荐

  • 正则表达式上的换行符

    我试图替换两个标签之间的所有内容 但我无法构建正确的表达式 这就是我所做的
  • 使用 mage.exe 为 *.deploy 文件创建 ClickOnce 部署清单

    当应用程序文件具有 deploy 扩展名时 如何使用 mage exe 创建 ClickOnce 部署清单 有些人放弃并使用 MSBuild exe 和GenerateDeploymentManifest 任务 如果想直接使用mage ex
  • C# Checkedlistbox 如果选中

    是否可以像复选框一样将 Checked 应用于选中列表框 如果以复选框的方式执行此操作 则不起作用 if checkedListBox1 Items 2 Checked true 你需要的是方法GetItemCheckState 用法如下
  • asp.net mvc html 属性没有值

    我正在尝试根据 HTML5 规范创建一个隐藏表单 其中隐藏属性在没有值的情况下使用 现在我不知道如何将其强制到 asp net mvc 中 上面的方法不能编译 Compiler Error Message CS0103 The name h
  • Android,如何将元数据设置为MP4文件?

    我想将元数据设置为 MP4 文件 我通过以下方式创建 MP4 文件 new MediaMuxer mPath MediaMuxer OutputFormat MUXER OUTPUT MPEG 4 并且文件有元 Title unknown
  • R:如何将字符/数字转为1,NA转为0?

    有没有一种简单的方法可以将列的字符 数字变为 1 将 NA 变为 0 这里有一些示例数据 我想将其应用于 3 4 structure list Item Code c 176L 187L 191L 201L 217L 220L Item x
  • 用户控制事件处理程序在回发时丢失

    我有一个名为 LeftMenu 的菜单用户控件 它有一个链接项的项目符号列表 它在 ascx 页面上是这样的
  • 如何设置 CSS 网格的最大高度

    我有以下 CSS 网格 grid 3x4 display grid grid template columns 1fr 1fr 1fr grid template rows 1fr 1fr 1fr 1fr grid template are
  • 您是否见过 Log4j 中基于 NDC 记录到单独文件的附加程序? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我们只有极少数客户 少于 50 个 我们希望每个客户都有自己单独的日志文件 所有服务器端日志记录信息都存
  • Log4net不会将日志写入日志文件

    我使用 Log4net 创建了一个简单的场景 但我的日志附加程序似乎不起作用 因为消息没有添加到日志文件中 我将以下内容添加到 web config 文件中
  • 使用openssl解密用java加密的aes-gcm

    我有以下 Java 代码 public static void deriveKeyAndIV String password throws Exception SecureRandom random new SecureRandom if
  • 使用 C# 将事件导出为 iCalendar 和 vCalendar 格式

    我正在开发一个项目 我们将支持将事件导出到 Outlook 2007 Outlook 2010 和 iCal 的功能 我做了一些研究 发现 iCal 支持 iCal 程序 和 vCal 支持 Outlook 基本上是同一件事 据我所知 看起
  • LocationManager 与 FusedLocationProvider

    目前我们使用 LocationManager 每隔几秒获取一次 GPS 更新 我们用它来进行高精度更新 此外 我们还希望每 5 分钟获取一次位置坐标 无论 GPS 状态如何 打开 关闭 在这种情况下我们确实忽略了位置的准确性 我们希望使用
  • C++ 中的随机数生成...第一个数字不是很随机

    我试图在 C 中获得 0 到 1 之间的统一随机数 而不使用 boost 我不想依赖图书馆 每当我开始我的计划时 我都会种子 srand 时间 NULL 然后我打印 8 个随机数 我用空行分隔程序的不同运行 Random number 0
  • 在 Node.js 中,setTimeout() 会阻止事件循环吗?

    如果我有一个简单的 setTimeout 函数 并将其设置为 10 秒 整个服务器在那10秒内就死机了 这是真的 这就是我听到的 答案是no 你的链接是什么Node js 如何重新创建 setTimeout 函数而不阻塞事件循环 https
  • 暂存内部文件 csv.gz 给出文件与相应表的大小不匹配的错误?

    我正在尝试将 csv gz 文件复制到我创建的表中 以开始分析地图的位置数据 我遇到了一个错误 提示字符太多 我应该添加一个 on error 选项 不过 我不确定这是否有助于加载数据 你能看一下吗 数据源 https data world
  • 打印 2D ArrayList 矩阵的值

    我有一个 2D Arraylist 矩阵 例如 ArrayList table new ArrayList 10 10 table 0 0 new ArrayList table 0 1 add 10 table 1 0 add 20 ta
  • 启动过程中的写入进度 - 等待

    我正在尝试创建安装脚本并在安装过程中显示进度条 localfolder Get Location path start process FilePath localfolder Installer exe ArgumentList sile
  • 如何计算排列? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个关于 Java 排列的问题 Suppose I have five different elements in an arra
  • 使用 ClosedXML 创建数据透视表

    我正在尝试使用 ClosedXML V0 91 1 创建数据透视表 但我不断遇到问题 因为我的 Excel 文件包含不可读的内容 然后 Excel 工作簿在单击时删除了我的数据透视表Yes below 下面是我击中时的显示Yes 它正在删除