2010-12-03 15 views
1

У меня проблема с попыткой встроить диаграммы 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; 
+0

Вы когда-нибудь получали эту работу? – DannyT 2011-02-17 15:27:10

ответ

1

Это, казалось, работал для меня при обновлении существующего графика:

Chart.Application.Update(); 

Я бы интересно посмотреть, если это работает для вас, вставляя новую диаграмму.