我正在尝试使用 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
Run Code Online (Sandbox Code Playgroud)
我想按州创建一个大纲,然后按产品创建每个组的小计
我试过
ws.Outline.SummaryVLocation = XLOutlineSummaryVLocation.Top;
ws.Rows(1, 3).Group(); // Create an outline (level 2) for rows 1-4
ws.Rows(4, 6).Group();
Run Code Online (Sandbox Code Playgroud)
但它没有给我我想要的东西,而且我没有看到添加小计的选项。
我怎样才能实现这个目标?
您使用的文档中的代码示例要么已过时,要么就是错误的。
如果您想对第 2 行到第 4 行进行分组,则需要使用代码ws.Rows(3, 4).Group();(见图)。这与 Excel 本身一致,在单击分组按钮之前您必须仅选择第 3 行和第 4 行才能获得相同的结果。

当您尝试像代码中那样对第 1 行到第 3 行进行分组时,您将它们全部分组到第 0 行下,这会导致错误,因为没有第 0 行。您可以使用该属性在某种程度上控制此行为XLOutlineSummaryVLocation。如果您使用Bottom而不是 top,则使用顶部两行对第 2 行到第 4 行进行分组:ws.Rows(2, 3).Group();
综上所述,还有两点:
使用此代码应该会产生您想要的结果(见下图):
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)
Run Code Online (Sandbox Code Playgroud)

| 归档时间: |
|
| 查看次数: |
6649 次 |
| 最近记录: |