Как заставить классический макет сводной таблицы, созданный в EPPlus, работать правильно «из коробки»?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как заставить классический макет сводной таблицы, созданный в EPPlus, работать правильно «из коробки»?

Сообщение Anonymous »

У меня есть ОЧЕНЬ элементарная сводная таблица, созданная с помощью EPPlus. Я пытаюсь заставить «Классический макет сводной таблицы» работать правильно.
Вот простой код, который создает источник данных и сводный лист:

Код: Выделить всё

using System;
using System.Data;
using System.IO;
using OfficeOpenXml;
using OfficeOpenXml.Table;
using OfficeOpenXml.Table.PivotTable;

namespace EppTrial
{
class Program
{
static void Main(string[] args)
{
byte[] workbookBytes;
using (var p = new ExcelPackage())
{
var sheet = p.Workbook.Worksheets.Add("DataSheet");

var filledRange = sheet.Cells["A1"].LoadFromDataTable(GetDataTable(), true, TableStyles.Dark1);

sheet.Cells["E"].Style.Numberformat.Format = "d MMM";

filledRange.AutoFitColumns();

var pivotSheet = p.Workbook.Worksheets.Add("PivotSheet");

var pivotTable = pivotSheet.PivotTables.Add(pivotSheet.Cells["A3"], filledRange, "ThePivotTableName");

pivotTable.ColumnGrandTotals = true;
pivotTable.Compact = false;
pivotTable.CompactData = false;
pivotTable.DataCaption = "Values";
pivotTable.DataOnRows = false;
pivotTable.ErrorCaption = "[error]";
pivotTable.GridDropZones = true;
pivotTable.Outline = false;
pivotTable.OutlineData = false;
pivotTable.RowGrandTotals = true;
pivotTable.ShowColumnHeaders = true;
pivotTable.ShowError = true;
pivotTable.ShowHeaders = true;
pivotTable.ShowMemberPropertyTips = false;
pivotTable.ShowValuesRow = false;

foreach (string fieldName in new []{ "R1-Res", "R2-Proj"  })
{
var field = pivotTable.Fields[fieldName];
field.Outline = false;
field.Compact = false;
field.SubTotalFunctions = eSubTotalFunctions.None;
field = pivotTable.RowFields.Add(field);
field.ShowDropDowns = true;
field.Items.Refresh();
}

workbookBytes = p.GetAsByteArray();
}
File.WriteAllBytes(@"C:\Users\me\Desktop\EPP\trial.xlsx", workbookBytes);
}

public static DataTable GetDataTable()
{
// Named Table
var table = new DataTable("DataTable");

// Columns
table.Columns.Add("F1-Client", typeof(string));
table.Columns.Add("F2-Eng", typeof(string));
table.Columns.Add("R1-Res", typeof(string));
table.Columns.Add("R2-Proj", typeof(string));
table.Columns.Add("C1-Date", typeof(DateTime));
table.Columns.Add("C2-Type", typeof(string));
table.Columns.Add("V1-Hours", typeof(int));
table.Columns.Add("V2-Rev", typeof(double));

// Rows
table.Rows.Add("GM", "Design", "Joe", "Buick", new DateTime(2024, 9, 1), "Act", 8, 100);
table.Rows.Add("GM", "Design", "Joe", "Buick", new DateTime(2024, 10, 1), "Act", 6, 80);
table.Rows.Add("GM", "Design", "Mary", "Buick", new DateTime(2024, 9, 2), "Act", 4, 50);
table.Rows.Add("GM", "Design", "Mary", "Buick", new DateTime(2024, 10, 2), "Act", 6, 75);
table.Rows.Add("GM", "Design", "Joe", "Chevy", new DateTime(2024, 9, 2), "Act", 7, 90);
table.Rows.Add("GM", "Design", "Mary", "Chevy", new DateTime(2024, 10, 3), "Act", 4, 40);
table.Rows.Add("GM", "Build", "Joe", "Chevy", new DateTime(2024, 8, 1), "Act", 10, 200);
table.Rows.Add("Ford", "Build", "Mary", "Ranger", new DateTime(2024, 8, 2), "Act", 10, 250);
table.Rows.Add("Ford", "Design", "Joe", "Ranger", new DateTime(2024, 7, 1), "Act", 5, 150);

return table;
}
}
}

Когда я открываю полученный файл в Excel и перехожу к листу сводной таблицы, я вижу следующее:
Изображение

Обратите внимание на неправильную метку в A4 и отсутствующий виджет раскрывающегося списка в B4.
Теперь в Excel я могу просматривать вкладку «Отображение» параметров сводной таблицы — снимок экрана следующий:
Изображение

Если я сейчас сниму флажок с выбранной опции «Классический макет сводной таблицы» и нажму «ОК», чтобы сохранить изменения , а затем снова откройте ту же вкладку «Отображение» в параметрах сводной таблицы и повторно выберите тот же самый параметр «Классический макет сводной таблицы», который я только что снял, теперь сводная таблица выглядит и ведет себя правильно:
Изображение

Любые предложения относительно того, как я могу изменить свой код, чтобы это часть сводной таблицы правильно отображает как правильную метку столбца строки-поля, так и правильный (рабочий) виджет раскрывающегося списка?

Подробнее здесь: https://stackoverflow.com/questions/791 ... operly-out
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»