数据透视表数据源一直引用先前插入的工作表的数据透视表数据源

我正在生成两个工作表,一个用于数据,另一个用于使用ep plus的同一工作簿中的名为“worksheet1_data”“worksheet1”的数据透视表。 我第一次保存就好了。 我再一次处理这个excel文件(.xlsx),并在其中添加了两个新的工作表“worksheet2_data”“worksheet2” ,并使用“worksheet2_data”中的数据源生成了新的数据透视表。 当我打开文件时, “worksheet1”“worksheet2”中的数据透视表都具有“worksheet1_data”的数据源,即使我添加了更多的透视表,也都有“worksheet1_data”的数据源。

代码在debugging时工作正常,但在打开Excel表单时数据源发生了变化。 任何人都可以提出什么问题?

以下是我的代码:

ExcelWorksheet worksheetManagementARReportData = package.Workbook.Worksheets.Add(EndDate.ToString("MM-dd-yyyy") + "_Data"); ExcelWorksheet worksheetManagementARReport = package.Workbook.Worksheets.Add(EndDate.ToString("MM-dd-yyyy")); var dataRange_ManagementARReport = worksheetManagementARReportData.Cells["A1"].LoadFromDataTable(dsGetManagementARReport.Tables[0], true); var pivotTableManagementARReport = worksheetManagementARReport.PivotTables.Add(worksheetManagementARReport.Cells["A1"], dataRange_ManagementARReport, "PivotTable" + EndDate.ToString("MM_dd_yyyy") + "_ManagementARReport"); Tbl_AutomatedReport.PivotTable(rowfield, columnfield, pagefield, datafields, pivotTableManagementARReport); 

你能否更新每个工作簿中使用的数据透视范围? 像这样的东西:

 Private Sub UpdatePivotRange() Dim sName lRow = Sheet1.Range("A2").End(xlDown).Row Lcol = Sheet1.Range("A2").End(xlToRight).Column sName = Sheet1.Name pivRange = Sheet1.Name & "!R2C1:R" & lRow & "C" & Lcol End Sub 

每次打开文件更新每个工作表的枢轴范围如下代码工作:

  Private Sub Workbook_Open() 'Set Variables Equal to Data Sheet and Pivot Sheet Dim Data_sht As Worksheet Dim Pivot_sht As Worksheet Dim StartPoint As Range Dim DataRange As Range Dim PivotName As String Dim NewRange As String Dim WS_Count As Integer Dim I As Integer WS_Count = ActiveWorkbook.Worksheets.Count ' Begin the loop. For I = 1 To WS_Count If ThisWorkbook.Worksheets(I).PivotTables.Count <> 0 Then Set Data_sht = ThisWorkbook.Worksheets(I - 1) Set Pivot_sht = ThisWorkbook.Worksheets(I) PivotName = "PivotTable" + Replace(Pivot_sht.Name, "-", "_") + "_ManagementARReport" Set StartPoint = Data_sht.Range("A1") Set DataRange = Data_sht.Range(StartPoint, StartPoint.SpecialCells(xlLastCell)) NewRange = Data_sht.Name & "!" & _ DataRange.Address(ReferenceStyle:=xlR1C1) 'Change Pivot Table Data Source Range Address Pivot_sht.PivotTables(PivotName).ChangePivotCache _ ThisWorkbook.PivotCaches.Create( _ SourceType:=xlDatabase, _ SourceData:=NewRange) 'Ensure Pivot Table is Refreshed Pivot_sht.PivotTables(PivotName).RefreshTable End If Next I End Sub