Создание сводной таблицы программно - PullRequest
0 голосов
/ 30 октября 2018

Я столкнулся с проблемой при создании сводной таблицы в Excel с использованием c #, когда созданная сводная таблица отображает дополнительные пустые столбцы (которые все еще являются частью сводной таблицы) после их создания и добавления на лист.

Ориентация всех полей сводной таблицы установлена ​​в Excel.XlPivotFieldOrientation.xlRowField. Если я вручную перетаскиваю одно из полей в раздел «Значения» сводной таблицы в Excel, то, похоже, таблица отображается правильно. Если я удаляю его, дополнительные пустые столбцы отображаются еще раз.

Ниже приведена функция для создания сводной таблицы:

        public void CreatePivotTable(Excel.Workbook workbook, Excel.Worksheet worksheet, Excel.Range sourceRange)
    {
        object useDefault = Type.Missing;
        Excel.PivotTable pivotTable;
        Excel.Range pivotData;
        Excel.Range pivotDestination;
        Excel.PivotField parentNameField;
        Excel.PivotField parameterNameField;
        Excel.PivotField parameterTypeField;
        Excel.PivotField parameterValueField;
        string pivotTableName = "ParametersPivot";

        pivotData = sourceRange;
        pivotDestination = worksheet.Range["A15", "A15"];
        Excel.PivotCache pivotCache = workbook.PivotCaches().Create(Excel.XlPivotTableSourceType.xlDatabase, sourceRange, Type.Missing);
        Excel.PivotTables pivotTables = worksheet.PivotTables(Type.Missing);
        pivotTable = pivotTables.Add(pivotCache, pivotDestination, pivotTableName, Type.Missing, Type.Missing);
        pivotTable.ColumnGrand = false;
        pivotTable.RowGrand = false;
        pivotTable.HasAutoFormat = true;
        pivotTable.

        parentNameField = (Excel.PivotField)pivotTable.PivotFields(1);
        parentNameField.Orientation = Excel.XlPivotFieldOrientation.xlRowField;

        parameterNameField = (Excel.PivotField)pivotTable.PivotFields(2);
        parameterNameField.Orientation = Excel.XlPivotFieldOrientation.xlRowField;

        parameterTypeField = (Excel.PivotField)pivotTable.PivotFields(3);
        parameterTypeField.Orientation = Excel.XlPivotFieldOrientation.xlRowField;

        parameterValueField = (Excel.PivotField)pivotTable.PivotFields(4);
        parameterValueField.Orientation = Excel.XlPivotFieldOrientation.xlRowField;

        //Format the Pivot Table.
        pivotTable.Format(Excel.XlPivotFormatType.xlPTNone);
        pivotTable.InGridDropZones = false;
        pivotTable.SmallGrid = false;
        pivotTable.ShowTableStyleRowStripes = false;
        pivotTable.TableStyle2 = "PivotStyleMedium8";

        //// Page Field
        //parentNameField.Orientation = Excel.XlPivotFieldOrientation.xlPageField;
        //parentNameField.Position = 1;
        //parentNameField.CurrentPage = "(All)";


    }

Создана сводная таблица

Все поля установлены как значения строк

Любое поле, перетаскиваемое в раздел значений разворота

Результирующая сводная таблица после перетаскивания поля в раздел значений

...