Как установитьSourceData на диаграмме. Получение ошибки: «HRESULT E_FAIL был возвращен после вызова COM-компонента» - PullRequest
1 голос
/ 29 марта 2019

Я пытаюсь создать две диаграммы на сводной таблице. Когда я создаю первый, все в порядке, но когда я пытаюсь создать второй, я получаю следующую ошибку: «HRESULT E_FAIL был возвращен из вызова к компоненту COM»

chartPage.SetSourceData(oPivotTable.TableRange2, misValue);

Следуйте приведенному ниже коду, чтобы вы, ребята, поняли, что я делаю

Workbook xlWorkBook = xlApp.Workbooks.Add (rootFile + "Template.xlsm");
Worksheet xlWorkSheet = (Worksheet) xlWorkBook.Worksheets.get_Item (1);

if (!Directory.Exists (rootFile)) {
    Directory.CreateDirectory (rootFile);
}

string fileName = rootFile + report.Name + ".xlsm";

xlWorkSheet.Name = "Invoices";

List<Sheet> sheets = JsonConvert.DeserializeObject<List<Sheet>> (report.Definition);

var startCell = (Range) xlWorkSheet.Cells[1, 1];
var endCell = (Range) xlWorkSheet.Cells[invoices.Count () + creditNotes.Count (), properties.Count () + 1];
var writeRange = xlWorkSheet.Range[startCell, endCell];

writeRange.Value = dataSource;

int lastROW = xlWorkSheet.Cells[xlWorkSheet.Rows.Count, 1].End (XlDirection.xlUp).Row;
int LastCol = xlWorkSheet.Cells[1, xlWorkSheet.Columns.Count].End (XlDirection.xlToLeft).Column;
Range pRange = xlWorkSheet.Cells[1, 1].Resize (lastROW, LastCol);

pRange.Columns.AutoFit ();

foreach (var sheet in sheets) {
    PivotCache oPivotCache = (PivotCache) xlWorkBook.PivotCaches ().Add (XlPivotTableSourceType.xlDatabase, pRange);
    xlWorkBook.ShowPivotChartActiveFields = true;

    Worksheet xlWorkSheetPivot = (Worksheet) xlWorkBook.Worksheets.Add (misValue);
    xlWorkSheetPivot.Name = sheet.tabHeading;
    xlWorkSheetPivot.Activate ();

    foreach (Pivot pivot in sheet.pivots) {
        Range last = GetRange (xlWorkSheetPivot);

        PivotTable oPivotTable = (PivotTable) xlWorkSheetPivot.PivotTables ().Add (PivotCache: oPivotCache, TableDestination: last, TableName: pivot.title);
        oPivotTable.SortUsingCustomLists = false;

        foreach (var filter in pivot.filters) {
            PivotField oPivotFieldrow1 = (PivotField) oPivotTable.PivotFields (filter.displayName);
            oPivotFieldrow1.EnableMultiplePageItems = true;

            oPivotFieldrow1.Orientation = XlPivotFieldOrientation.xlPageField;
            oPivotFieldrow1.Name = filter.displayName;

            if (!String.IsNullOrEmpty (filter.value)) {
                oPivotFieldrow1.CurrentPage = filter.value;
            }
        }

        foreach (var row in pivot.rows) {
            PivotField oPivotFieldrow1 = (PivotField) oPivotTable.PivotFields (row.displayName);
            oPivotFieldrow1.Orientation = XlPivotFieldOrientation.xlRowField;
            oPivotFieldrow1.LayoutCompactRow = true;
            oPivotFieldrow1.LayoutForm = XlLayoutFormType.xlOutline;
            oPivotFieldrow1.Name = row.displayName;
        }

        foreach (var column in pivot.columns) {
            PivotField oPivotFieldrow1 = (PivotField) oPivotTable.PivotFields (column.displayName);
            oPivotFieldrow1.Orientation = XlPivotFieldOrientation.xlColumnField;
            oPivotFieldrow1.LayoutCompactRow = true;
            oPivotFieldrow1.LayoutForm = XlLayoutFormType.xlOutline;
            oPivotFieldrow1.Name = column.displayName;
        }

        var functionToOrder = "";

        foreach (var value in pivot.values) {
            PivotField field = (PivotField) 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;
        }

        if (pivot.pivotType == "Chart") {
            ChartObjects xlCharts = (ChartObjects) xlWorkSheetPivot.ChartObjects (Type.Missing);

            ChartObject myChart = (ChartObject) xlCharts.Add (oPivotTable.TableRange2.Left + 350, last.Top, 400, 200);

            Chart chartPage = myChart.Chart;
            chartPage.SetSourceData (oPivotTable.TableRange2, misValue);
            chartPage.ChartType = (XlChartType) pivot.chartType.id;
        }

        if (pivot.values.Count > 1) {
            oPivotTable.DataPivotField.Orientation = XlPivotFieldOrientation.xlColumnField;
        }

        //Order By Fields
        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 + " of " + pivot.fieldToOrder.displayName;

            xlApp.Run ("UseOrderFunction", sheet.tabHeading, pivot.title, pivot.rows.FirstOrDefault ().displayName, pivot.orderType, fieldToOrder);
        }

        oPivotTable.RowAxisLayout (XlLayoutRowType.xlTabularRow);

        if (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, fieldToUseTop);
        }
    }
}

Я ожидаю, что это работает ниже:

 if (pivot.pivotType == "Chart") {
    ChartObjects xlCharts = (ChartObjects) xlWorkSheetPivot.ChartObjects (Type.Missing);

    ChartObject myChart = (ChartObject) xlCharts.Add (oPivotTable.TableRange2.Left + 350, last.Top, 400, 200);

    Chart chartPage = myChart.Chart;
    chartPage.SetSourceData (oPivotTable.TableRange2, misValue);
    chartPage.ChartType = (XlChartType) pivot.chartType.id;
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...