Экспорт таблицы Excel в экспорт PowerPoint - PullRequest
1 голос
/ 03 декабря 2010

У меня проблема с попыткой встроить диаграммы Excel в PowerPoint через Interop API с использованием C #.Мне нужно, чтобы это работало для Office2003.

Процесс, которым я следую, заключается в том, что я создаю PowerPoint из шаблона, используя API взаимодействия.Затем я вставляю новый слайд для каждой диаграммы, и на этих слайдах я добавляю 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;

1 Ответ

1 голос
/ 17 августа 2011

Мне показалось, что это работает при обновлении существующего графика:

Chart.Application.Update();

Мне было бы интересно посмотреть, сработает ли это для вас при вставке нового графика.

...