2012-02-27 10 views
5

EPPlusに付属のサンプルを見ると、ピボットテーブルを作成できましたが、正しいレポートレイアウトを設定できません。私はそれが '表形式'であること、 'アウトライン'などではないことを望んでいます。私にはEPPlusはこれを今サポートしていないようですが、おそらく私は何かを見逃していますか?EPPlusでピボットテーブルのレポートレイアウトを表形式に設定する方法は?

答えて

6

これは私が思っていたよりも簡単な方法であることが判明しました。「すべて」を「偽」に設定すると、表が表形式でレンダリングされます。だから、基本的には:

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

+0

申し訳ありませんが... – noocyte

3

ここに解決策があります。明示的にすべてのフィールド(隠しフィールドを含む)のcompactプロパティとoutlineプロパティを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; 
関連する問題