图表的SetSourceData返回HRESULT E_FAIL数据透视表(Excel C#)

我想要在工作表中创build几个数据透视表,并从每个数据透视表中创build一个图表。 第一个数据透视表和第一个图表是正常创build的。 创build第二个数据透视表后,我想添加第二个图表来源从secound数据透视表,但此callback比HRESULT E_FAIL和第二个图表有第一个数据透视表的来源,我无法更改。

string pitpivotNam1 = "table1"; Dictionary<String, Excel.PivotField> pFields = new Dictionary<String, Excel.PivotField>(); Excel.PivotTable pivotTable1 = null; Excel.Range pivotDest = excelApp.Worksheets["PivotTable"].Cells[1, 1]; excelApp.Worksheets[sheetData].Activate(); int countColmn = excelApp.Cells[1, 1].End(Excel.XlDirection.xlToRight).Column; var headerNam = excelApp.Range[excelApp.Cells[1, 1], excelApp.Cells[1, countColmn]].Value; // Data Source for PivotTable Excel.Range pivotData = excelApp.Worksheets[sheetData].usedRange; Excel.PivotCache pivotcache = excelApp.ActiveWorkbook.PivotCaches().Create(Excel.XlPivotTableSourceType.xlDatabase, pivotData.Address/*, Excel.XlPivotTableVersionList.xlPivotTableVersion15*/); excelApp.Worksheets[sheetDest].Activate(); pivotTable1 = excelApp.Worksheets[sheetDest].PivotTables.Add(pivotcache, pivotDest, pitpivotNam1, useDefault/*, Excel.XlPivotTableVersionList.xlPivotTableVersion15*/); // Create Dynamically PivotFields for (int i = 1; i <= headerNam.Length - 1; i++) { pFields.Add("test" + i.ToString(), (Excel.PivotField)pivotTable1.PivotFields(i)); } pFields["test20"].Orientation = Excel.XlPivotFieldOrientation.xlDataField; pFields["test20"].Function = Excel.XlConsolidationFunction.xlAverage; pFields["test43"].Orientation = Excel.XlPivotFieldOrientation.xlDataField; pFields["test43"].Function = Excel.XlConsolidationFunction.xlAverage; pFields["test66"].Orientation = Excel.XlPivotFieldOrientation.xlDataField; pFields["test66"].Function = Excel.XlConsolidationFunction.xlAverage; pFields["test20"].Name = "DVP & R Progress"; // First Chart excelApp.ActiveSheet.Shapes.AddChart.Select(); excelApp.ActiveChart.SetSourceData(pivotTable1.TableRange1); // Second PivotTable string pitpivotNam2 = "table2"; Excel.PivotTable pivotTable2 = null; Dictionary<String, Excel.PivotField> pFields2 = new Dictionary<String, Excel.PivotField>(); Excel.Range pivotDest2 = excelApp.Worksheets["PivotTable"].Cells[20, 1]; excelApp.Worksheets[sheetData].Activate(); int countColmn2 = excelApp.Cells[1, 1].End(Excel.XlDirection.xlToRight).Column; var headerNam2 = excelApp.Range[excelApp.Cells[1, 1], excelApp.Cells[1, countColmn2]].Value; // Data Source for PivotTable Excel.Range pivotData2 = excelApp.Worksheets[sheetData].usedRange; Excel.PivotCache pivotcache2 = excelApp.ActiveWorkbook.PivotCaches().Create(Excel.XlPivotTableSourceType.xlDatabase, pivotData2.Address/*, Excel.XlPivotTableVersionList.xlPivotTableVersion15*/); excelApp.Worksheets[sheetDest].Activate(); pivotTable2 = excelApp.Worksheets[sheetDest].PivotTables.Add(pivotcache2, pivotDest2, pitpivotNam2, useDefault/*, Excel.XlPivotTableVersionList.xlPivotTableVersion15*/); // Create Dynamically PivotFields for (int i = 1; i <= headerNam2.Length - 1; i++) { pFields2.Add("test" + i.ToString(), (Excel.PivotField)pivotTable2.PivotFields(i)); } pFields2["test17"].Orientation = Excel.XlPivotFieldOrientation.xlColumnField; Excel.PivotField dataField = pivotTable2.DataPivotField; pFields2["test17"].Orientation = Excel.XlPivotFieldOrientation.xlDataField; pFields2["test17"].Function = Excel.XlConsolidationFunction.xlCount; pFields2["test40"].Orientation = Excel.XlPivotFieldOrientation.xlDataField; pFields2["test40"].Function = Excel.XlConsolidationFunction.xlCount; pFields2["test63"].Orientation = Excel.XlPivotFieldOrientation.xlDataField; pFields2["test63"].Function = Excel.XlConsolidationFunction.xlCount; dataField.Orientation = Excel.XlPivotFieldOrientation.xlRowField; // Secound Chart excelApp.ActiveSheet.Shapes.AddChart.Select(); excelApp.ActiveChart.SetSourceData(pivotTable2.TableRange1); 

感谢您的帮助提前。

问候,

丹尼尔