2016-08-04 5 views
0

Я получил этот EPPlus код для создания сводной таблицы:Как я могу предварительно выбрать поля для включения в сводную таблицу?

private void AddPivotTable() 
{ 
    string colAlphaRowNum = string.Format("A{0}", locationWorksheet.Dimension.End.Row+5); 
    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.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 
} 

Это своего рода-Сорта работ; Я получаю это на листе:

enter image description here

Если я после этого (вручную) выбрать все шесть доступных полей в «списке полей сводной таблицы» в северо-восточном углу листа, сводной таблицы меняет appearnce к этому:

enter image description here

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

Как это возможно?

ПРИМЕЧАНИЕ. У меня были аналогичные проблемы с Excel Interop и было обнаружено, что «вещи» намного проще с использованием EPPlus, в отличие от этого; все же, хотя программный выбор полей кажется проблемой ...

ответ

1

Это is намного проще, чем Excel Interop; здесь все, что требуется:

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]);