У меня проблема с попыткой встроить диаграммы Excel в PowerPoint через API-интерфейс с использованием C#. Мне нужно заставить это работать для Office2003.Экспорт диаграммы Excel в экспорт PowerPoint
Процесс, за которым я следую, заключается в том, что я создаю PowerPoint из шаблона с использованием API-интерфейсов interop. Затем я вставляю новый слайд для каждого графика, а на эти слайды добавляю объект OLE Excel.Chart. Пока все хорошо. Затем я иду в эту книгу, изменяю данные и использую chartWizard для обновления диаграммы на первом листе. Наконец, я закрываю книгу 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;
Вы когда-нибудь получали эту работу? – DannyT 2011-02-17 15:27:10