У меня проблема с попыткой встроить диаграммы Excel в PowerPoint через Interop API с использованием C #. Мне нужно, чтобы это работало в Office2003.
Процесс, которым я следую, заключается в том, что я создаю PowerPoint из шаблона с помощью API взаимодействия. Затем я вставляю новый слайд для каждой диаграммы и на эти слайды добавляю объект OLE Excel.Chart. Пока все хорошо. Затем я захожу в эту книгу, меняю данные и использую мастер диаграмм для обновления диаграммы на первом листе. Наконец, я закрываю книгу Excel.
Проблема в том, что диаграмма не отображается правильно в созданных слайдах PowerPoint. Диаграмма адаптирована с измененными данными, но все действия на самой диаграмме, такие как изменение заголовка, диапазона данных, типа диаграммы и т. Д., Не отображаются.
Становится страннее. Когда в PowerPoint я щелкаю (неправильно отображенную) сгенерированную диаграмму и выбираю «открыть» или «изменить», диаграмма немедленно обновится до правильных настроек. Когда я закрываю диаграмму и возвращаюсь в PowerPoint, диаграмма отображается правильно.
Я потратил часы и часы, чтобы понять, что происходит, но почему-то ничего не работает. Я пытался позвонить:
- PowerPoint.Application.ActivePresenation.UpdateLinks () после создания всех диаграмм (это проблема OLE?).
- Chart.Refresh ();
- Workbook.RefreshAll ();
Может кто-нибудь подскажет, что нужно делать? Я отправлю свой код, который вставляет диаграммы ниже.
//Add the Workbook
Excel.Workbook workbook =
(Excel.Workbook)slide.Shapes.AddOLEObject(basePoint.X, basePoint.Y,
chartSize.Width, chartSize.Height,
MsoTriState.msoFalse).OLEFormat.Object;
//update the worksheet with data
Excel.Worksheet datasheet =
(Excel.Worksheet)workbook.Worksheets["Sheet1"];
datasheet.Cells.ClearContents();
//set table contents
//<<SNIP code that fills data sheet with contents from our custom
dataTable object>>
//fetch chart
Excel.Chart chart = (Excel.Chart)workbook.Charts["Chart1"];
Excel.Range range = datasheet.get_Range(datasheet.Cells[1, 1],
datasheet.Cells[dataTable.RowCount + 1, dataTable.ColumnCount + 1]);
chart.ChartWizard(range, Excel.XlChartType.xlBarStacked, Type.Missing,
Excel.XlRowCol.xlRows, 1, 1, true, dataTable.ChartTitle, "", "", "");
//release objects
datasheet = null;
chart = null;
range = null;
workbook.Close(false, Type.Missing, Type.Missing);
workbook = null;