Как использовать interop.excel для создания сводной диаграммы Muti на C#C#

Место общения программистов C#
Ответить
Anonymous
 Как использовать interop.excel для создания сводной диаграммы Muti на 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 ... by-c-sharp
Ответить

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

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

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

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

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