是否可以更改数据透视表的范围,然后使用现有文件的EPPlus刷新值?
现在我将EPPlus与Excel Interopt结合使用... EPPlus在具有明确定义的数据透视表的现有xlsx中添加包含数据的新工作表...然后我用如下代码刷新数据源:
private bool RefreshPivotTable(string file, string sheetName, string pivotTableName, string sourceData)
{
try
{
Type excelType = Type.GetTypeFromProgID("Excel.Application");
dynamic excel = Activator.CreateInstance(excelType);
dynamic workbook = excel.Workbooks.Open(file);
dynamic sheet = workbook.Sheets[sheetName];
dynamic pivotTable = sheet.PivotTables(pivotTableName);
pivotTable.SourceData = sourceData;
pivotTable.RefreshTable();
workbook.Save();
workbook.Close();
excel.Application.Quit();
return true;
}
catch(Exception ex)
{
return false;
}
}
但是我想用EPPlus做所有事情。谢谢。
答案 0 :(得分:0)
恐怕这只能部分实现。
查看EPPlus documentation,您将找到有关数据透视表及其具有Pivot Cache和类似属性的Source Range的文档。但是没有提供有关刷新数据透视表的信息。应该在Excel中打开工作簿时执行此操作-也许对您来说足够快了?
无论如何,我对EPPlus的理解是阅读操纵Excel 文件的结构,而不在其中进行任何计算-仍然在Excel应用程序本身的域中。
修订:我必须纠正自己:根据this tutorial page,从EPPlus版本4开始可以进行常规计算,您可以运行worksheet.Calculate()
和其他命令。但是仍然没有提及数据透视表。
答案 1 :(得分:0)
使用EPPlus:
var excelWorkbook = new FileInfo(excelWorkbookPath);
using (var excelPackage = new ExcelPackage(excelWorkbook))
{
var rawDataWorksheet = excelPackage.Workbook.Worksheets[RawDataWorksheetName];
var pivotTableWorksheet = excelPackage.Workbook.Worksheets[PivotTableWorksheetName];
pivotTableWorksheet.PivotTables[0 /* Or whichever index */].CacheDefinition.SourceRange = rawDataWorksheet.Cells[rawDataWorksheet.Dimension.Start.Row, rawDataWorksheet.Dimension.Start.Column, rawDataWorksheet.Dimension.End.Row, rawDataWorksheet.Dimension.End.Column];
}
如果您正在使用模板Excel工作簿(而不是创建全新的工作簿),则还应该执行以下操作: