gpt4 book ai didi

封闭式XML大纲

转载 作者:行者123 更新时间:2023-12-02 21:24:08 27 4
gpt4 key购买 nike

我正在尝试使用 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();

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

我怎样才能实现这个目标?

最佳答案

您使用的文档中的代码示例要么已过时,要么就是错误的。
如果要将第 2 至 4 行分组,则需要使用代码 ws.Rows(3, 4).Group(); (参见图片)。这与 Excel 本身一致,在单击分组按钮之前您必须仅选择第 3 行和第 4 行才能获得相同的结果。

enter image description here

当您尝试像代码中那样对第 1 行到第 3 行进行分组时,您将它们全部分组到第 0 行下,这会导致错误,因为没有第 0 行。您可以使用 XLOutlineSummaryVLocation 属性在一定程度上控制此行为。如果您使用 Bottom 而不是 top,则可以使用顶部两行对第 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)

enter image description here

关于封闭式XML大纲,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25756741/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com