1

我已经能够创建一个与原始/源数据分开的数据透视表,但现在我想将两者结合起来,数据透视表允许通过在列标题行上提供过滤器来过滤电子表格数据,如下所示:

在此处输入图像描述

我试过这段代码:

private void AddPivotTable()
{
    // The commented-out code below placess the PivotTable below the actual data, separate from it:
    //string colAlphaRowNum = string.Format("A{0}", locationWorksheet.Dimension.End.Row+5);
    // Here I am attempting to incorporate the PivotTable within the data itself (one row above it, actually)
    string colAlphaRowNum = "A5";
    ExcelAddressBase eab = locationWorksheet.Cells[colAlphaRowNum];
    ExcelRangeBase erb = locationWorksheet.Cells[6, 1, locationWorksheet.Dimension.End.Row, locationWorksheet.Dimension.End.Column];
    var pt = locationWorksheet.PivotTables.Add(eab, erb, "Pivotous");

    pt.RowFields.Add(pt.Fields[0]);
    pt.RowFields.Add(pt.Fields[1]);
    pt.RowFields.Add(pt.Fields[2]);
    pt.RowFields.Add(pt.Fields[3]);
    pt.RowFields.Add(pt.Fields[4]);
    pt.RowFields.Add(pt.Fields[5]);
    pt.MultipleFieldFilters = true;
    pt.RowGrandTotals = true;
    pt.ColumGrandTotals = true;
    pt.Compact = true;
    pt.CompactData = true;
    pt.GridDropZones = false;
    pt.Outline = false;
    pt.OutlineData = false;
    pt.ShowError = true;
    pt.ErrorCaption = "[error]";
    pt.ShowHeaders = true;
    pt.UseAutoFormatting = true;
    pt.ApplyWidthHeightFormats = true;
    pt.ShowDrill = true;
    pt.DataOnRows = false;

    pt.FirstHeaderRow = 1;  // first row has headers
    pt.FirstDataCol = 1;    // first col of data
    pt.FirstDataRow = 2;    // first row of data

    pt.TableStyle = TableStyles.Medium6; // There is a "custom" and several Dark, Light, and Medium options
}

...但这不起作用。打开生成的工作表时出现此对话框:

在此处输入图像描述

如果我选择“是”,这就是我所看到的:

在此处输入图像描述

如果我选择“否”,我会看到:

在此处输入图像描述

...这是有希望的,但是如果我然后下拉“行标签”,取消选择“(全选)”,然后选择第一项(“船尾”),我会看到:

在此处输入图像描述

这不是我想要的;在模型(手工制作)表中,取消选择“全选”,然后选择单个项目过滤数据以仅包含该数据(在本例中为“Foster”),如下所示:

在此处输入图像描述

...而不是用受限数据透视表替换数据的第一部分。

我需要做什么才能使这项工作按预期进行?

4

1 回答 1

0

也许我的命名法有问题,因为我认为我真正想要的不一定是数据透视表,而是过滤能力。

而且,尽管尝试这样做,这似乎是合乎逻辑的,甚至在理论上是正确的:

using (var shortNameCell = locationWorksheet.Cells[rowToPop, SHORTNAME_BYDCBYLOC_COL])
{
    shortNameCell.Value = "Short Name";
    shortNameCell.Style.WrapText = false;
    shortNameCell.Style.Font.Size = 12;
    shortNameCell.AutoFilter = true;
}
using (var companyNameCell = locationWorksheet.Cells[rowToPop, COMPANYNAME_BYDCBYLOC_COL])
{
    . . .
    companyNameCell.AutoFilter = true;
}
using (var reasonDescCell = locationWorksheet.Cells[rowToPop, REASONDESC_BYDCBYLOC_COL])
{
    . . .
    reasonDescCell.AutoFilter = true;
}
using (var transTypeCell = locationWorksheet.Cells[rowToPop, TRANSTYPE_BYDCBYLOC_COL])
{
    . . .
    transTypeCell.AutoFilter = true;
}

...结果只有最后一列因此被指定为运动过滤能力,以下对所有四个都有效:

locationWorksheet.Cells["A6:D6"].AutoFilter = true;

使用最后一个,我得到以下信息:

在此处输入图像描述

更新

毕竟这是我需要的数据透视表,我为开始了解如何完成我需要做的事情显示在我的自动回答

于 2016-08-05T20:19:26.727 回答