我正在尝试使用OpenXML在导出的中创建一个组。
我的源数据表如下所示:
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();但这并没有给我想要的东西,我也看不出有什么办法把小计相加。
我怎样才能做到这一点?
发布于 2014-09-11 09:20:30
您使用的文档中的代码示例要么已经过时,要么就是错了。
如果要对第2行至第4行进行分组,则需要使用代码ws.Rows(3, 4).Group(); (见图)。这与Excel本身是一致的,在单击group按钮之前,您必须只选择第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)

https://stackoverflow.com/questions/25756741
复制相似问题