OpenXML / EPPlus - 在 .Net 中创建 PivotCache

5
我希望这可以帮助我回答我之前在这里提出的两个问题中的一个。但是我正在寻找如何在EPPlus / OpenXML中创建PivotCache,而且在网上或他们的文档中都找不到任何显示如何执行此操作的内容。
假设我有一个名为wksRawData的Excel工作表,它是在EPPlus中创建的,我想创建第二个工作表,并基于wksRawData.Cells(wksRawData.Dimension.Address)的数据透视缓存来创建数据透视表 - 希望然后我可以删除wksRawData但仍保留数据透视表。我该怎么做呢?
到目前为止,我用于在我的第二个工作表中创建数据透视表的代码是:
  Dim wksRawData As ExcelWorksheet = wbk.Worksheets("Raw Data")
  Dim wksPvtTbl As ExcelWorksheet = wbk.Worksheets("PivotTbl")


 ' Insert the Pivot Table to the sheet
 Dim DataRange As ExcelRange = wksRawData.Cells(wksRawData.Dimension.Address)

 Dim pvtTable As OfficeOpenXml.Table.PivotTable.ExcelPivotTable = wksPvtTbl.PivotTables.Add(wksPvtTbl.Cells("B4"), DataRange, "MyPivotTable")

 pvtTable.Compact = True
 pvtTable.CompactData = True
 pvtTable.Outline = True
 pvtTable.OutlineData = True
 pvtTable.ShowHeaders = True
 pvtTable.UseAutoFormatting = True
 pvtTable.ApplyWidthHeightFormats = True
 pvtTable.ShowDrill = True
 pvtTable.RowHeaderCaption = "Caption"

 ' Set the top field
 Dim r1 As OfficeOpenXml.Table.PivotTable.ExcelPivotTableField = pvtTable.Fields("FirstField")
 r1.Sort = OfficeOpenXml.Table.PivotTable.eSortType.Ascending
 pvtTable.RowFields.Add(r1)

 ' Set the second field
 Dim r2 As OfficeOpenXml.Table.PivotTable.ExcelPivotTableField = pvtTable.Fields("SecondField")
 r2.Sort = OfficeOpenXml.Table.PivotTable.eSortType.Ascending
 pvtTable.RowFields.Add(r2)
 r2.ShowAll = False

 ' Set the DataField
 Dim df1 As OfficeOpenXml.Table.PivotTable.ExcelPivotTableField = pvtTable.Fields("DataField")
 df1.SubTotalFunctions = OfficeOpenXml.Table.PivotTable.eSubTotalFunctions.Sum
 pvtTable.DataFields.Add(df1)

非常感谢任何在这个问题或其他问题上提供的帮助 - 无论是使用C#还是VB、使用EPPlus还是OpenXML - 我只需要让它工作起来!!!

谢谢!

1个回答

0

我相信你想要从另一个工作表中添加数据。我的帖子在你的另一个帖子中展示了完整的代码EPPlus 数据透视表 - 折叠整个字段

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

调用 "PivoTables.Add()",请参阅下面的工具提示。
// Summary:
//     Create a pivottable on the supplied range
//
// Parameters:
//   Range:
//     The range address including header and total row
//
//   Source:
//     The Source data range address
//
//   Name:
//     The name of the table. Must be unique
//
// Returns:
//     The pivottable object

我有点困惑你在这里想要做什么...... 我的难题是,我想根据第二张工作表中的数据创建数据透视表,然后删除第二张工作表。挑战在于,如果通过EPPlus删除第二张工作表,则在打开工作簿时数据透视表将为空。我的想法是将数据保存在PivotCache中(这样就可以允许我删除第二个表),但我无法找到一种方法来实现它。 - John Bustos
根据你在另一个问题中的逻辑,我可以编写一个workbook_open的代码,一旦Excel在工作簿打开时自动创建了数据透视表缓存,就会删除第二个工作表,但是我想学习如何创建实际的缓存... 你有什么想法吗??/ 你在建议什么?? - John Bustos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接