Сводная таблица EPPlus - Свернуть все поле

Кто-нибудь знает как это сделать?

Я использую EPPlus в .Net и создал сводную таблицу с 2 полями строки и одним полем сводных данных:

Dim Pivot As OfficeOpenXml.Table.PivotTable.ExcelPivotTable
Pivot = wksPivot.PivotTables.Add(wksPivot.Cells("A1"), Datarange, "pName")

Pivot.RowFields.Add(Pivot.Fields("Fld1")).Sort = Table.PivotTable.eSortType.Ascending
Pivot.RowFields.Add(Pivot.Fields("Fld2")).Sort = Table.PivotTable.eSortType.Ascending

Dim dtaFld As OfficeOpenXml.Table.PivotTable.ExcelPivotTableDataField
dtaFld = Pivot.DataFields.Add(Pivot.Fields("XYZ"))
dtaFld.Function = Table.PivotTable.DataFieldFunctions.Sum

Все отлично работает, но я хочу, чтобы сводная таблица начиналась как свернутая, когда пользователь открывает рабочую книгу (в Excel, когда вы создаете сводную таблицу, вы можете щелкнуть правой кнопкой мыши элемент данных и выбрать «Развернуть / Свернуть» ">" Свернуть все поле "

Горячий я могу сделать это с помощью кода? (И я готов использовать прямой OpenXML, если EPPlus еще не поддерживает это ...)

ТАКЖЕЕсть ли способ удалить необработанные данные из книги, чтобы сводная таблица все еще работала? Я пытался, и когда я открываю книгу, моя сводная таблица пуста? - Моя нынешняя логика привела меня кэтот вопрос... Есть идеи??

(Я знаю, что написал этот вопрос в VB. Но я добавил обаC# & VB теги к этому вопросу - я доволен кодом на любом языке - спасибо !!)

 John Bustos12 окт. 2012 г., 20:47
В качестве дополнения к этому вопросу, так как никто не ответил на него, я закончил тем, что создал лист с данными, используя EPPlus для скорости, а затем сохранил его. Затем я открыл лист с помощью интерфейса Excel.Interop, создал сводную таблицу и использовал «Field1.ShowDetail = False», чтобы свернуть его, как я хотел ...
 John Bustos01 мая 2013 г., 16:41
В качестве дополнения к моему дополнению ... Приведенный выше комментарий больше не служит мне, так как теперь я хочу переместить это приложение в ASP / IIS, и поэтому Excel Interop больше не является допустимой возможностью ...

Ответы на вопрос(2)

вероятно, худший ответ на это решение, но оно достигает полного краха. Я предоставил рабочий пример, просто скопируйте прошлое в новое консольное приложение. добавить зависимость epplus, "F5".

изменено / взято изhttp://epplus.codeplex.com/SourceControl/latest#SampleApp/Sample15.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using OfficeOpenXml.Table;
using OfficeOpenXml.Table.PivotTable;
using OfficeOpenXml;
using System.IO;

namespace pTable
{
    class Program
    {
        static void Main(string[] args)
        {
            //ExcelPackage _pck = new ExcelPackage();

            Directory.CreateDirectory(string.Format("Test"));
            //ExcelPackage _pck = new ExcelPackage(new FileInfo("Test\\Worksheet.xlsx"));
            ExcelPackage _pck = new ExcelPackage(new FileInfo("Test\\Worksheet.xlsm"));

            var wsPivot1 = _pck.Workbook.Worksheets.Add("Rows-Data on columns");

            var ws = _pck.Workbook.Worksheets.Add("Data");
            ws.Cells["K1"].Value = "Item";
            ws.Cells["L1"].Value = "Category";
            ws.Cells["M1"].Value = "Stock";
            ws.Cells["N1"].Value = "Price";
            ws.Cells["O1"].Value = "Date for grouping";

            ws.Cells["K2"].Value = "Crowbar";
            ws.Cells["L2"].Value = "Hardware";
            ws.Cells["M2"].Value = 12;
            ws.Cells["N2"].Value = 85.2;
            ws.Cells["O2"].Value = new DateTime(2010, 1, 31);

            ws.Cells["K3"].Value = "Crowbar";
            ws.Cells["L3"].Value = "Hardware";
            ws.Cells["M3"].Value = 15;
            ws.Cells["N3"].Value = 12.2;
            ws.Cells["O3"].Value = new DateTime(2010, 2, 28);

            ws.Cells["K4"].Value = "Hammer";
            ws.Cells["L4"].Value = "Hardware";
            ws.Cells["M4"].Value = 550;
            ws.Cells["N4"].Value = 72.7;
            ws.Cells["O4"].Value = new DateTime(2010, 3, 31);

            ws.Cells["K5"].Value = "Hammer";
            ws.Cells["L5"].Value = "Hardware";
            ws.Cells["M5"].Value = 120;
            ws.Cells["N5"].Value = 11.3;
            ws.Cells["O5"].Value = new DateTime(2010, 4, 30);

            ws.Cells["K6"].Value = "Crowbar";
            ws.Cells["L6"].Value = "Hardware";
            ws.Cells["M6"].Value = 120;
            ws.Cells["N6"].Value = 173.2;
            ws.Cells["O6"].Value = new DateTime(2010, 5, 31);

            ws.Cells["K7"].Value = "Hammer";
            ws.Cells["L7"].Value = "Hardware";
            ws.Cells["M7"].Value = 1;
            ws.Cells["N7"].Value = 4.2;
            ws.Cells["O7"].Value = new DateTime(2010, 6, 30);

            ws.Cells["K8"].Value = "Saw";
            ws.Cells["L8"].Value = "Hardware";
            ws.Cells["M8"].Value = 4;
            ws.Cells["N8"].Value = 33.12;
            ws.Cells["O8"].Value = new DateTime(2010, 6, 28);

            ws.Cells["K9"].Value = "Screwdriver";
            ws.Cells["L9"].Value = "Hardware";
            ws.Cells["M9"].Value = 1200;
            ws.Cells["N9"].Value = 45.2;
            ws.Cells["O9"].Value = new DateTime(2010, 8, 31);

            ws.Cells["K10"].Value = "Apple";
            ws.Cells["L10"].Value = "Groceries";
            ws.Cells["M10"].Value = 807;
            ws.Cells["N10"].Value = 1.2;
            ws.Cells["O10"].Value = new DateTime(2010, 9, 30);

            ws.Cells["K11"].Value = "Butter";
            ws.Cells["L11"].Value = "Groceries";
            ws.Cells["M11"].Value = 52;
            ws.Cells["N11"].Value = 7.2;
            ws.Cells["O11"].Value = new DateTime(2010, 10, 31);
            ws.Cells["O2:O11"].Style.Numberformat.Format = "yyyy-MM-dd";

            var pt = wsPivot1.PivotTables.Add(wsPivot1.Cells["A1"], ws.Cells["K1:N11"], "Pivottable1");

            pt.Compact = true;
            pt.CompactData = true;

            pt.GrandTotalCaption = "Total amount";
            pt.RowFields.Add(pt.Fields[1]);
            pt.RowFields.Add(pt.Fields[0]);
            pt.DataFields.Add(pt.Fields[3]);
            pt.DataFields.Add(pt.Fields[2]);
            pt.DataFields[0].Function = DataFieldFunctions.Product;
            pt.DataOnRows = false;



            _pck.Workbook.CreateVBAProject();

            var sb = new StringBuilder();

            sb.AppendLine("Private Sub Workbook_Open()");
            sb.AppendLine("    Range(\"A1\").Select");
            sb.AppendLine("    ActiveSheet.PivotTables(\"Pivottable1\").PivotFields(\"Category\").PivotItems(\"Hardware\").ShowDetail = False");
            sb.AppendLine("End Sub");

            _pck.Workbook.CodeModule.Code = sb.ToString();

            _pck.Save();


        }

    }
}
 John Bustos22 мая 2013 г., 22:51
Знаете, @FaceToDesk, я думал о том, чтобы делать это снова и снова, и НАДЕЖДА, что было лучшее решение, но ДЕЙСТВИТЕЛЬНО не кажется, что есть решение, основанное на отсутствии ответов на этот вопрос. Большое спасибо, я думаю, что вы на 100% правы, и это лучший способ решить проблему !!!
 John Bustos22 мая 2013 г., 22:53
Я думаю, что я собираюсь смешать это с наличиемWorkbook_Open Sub удалить себя после запуска в первый раз ... Как показано здесь:excelforum.com/excel-programming-vba-macros/..., Когда я закончу, я опубликую свой окончательный код, чтобы показать кому-либо еще, кто когда-либо сталкивался с подобными проблемами, что можно сделать. Просто ради НАДЕЖДЫ я могу найти другое решение, я пока не буду отмечать вас как правильный ответ (все еще надеясь, что у кого-то есть другой ответ), но вы определенно заслуживаете награду !! Спасибо большое за вашу помощь!!!!

вы можете попробовать что-то вроде (взято изэтот ТАК пост):

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

или, может быть, проще, разве что-то вроде следующей работы?

pvtTable.Compact = False
pvtTable.CompactData = False
pvtTable.Outline = False
pvtTable.OutlineData = False
pvtTable.ShowDrill = True

Также посмотрите наэтот ТАК пост детализировать хороший метод обратного инжиниринга, чтобы увидеть, как Excel добивается «вещей».

Постскриптум Не могу помочь вам с другим вопросом «извините».

 John Bustos07 мая 2013 г., 20:48
Пол, похоже, он не меняет сводную таблицу на полностью свернутую ... Удалось ли вам сделать это с помощью этого кода? Спасибо за ответ!!!!

Ваш ответ на вопрос