Как переместить подэлементы сводной таблицы Excel в другой столбец?

Я создаю лист Excel, который содержит данные, отформатированные следующим образом:

введите описание изображения здесь

IOW, значения «Всего пакетов», «Общего количества покупок», «Средней цены» и «% от общего числа» расположены в отдельном столбце (Данные) для каждого всеобъемлющего (или дополнительного) описания.

Когда я сводную таблицу этих данных, он помещает эти значения под каждым описанием:

введите описание изображения здесь

Это имеет смысл, но те, кто привык к предыдущему виду, хотят, чтобы он был воспроизведен в сводной таблице. Как я могу переместить описание «подэлементов» в сводной таблице в свой собственный столбец?

Это код, который я использую для создания сводной таблицы:

private void PopulatePivotTableSheet()
{
    string NORTHWEST_CORNER_OF_PIVOT_TABLE = "A6";
    AddPrePivotTableDataToPivotTableSheet();
    var dataRange = rawDataWorksheet.Cells[rawDataWorksheet.Dimension.Address];
    dataRange.AutoFitColumns();
    var pivotTable = pivotTableWorksheet.PivotTables.Add(
                        pivotTableWorksheet.Cells[NORTHWEST_CORNER_OF_PIVOT_TABLE], 
                        dataRange, 
                        "PivotTable");
    pivotTable.MultipleFieldFilters = true;
    pivotTable.GridDropZones = false;
    pivotTable.Outline = false;
    pivotTable.OutlineData = false;
    pivotTable.ShowError = true;
    pivotTable.ErrorCaption = "[error]";
    pivotTable.ShowHeaders = true;
    pivotTable.UseAutoFormatting = true;
    pivotTable.ApplyWidthHeightFormats = true;
    pivotTable.ShowDrill = true;

    // Row field[s]
    var descRowField = pivotTable.Fields["Description"];
    pivotTable.RowFields.Add(descRowField);

    // Column field[s]
    var monthYrColField = pivotTable.Fields["MonthYr"];
    pivotTable.ColumnFields.Add(monthYrColField);

    // Data field[s]
    var totQtyField = pivotTable.Fields["TotalQty"];
    pivotTable.DataFields.Add(totQtyField);

    var totPriceField = pivotTable.Fields["TotalPrice"];
    pivotTable.DataFields.Add(totPriceField);

    // Don't know how to calc these vals here, so have to grab them from the source data sheet
    var avgPriceField = pivotTable.Fields["AvgPrice"];
    pivotTable.DataFields.Add(avgPriceField);

    var prcntgOfTotalField = pivotTable.Fields["PrcntgOfTotal"];
    pivotTable.DataFields.Add(prcntgOfTotalField);
}

Таким образом, имеется одно поле RowField ("MonthYr") со значениями, такими как "201509" и "201510", одно поле ColumnField ("Description") и четыре поля данных, которые выравниваются по полю столбца Description. Я хочу сдвинуть эти четыре поля вправо, в их собственный столбец, а метку «Описание» расположить вертикально по центру между этими четырьмя значениями слева от них. [Как это возможно?


person B. Clay Shannon    schedule 27.10.2016    source источник


Ответы (2)


Попробуйте изменить макет таблицы с помощью

pivotTable.RowAxisLayout xlTabularRow
pivotTable.MergeLabels = True

это результат:

введите описание изображения здесь

Небольшой скрипт на C# с Interop.Excel. Включено использование ;)

using Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;
using Excel = Microsoft.Office.Interop.Excel;

var excelApp = new Excel.Application();
Excel.Workbook wb = excelApp.Workbooks.Open(@"e:\42\TestSO.xlsx");
Worksheet ws = wb.Worksheets["SheetName"];
PivotTable pt = ws.PivotTables("DynamicTableName");
pt.RowAxisLayout(XlLayoutRowType.xlTabularRow);
pt.MergeLabels = true;
wb.Save();
wb.Close();
Marshal.ReleaseComObject(ws);
person Salvador    schedule 27.10.2016
comment
Из-за того, что другие вещи не совсем работают в EPPlus, мне, вероятно, придется реализовать это в Excel Interop; код одинаковый для этого? - person B. Clay Shannon; 28.10.2016
comment
Я думаю, что да, но не пробовал: msdn.microsoft.com/en-us/library/ - person Salvador; 28.10.2016
comment
Я не смог выяснить, какое свойство там есть, и нет ли макета или таблицы в каком-то устаревшем коде, где это работает таким образом. - person B. Clay Shannon; 28.10.2016
comment
@B.ClayShannon Обновил мой ответ с помощью Excel Interop. - person Salvador; 28.10.2016

Все дело в макете / дизайне сводной таблицы... вот ручной способ - у Сальвадора есть способ VBA :)...

Дизайн сводной таблицы

person CRUTER    schedule 27.10.2016