使用现有文件的EPPlus更改数据透视表的范围

时间:2019-05-10 20:19:20

标签: c# excel epplus

是否可以更改数据透视表的范围,然后使用现有文件的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做所有事情。谢谢。

2 个答案:

答案 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工作簿(而不是创建全新的工作簿),则还应该执行以下操作:

  1. 转到“数据透视表”选项,然后选中“打开文件时刷新数据”:https://www.extendoffice.com/documents/excel/1859-excel-refresh-pivot-table-on-open.html

Refresh data when opening the file

  1. (可选)如果需要,用户可以在其Excel安装中禁用“受保护的视图”:http://www.corporatefocus.com/support/how-to-disable-protected-view-in-microsoft-excel#:~:text=In%20Excel%20go%20to%20File,Enable%20All%20Macros%20by%20default

Disable 'Protected View'