【问题标题】:ClosedXML OutlineClosedXML 大纲
【发布时间】:2014-09-10 03:10:54
【问题描述】:

我正在尝试使用 OpenXML 在导出的 Excel 工作簿中创建一个组。

我的源数据表如下所示:

Row     State   Product Sales
1       NY      A       100
2       NY      A       200
3       NY      B       300
4       CA      A       100
5       CA      A       200
6       CA      B       300

我想按州创建大纲,然后按产品创建每个组的小计

我试过了

 ws.Outline.SummaryVLocation = XLOutlineSummaryVLocation.Top;
 ws.Rows(1, 3).Group(); // Create an outline (level 2) for rows 1-4
 ws.Rows(4, 6).Group();

但它没有给我我想要的东西,而且我没有看到添加小计的选项。

我怎样才能做到这一点?

【问题讨论】:

    标签: closedxml


    【解决方案1】:

    您使用的文档中的代码示例已经过时或错误。
    如果要将第 2 到 4 行分组,则需要使用代码 ws.Rows(3, 4).Group();(见图)。这与 Excel 本身是一致的,在单击组按钮之前,您只需选择第 3 行和第 4 行即可获得相同的结果。

    当您尝试像在代码中那样对第 1 到 3 行进行分组时,会将它们全部分组在第 0 行下,这会导致错误,因为没有第 0 行。 您可以使用XLOutlineSummaryVLocation 属性在一定程度上控制此行为。如果您使用Bottom 而不是顶部,则使用前两行将第 2 行到第 4 行分组:ws.Rows(2, 3).Group();

    说了这么多还有两点:

    1. 您需要使用 Excel 行号,而不是“行”列中的数字。
    2. 所有这些分组和折叠仅用于显示目的。要汇总销售数字,您必须使用 Excel 中的小计函数(我觉得在这种情况下相当混乱且无用)或直接在 C# 中添加列和结果。

    使用此代码应该会产生您想要的结果(见下图):

    ws.Outline.SummaryVLocation = XLOutlineSummaryVLocation.Top;
    ws.Cell(1, 5).SetValue("Product subtotals");
    ws.Cell(1, 6).SetValue("State subtotals");
    
    ws.Rows(3, 4).Group();                      // group rows 2 to 4 (state NY), outline level 1
    ws.Cell(2, 6).SetFormulaA1("=SUM(D2:D4)");  // subtotal for all NY sales
    ws.Row(3).Group();                          // group rows 2 and 3 (product A), outline level 2
    ws.Cell(2, 5).SetFormulaA1("=SUM(D2:D3)");  // subtotal for all NY, product A sales
    ws.Cell(4, 5).SetFormulaA1("=SUM(D4)");     // subtotal for all NY, product B sales
    
    ws.Rows(6, 7).Group();                      // group rows 5 to 7 (state CA), outline level 1
    ws.Row(6).Group();                          // group rows 5 and 6 (product A), outline level 2
    ws.CollapseRows(2);                         // collapse group level 2 (products)
    

    【讨论】:

      猜你喜欢
      • 2016-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多