数据透视表数据源始终引用先前插入的工作表的数据透视表数据源

时间:2017-04-19 12:48:25

标签: excel vba c#-4.0 pivot-table

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

代码在调试时工作正常但数据源在打开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);

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

每次打开文件时,如下面的代码更新每个工作表的数据透视范围:

  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