我正在使用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);
答案 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