Comment définir la disposition du rapport de tableau de pivot sur Tabulaire à EPPLUS?
-
13-11-2019 - |
Question
En regardant les échantillons qui viennent avec EPPlus, j'ai réussi à créer la table pivot, mais je ne parviens pas à définir la disposition correcte du rapport pour cela.Je veux que ce soit "tabulaire", pas "contour" ou autre chose.Pour moi, cela ressemble à EPPLUS ne le soutient pas maintenant, mais peut-être que je manque quelque chose?
La solution
Cela s'est avéré être une voie plus facile que je ne le pensais ... en définissant «tout» à «Faux», la table rendue comme tabulaire.Donc fondamentalement:
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 cette façon, je reçois la table de pivot avec la mise en page tabulaire.
Autres conseils
Voici la solution.Définir explicitement tous les champs (y compris les champs masqués) compacts et décrivent des propriétés sur FALSE.
(from pf in pivot.Fields
select pf).ToList().ForEach(f =>
{
f.Compact = false;
f.Outline = false;
});
Il y a donc un certain contexte, voici mon code pour générer le pivot.Il est à court de métadonnées mais le concept est le même.
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;