2016-10-27 271 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(「描述」 )和四個DataField,它們將它們在Description列字段下對齊。我想要將這四個字段向右移動到他們自己的列,並且將描述標籤垂直居中在這四個值之間。 [這怎麼可能?

回答

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

這是所有關於數據透視表的佈局/設計......這裏的手工方式 - 薩爾瓦多的VBA方式:)...

PivotTable Design

相關問題