您使用的文档中的代码示例已经过时或错误。
如果要将第 2 行到第 4 行分组,则需要使用代码ws.Rows(3, 4).Group();
(见图)。这与 Excel 本身是一致的,您必须在单击组按钮之前仅选择第 3 行和第 4 行以获得相同的结果。
当您尝试像在代码中那样将第 1 行到第 3 行分组时,会将它们全部分组在第 0 行下,这会导致错误,因为没有第 0 行。您可以使用该XLOutlineSummaryVLocation
属性在某种程度上控制此行为。如果您使用Bottom
而不是顶部,则使用前两行对第 2 到 4 行进行分组:ws.Rows(2, 3).Group();
综上所述,还有两点:
- 您需要使用 Excel 行号而不是“行”列中的数字。
- 所有这些分组和折叠仅用于显示目的。要总结销售数字,您必须使用 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)