2012-02-27 37 views

Respuesta

6

Esto resultó ser mucho más fácil de lo que pensaba ... Al configurar 'todo' en 'falso', la tabla se representa como Tabular. Así que, básicamente:

pivotTable.Compact = false; 
pivotTable.CompactData = false; 
pivotTable.Indent = 0; 
pivotTable.RowGrandTotals = false; 
pivotTable.UseAutoFormatting = true; 
pivotTable.ShowMemberPropertyTips = false; 
pivotTable.DataOnRows = false; 

field.Outline = false; 
field.Compact = false; 
field.ShowAll = false; 
field.SubtotalTop = false; 

De esa manera obtengo la tabla dinámica con diseño tabular.

+0

Cuando pruebo esto funciona principalmente, sin embargo, obtengo 'Etiquetas de fila' como el encabezado de mis filas en lugar del nombre del campo. Obtengo 'Etiquetas de columna' como el encabezado de mis columnas en lugar del nombre del campo. ¿Sabes cómo configurarlo para la descripción correcta? – briddums

+0

Lo siento, no tengo idea ... – noocyte

3

Aquí está la solución. Establezca explícitamente todos los campos (incluidos los ocultos) compactos y las propiedades del esquema en falso.

(from pf in pivot.Fields 
      select pf).ToList().ForEach(f => 
       { 
        f.Compact = false; 
        f.Outline = false; 
       }); 

Justo lo que no es cierto contexto, aquí es mi código para generar el pivote. Se ejecuta metadata pero el concepto es el mismo.

 var pivotTabName = "Pivot"; 
     if (tab.Form.FormTabs.Count(ft => ft.FormTabPivotFields.Any()) > 1) 
      pivotTabName = tab.DisplayName + " " + pivotTabName; 

     var sheet = package.Workbook.Worksheets.Add(pivotTabName); 

     const int pivotRow = 7; 
     const int pivotCol = 1; 

     var dataSourceRange = table.WorkSheet.Workbook.Names[table.Name + "_PivotSource"]; 
     var pivot = sheet.PivotTables.Add(sheet.Cells[pivotRow, pivotCol], dataSourceRange.Worksheet.Cells[dataSourceRange.Address], 
           pivotTabName.Replace(" ", string.Empty)); 

     const bool outline = false; 
     const bool compact = false; 
     const bool showAll = false; 

     pivot.Compact = compact; 
     pivot.CompactData = compact; 
     pivot.Outline = outline; 
     pivot.OutlineData = outline; 
     pivot.Indent = 0; 
     pivot.UseAutoFormatting = true; 
     pivot.ShowMemberPropertyTips = false; 
     pivot.DataOnRows = false; 
     pivot.RowGrandTotals = false; 
     pivot.ShowDrill = false; 
     pivot.EnableDrill = false; 
     pivot.RowGrandTotals = false; 
     pivot.ColumGrandTotals = true; 
     pivot.MultipleFieldFilters = true; 

     (from pf in tab.FormTabPivotFields 
     where pf.PivotFieldType.Name == "Page" 
     orderby pf.DisplayOrder 
     select pf.FormTabFactVcTypeDomain != null ? pf.FormTabFactVcTypeDomain.DisplayColumnName : pf.FormTabMeasureTypeColumn.DisplayColumnName).ToList().ForEach(fieldName => 
      { 
       var fld = pivot.PageFields.Add(pivot.Fields[fieldName]); 
       fld.Compact = compact; 
       fld.Outline = outline; 
       fld.ShowAll = showAll; 
       fld.SubtotalTop = false; 
       fld.SubTotalFunctions = eSubTotalFunctions.None; 
      }); 

     (from pf in tab.FormTabPivotFields 
     where pf.PivotFieldType.Name == "Row" 
     orderby pf.DisplayOrder 
     select pf.FormTabFactVcTypeDomain != null ? pf.FormTabFactVcTypeDomain.DisplayColumnName : pf.FormTabMeasureTypeColumn.DisplayColumnName).ToList().ForEach(fieldName => 
     { 
      var fld = pivot.RowFields.Add(pivot.Fields[fieldName]); 
      fld.Compact = compact; 
      fld.Outline = outline; 
      fld.ShowAll = showAll; 
      fld.SubtotalTop = false; 
      fld.SubTotalFunctions = eSubTotalFunctions.None; 
     }); 

     (from pf in tab.FormTabPivotFields 
     where pf.PivotFieldType.Name == "Column" 
     orderby pf.DisplayOrder 
     select pf.FormTabFactVcTypeDomain != null ? pf.FormTabFactVcTypeDomain.DisplayColumnName : pf.FormTabMeasureTypeColumn.DisplayColumnName).ToList().ForEach(fieldName => 
     { 
      var fld = pivot.ColumnFields.Add(pivot.Fields[fieldName]); 
      fld.Compact = compact; 
      fld.Outline = outline; 
      fld.ShowAll = showAll; 
      fld.SubtotalTop = false; 
      fld.SubTotalFunctions = eSubTotalFunctions.None; 
     }); 

     (from pf in tab.FormTabPivotFields 
     where pf.PivotFieldType.Name == "Data" 
     orderby pf.DisplayOrder 
     select new 
      { 
       FieldName = pf.FormTabFactVcTypeDomain != null ? pf.FormTabFactVcTypeDomain.DisplayColumnName : pf.FormTabMeasureTypeColumn.DisplayColumnName, 
       Format = pf.FormTabMeasureTypeColumn != null ? 
        (pf.FormTabMeasureTypeColumn.MeasureFormatIndex == 1 ? pf.FormTab.MeasureColumnExcelNumberFormat1 : pf.FormTab.MeasureColumnExcelNumberFormat2) 
        : "General" 
      }).ToList().ForEach(md => 
      { 
       var df = pivot.DataFields.Add(pivot.Fields[md.FieldName]); 
       df.Format = md.Format; 
       df.Field.Compact = compact; 
       df.Field.Outline = outline; 
      }); 

     (from pf in pivot.Fields 
      where pf.Axis == ePivotFieldAxis.None && pf.IsDataField == false 
      select pf).ToList().ForEach(f => 
       { 
        f.Compact = compact; 
        f.Outline = outline; 
       }); 

     // apply pivot table styling 
     pivot.TableStyle = TableStyles.Medium15; 
Cuestiones relacionadas