【问题标题】:EPPlus: Values in column of pivot tableEPPlus:数据透视表列中的值
【发布时间】:2018-06-07 10:55:19
【问题描述】:

当您在 Excel 中创建数据透视表并向行和值添加字段时,您会在 GUI 中获得一个额外的字段 [Symbol Sigma] Values,您可以将其拖放到列中。

我正在使用EPPlus 创建一个pivot table。如何将此[Symbol Sigma] Values 字段添加到我的列字段?

编辑:这是一些代码。我不明白这应该如何帮助,它被要求什么。

private static ExcelWorksheet CreatePivotWorksheet(ExcelPackage excel, ExcelWorksheet dataWorksheet)
{
    string worksheetName = "Pivot";

    ExcelWorksheet pivotWorksheet = excel.Workbook.Worksheets.Add(worksheetName);

    ExcelRangeBase dataRange = dataWorksheet.Cells[dataWorksheet.Dimension.Address];
    ExcelPivotTable pivotTable = pivotWorksheet.PivotTables.Add(pivotWorksheet.Cells[1,1], dataRange, "pivotTable");

    pivotTable.RowGrandTotals = false;

    pivotTable.RowFields.Add(pivotTable.Fields["BaseValue"]);
    pivotTable.RowFields.Add(pivotTable.Fields["Remaining Runtime"])
        .AddNumericGrouping(0, 500000, 30);
    pivotTable.RowFields.Add(pivotTable.Fields["Emittent"]);
    pivotTable.RowFields.Add(pivotTable.Fields["CountIfs"]);
    pivotTable.RowFields.Add(pivotTable.Fields["ISIN"]);

    var stressField = pivotTable.DataFields.Add(pivotTable.Fields["StressScenario - Percent"]);
    stressField.Function = DataFieldFunctions.Average;
    stressField.Format = "0.00%";
    var pessimisticField = pivotTable.DataFields.Add(pivotTable.Fields["PessimisticScenario - Percent"]);
    pessimisticField.Function = DataFieldFunctions.Average;
    pessimisticField.Format = "0.00%";
    var mediumField = pivotTable.DataFields.Add(pivotTable.Fields["MediumScenario - Percent"]);
    mediumField.Function = DataFieldFunctions.Average;
    mediumField.Format = "0.00%";
    var optimisticField = pivotTable.DataFields.Add(pivotTable.Fields["optimisticScenario - Percent"]);
    optimisticField.Function = DataFieldFunctions.Average;
    optimisticField.Format = "0.00%";

    // remove subtotals, this has to be done _after_ adding the field (see https://stackoverflow.com/a/34768357/5909613)
    foreach (ExcelPivotTableField rowField in pivotTable.RowFields)
    {
        rowField.SubTotalFunctions = eSubTotalFunctions.None;
    }
    return pivotWorksheet;
}

【问题讨论】:

  • 这是 Sum/Total 的符号。无论如何,符号都无关紧要,值仅在数据透视表的单元格中显示为聚合。 GUI 只是根据值类型选择适当的默认值,例如数字的总和、文本的计数等。您必须在代码中明确指定这一点
  • 顺便说一句,代码在哪里?
  • @PanagiotisKanavos 我添加了代码,但这对我的问题没有帮助。
  • GUI 中没有 Σ 列或字段。这只是数据透视表中的 values 区域。它使用Σ,因为这是求和的数学符号。您在那里设置的字段是通过 API 中的 DataFields 集合设置的。
  • 这不是一个常规字段。检查this explanation。在这种简单的情况下,它并不重要。如果您添加了更多列字段 - 它控制总计是否显示在每个列组内,反之亦然。这意味着重要的问题是如何改变它的顺序。

标签: c# epplus epplus-4


【解决方案1】:

尝试设置pivotTable.DataOnRows = false 以获得这样的数据透视表行为

【讨论】:

    【解决方案2】:

    尝试将值行更改为列。这里 3 是 Values 字段索引。

      PivotField row = (PivotField)oPivotTable.RowFields[3];
      row.Orientation = XlPivotFieldOrientation.xlColumnField;
    

    【讨论】:

    • 我无法证明将其标记为已接受,因为我无法验证它,因为我不再拥有代码。如果其他人评论说这有效,我会接受。感谢您抽出宝贵时间回答老问题。
    • @JeromeReinländer 实际上我遇到了同样的问题,昨天使用上面的代码解决了这个问题。这就是我在这里发布代码的原因.. 干杯!
    【解决方案3】:

    我已经为您的情况找到了解决方案。 您应该在代码中为数据字段添加几个字符串。 数据域“stressField”示例:

        stressField.Field.Outline = true;
        stressField.Field.ShowInFieldList=true;
    

    以及其他:

        pessimisticField.Field.Outline = true;
        pessimisticField.Field.ShowInFieldList=true;
    
        mediumField.Field.Outline = true;
        mediumField.Field.ShowInFieldList=true;
    
        optimisticField.Field.Outline = true;
        optimisticField.Field.ShowInFieldList=true;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-05
      • 2013-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-15
      • 1970-01-01
      • 2020-04-09
      相关资源
      最近更新 更多