1

生/ソースデータとは別にピボットテーブルを作成できましたが、次のように、列見出し行にフィルターを提供することでスプレッドシートデータのフィルター処理を可能にするピボットテーブルを使用して、2 つを結合したいと考えています。

ここに画像の説明を入力

私はこのコードを試しました:

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
}

...しかし、これは機能しません。生成されたシートを開くと、次のダイアログが表示されます。

ここに画像の説明を入力

「はい」を選択すると、次のように表示されます。

ここに画像の説明を入力

「いいえ」を選択すると、次のように表示されます。

ここに画像の説明を入力

...これは有望ですが、「行ラベル」をドロップダウンし、「(すべて選択)」の選択を解除してから、最初の項目 (「Stern」) を選択すると、次のように表示されます。

ここに画像の説明を入力

これは私が望んでいるものではありません。モデル (手作り) シートで、[すべて選択] の選択を解除し、単一の項目を選択すると、そのデータ (この場合は [フォスター]) のみが含まれるようにデータがフィルター処理されます。

ここに画像の説明を入力

...データの最初の部分を制限されたピボットテーブルに置き換えるのではなく。

これを意図したとおりに機能させるにはどうすればよいですか?

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;
}

...結果は、このようにスポーツ フィルター機能に指定された最後の列のみになります。次は、4 つすべてに対して機能します。

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

最後を使用すると、次のようになります。

ここに画像の説明を入力

アップデート

結局必要だったのはピボット テーブルであり、必要なことを達成する方法を開始するために行ったことは、ここの自動応答に示されています。

于 2016-08-05T20:19:26.727 に答える