2016-10-27 4 views
1

я генерировать лист Excel, который содержит данные, отформатированную следующим образом:Как переместить «подэлементы» в сводной таблице Excel в другой столбец?

enter image description here

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

Когда я PivotTablize этих данных, он помещает эти значения под каждое описание:

enter image description here

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

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

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 («Описание») и четыре DataFields, которые выравнивают их в поле столбца Описание. Я хочу перенести эти четыре поля вправо, в их собственный столбец, а ярлык описания - вертикально центрировать между этими четырьмя значениями слева. [Как это возможно?

ответ

2

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

pivotTable.RowAxisLayout xlTabularRow 
pivotTable.MergeLabels = True 

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

enter image description here

Небольшой скрипт в 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); 
+0

добавлен код для слияния ярлыки описания. – Salvador

+0

Из-за других вещей, которые не совсем работают в EPPlus, мне, вероятно, понадобится реализовать это в Excel Interop; код тот же для этого? –

+0

Я думаю, что, не пробовал, хотя: https://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.pivottable.aspx – Salvador

1

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

PivotTable Design

Смежные вопросы