Как использовать Interop.Excel для создания многосводной диаграммы на C#?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как использовать Interop.Excel для создания многосводной диаграммы на C#?

Сообщение Anonymous »

Код: Выделить всё

foreach (var item in itemlist.Items)
{
if (item.PivotChartConfig != null)
{
var describedPivotChart = item;
var chartConfig = describedPivotChart.PivotChartConfig;

Excel.PivotCache pivotCache = workbook.PivotCaches().Create(Excel.XlPivotTableSourceType.xlDatabase, dataRange);

Excel.Range pivotTableLocation;

if (lastInsertedRange != null)
{
pivotTableLocation = pivotSheet.Cells[lastInsertedRange.Row + lastInsertedRange.Rows.Count + 1, 1];
}
else
{
pivotTableLocation = pivotSheet.Cells[1, 1];
}

Excel.PivotTable pivotTable = pivotCache.CreatePivotTable(
TableDestination: pivotTableLocation,
TableName: "PivotTable" + Guid.NewGuid().ToString());

ConfigurePivotTableFields(pivotTable, chartConfig.PivotTableConfig.Fields);
Excel.Range pivotTableRange = pivotTable.TableRange2;

double chartLeft = pivotTableRange.Left + pivotTableRange.Width + 10;
double chartTop = pivotTableRange.Top;
double chartWidth = 500;
double chartHeight = 300;

Excel.ChartObjects chartObjects = (Excel.ChartObjects)pivotSheet.ChartObjects();
Excel.ChartObject chartObject = chartObjects.Add(
chartLeft,
chartTop,
chartWidth,
chartHeight);

Excel.Chart chart = chartObject.Chart;
chart.SetSourceData(pivotTable.TableRange2);

chart.ChartType = chartConfig.ChartType;
chart.HasTitle = true;
chart.ChartTitle.Text = chartConfig.ChartTitle;
lastInsertedRange = pivotTable.TableRange2;

if (!string.IsNullOrEmpty(describedPivotChart.Description))
{
pivotTableRange = pivotTable.TableRange2;
int descriptionRow = pivotTableRange.Row + pivotTableRange.Rows.Count;
int descriptionColumn = pivotTableRange.Column;

Excel.Range descriptionCell = pivotSheet.Cells[descriptionRow, descriptionColumn];
descriptionCell.Value2 = describedPivotChart.Description;

descriptionCell.Font.Bold = true;
descriptionCell.Font.Italic = true;
descriptionCell.EntireRow.AutoFit();
lastInsertedRange = pivotSheet.Cells[descriptionRow, descriptionColumn];
}
}
else
{
if (lastInsertedRange == null)
{
lastInsertedRange = pivotSheet.Cells[1, 1];
}

int stringItemRow = lastInsertedRange.Row + lastInsertedRange.Rows.Count + (lastInsertedRange == pivotSheet.Cells[1, 1] ? 0 : 1);
int stringItemColumn = lastInsertedRange.Column;

Excel.Range stringItemCell = pivotSheet.Cells[stringItemRow, stringItemColumn];
stringItemCell.Value2 = item.Description;

stringItemCell.Font.Bold = true;
stringItemCell.Font.Size = 12;
stringItemCell.EntireRow.AutoFit();

lastInsertedRange = pivotSheet.Cells[stringItemRow, stringItemColumn];
}
}
Если создается только одна сводная диаграмма, мой код работает нормально, но если создается несколько сводных диаграмм, возникает ошибка.

Необработанное исключение. System.Runtime.InteropServices.COMException (0x80004005): при вызове COM-компонента была возвращена ошибка HRESULT E_FAIL.

Ошибка возникает в этой строке код:

Код: Выделить всё

chart.SetSourceData(pivotTable.TableRange2);
Я просмотрел документацию по взаимодействию Microsoft, но не смог найти подходящего решения.

Подробнее здесь: https://stackoverflow.com/questions/791 ... chart-in-c
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как использовать interop.excel для создания сводной диаграммы Muti на C#
    Anonymous » » в форуме C#
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Office.Interop.Excel и Office.Interop.Outlook Развертывание по щелчку мыши и Windows 11
    Anonymous » » в форуме C#
    0 Ответы
    40 Просмотры
    Последнее сообщение Anonymous
  • Разница между Interop.Excel и Tools.Excel?
    Anonymous » » в форуме C#
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Разница между Interop.Excel и Tools.Excel?
    Anonymous » » в форуме C#
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Как получить имя существующего диапазона от рабочего листа Excel с помощью C# Excel.interop?
    Anonymous » » в форуме C#
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»