2012-02-27 99 views

回答

6

事實證明,這比我想象的要容易...通過將'everything'設置爲'false',表格呈現爲Tabular。所以基本上:

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; 

這樣我得到與表格佈局的數據透視表。

+0

當我嘗試這個主要工作,但是我得到'行標籤'作爲我的行的標題,而不是字段的名稱。我將「列標籤」作爲我列的標題而不是字段的名稱。你知道如何將它設置爲正確的描述嗎? – briddums 2013-01-15 21:40:08

+0

對不起,不知道... – noocyte 2013-01-17 10:52:31

3

以下是解決方案。將所有字段(包括隱藏字段)顯式設置爲精簡併將大綱屬性設置爲false。

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

就這樣,有一些上下文,這裏是我的代碼來生成樞軸。它運行的是元數據,但概念是相同的。

 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; 
相關問題