Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在图表上设置源数据。获取错误:";对COM组件的调用返回了HRESULT E“U FAIL”;_C#_.net_Excel_Pivot - Fatal编程技术网

C# 如何在图表上设置源数据。获取错误:";对COM组件的调用返回了HRESULT E“U FAIL”;

C# 如何在图表上设置源数据。获取错误:";对COM组件的调用返回了HRESULT E“U FAIL”;,c#,.net,excel,pivot,C#,.net,Excel,Pivot,我试图在一个透视表上创建两个图表。当我创建第一个时,它是正常的,但是当我尝试创建第二个时,我得到以下错误:“HRESULT E_FAIL已从对COM组件的调用返回” chartPage.SetSourceData(oPivotTable.TableRange2,misValue); 按照下面的代码来理解我在做什么 Workbook xlWorkBook=xlApp.Workbooks.Add(rootFile+“Template.xlsm”); 工作表xlWorkSheet=(工作表)xlWo

我试图在一个透视表上创建两个图表。当我创建第一个时,它是正常的,但是当我尝试创建第二个时,我得到以下错误:“HRESULT E_FAIL已从对COM组件的调用返回”

chartPage.SetSourceData(oPivotTable.TableRange2,misValue);
按照下面的代码来理解我在做什么

Workbook xlWorkBook=xlApp.Workbooks.Add(rootFile+“Template.xlsm”);
工作表xlWorkSheet=(工作表)xlWorkBook.Worksheets.get_项(1);
如果(!Directory.Exists(rootFile)){
Directory.CreateDirectory(根文件);
}
字符串文件名=根文件+报表.Name+“.xlsm”;
xlWorkSheet.Name=“发票”;
List sheets=JsonConvert.DeserializeObject(report.Definition);
var startCell=(Range)xlsheet.Cells[1,1];
var endCell=(Range)xlsheet.Cells[invoices.Count()+creditNotes.Count(),properties.Count()+1];
var writeRange=xlsheet.Range[startCell,endCell];
writeRange.Value=数据源;
int lastROW=xlsheet.Cells[xlsheet.Rows.Count,1].End(XlDirection.xlUp).Row;
int LastCol=xlWorkSheet.Cells[1,xlWorkSheet.Columns.Count].End(XlDirection.xlToLeft.Column);
Range pRange=xlsheet.Cells[1,1]。调整大小(lastROW,LastCol);
pRange.Columns.AutoFit();
foreach(表中的var表){
PivotCache oPivotCache=(PivotCache)xlWorkBook.PivotCaches().Add(XlPivotTableSourceType.xlDatabase,pRange);
xlWorkBook.ShowPivotChartActiveFields=true;
工作表xlWorkSheetPivot=(工作表)xlWorkBook.Worksheets.Add(错误值);
xlWorkSheetPivot.Name=sheet.tabHeading;
xlWorkSheetPivot.Activate();
foreach(图纸中的枢轴。枢轴){
最后一个范围=获取范围(xlWorkSheetPivot);
数据透视表oPivotTable=(数据透视表)xlWorkSheetPivot.PivotTables().Add(数据透视缓存:oPivotCache,表目的地:last,表名:pivot.title);
oPivotTable.SortusingCustomList=false;
foreach(pivot.filters中的var过滤器){
数据透视字段oPivotFieldrow1=(数据透视字段)oPivotTable.PivotFields(filter.displayName);
oPivotFieldrow1.EnableMultiplePageItems=true;
oPivotFieldrow1.Orientation=XlPivotFieldOrientation.xlPageField;
oPivotFieldrow1.Name=filter.displayName;
如果(!String.IsNullOrEmpty(filter.value)){
oPivotFieldrow1.CurrentPage=filter.value;
}
}
foreach(pivot.rows中的变量行){
数据透视字段oPivotFieldrow1=(数据透视字段)oPivotTable.PivotFields(row.displayName);
oPivotFieldrow1.Orientation=XlPivotFieldOrientation.xlRowField;
oPivotFieldrow1.LayoutCompactRow=真;
oPivotFieldrow1.LayoutForm=XlLayoutFormType.xlOutline;
oPivotFieldrow1.Name=行.displayName;
}
foreach(pivot.columns中的var列){
数据透视字段oPivotFieldrow1=(数据透视字段)oPivotTable.PivotFields(column.displayName);
oPivotFieldrow1.Orientation=XlPivotFieldOrientation.xlColumnField;
oPivotFieldrow1.LayoutCompactRow=真;
oPivotFieldrow1.LayoutForm=XlLayoutFormType.xlOutline;
oPivotFieldrow1.Name=column.displayName;
}
var functionToOrder=“”;
foreach(pivot.values中的var值){
数据透视字段=(数据透视字段)oPivotTable.PivotFields(value.displayName);
field.Orientation=XlPivotFieldOrientation.xlDataField;
field.NumberFormat=“0.00”;
if(value.function!=null)
field.Function=GetEnumExcel(value.Function.name);
field.Caption=System.Text.RegularExpressions.Regex.Replace(field.Caption,@“[\d-]”,string.Empty);
field.Name=System.Text.RegularExpressions.Regex.Replace(field.Name,@“[\d-]”,string.Empty);
functionToOrder=field.Name;
}
如果(pivot.pivotType==“图表”){
ChartObjects xlCharts=(ChartObjects)xlWorkSheetPivot.ChartObjects(Type.Missing);
ChartObject myChart=(ChartObject)xlCharts.Add(oPivotTable.TableRange2.Left+350,last.Top,400200);
Chart chartPage=myChart.Chart;
chartPage.SetSourceData(oPivotTable.TableRange2,错误值);
chartPage.ChartType=(XlChartType)pivot.ChartType.id;
}
如果(pivot.values.Count>1){
oPivotTable.DataPivotField.Orientation=XlPivotFieldOrientation.xlColumnField;
}
//按字段排序
if(pivot.fieldToOrder!=null&&pivot.orderType!=0&(!string.IsNullOrEmpty(pivot.fieldToOrder.displayName)| pivot.fieldToOrder.function!=null)){
PivotField PivotField=oPivotTable.PivotFields(pivot.fieldToOrder.displayName);
var fieldToOrder=pivot.fieldToOrder.function==null?pivot.fieldToOrder.displayName:pivot.fieldToOrder.function.name+“+pivot.fieldToOrder.displayName;
运行(“UseOrderFunction”,sheet.tabHeading,pivot.title,pivot.rows.FirstOrDefault().displayName,pivot.orderType,fieldToOrder);
}
oPivotTable.RowAxisLayout(XlLayoutRowType.xlTableRow);
如果(pivot.topCount.HasValue&&pivot.topCount>0){
var fieldToUseTop=pivot.fieldToOrder.function==null?functionToOrder:pivot.fieldToOrder.function.name+“of”+pivot.fieldToOrder.displayName;
xlApp.Run(“UseTopFunction”、sheet.tabHeading、pivot.title、pivot.rows.FirstOrDefault().displayName、pivot.topCount、pivot.orderType、fieldtosetop);
}
}
}
我认为以下方法可行:

if(pivot.pivotType==“图表”){
ChartObjects xlCharts=(ChartObjects)xlWorkSheetPivot.ChartObjects(Type.Missing);
ChartObject myChart=(ChartObject)xlCharts.Add(oPivotTable.TableRange2.Left+350,last.Top,400200);
烧焦