Доступ к диаграмме PowerPoint в С#

У меня проблема в проекте С#. Фактически, я создал надстройку PowerPoint, и я хочу создавать диаграммы на слайдах.

Я создал слайд с помощью:

using PowerPoint = Microsoft.Office.Interop.PowerPoint;
using Microsoft.Office.Interop.Graph;

Microsoft.Office.Interop.Graph.Chart objChart;
objChart = (Microsoft.Office.Interop.Graph.Chart)objShape.OLEFormat.Object;`

Диаграмма создается на слайде, но я не могу получить доступ к данным для обновления или вставки.

Я попытался использовать Datasheet, как показано ниже:

//DataSheet test = objChart.Application.DataSheet;
//test.Cells.Clear()

Это удалило данные диаграммы, но я не мог понять, как впоследствии вставлять значения в данные диаграммы.

Ответ 1

Хорошо, поэтому для начала убедитесь, что вы включили следующие ссылки:

  • Из библиотеки .Net:
    • Microsoft.Office.Interop.Graph
    • Microsoft.Office.Interop.Powerpoint
  • В библиотеке COM:
    • Библиотека объектов Microsoft Office XX (где XX - ваша организация, наиболее широко используемая версия Office [действительно не имеет значения, если вы включили ее в свой пакет])

Добавьте это в свой раздел объявлений:

using PowerPoint = Microsoft.Office.Interop.PowerPoint;
using Graph = Microsoft.Office.Interop.Graph;
using Core = Microsoft.Office.Core;

Затем попробуйте этот фрагмент:

PowerPoint.Application app = new PowerPoint.Application();
app.Visible = Core.MsoTriState.msoTrue; // Sure, let watch the magic as it happens.

PowerPoint.Presentation pres = app.Presentations.Add();
PowerPoint._Slide objSlide = pres.Slides.Add(1, PowerPoint.PpSlideLayout.ppLayoutTitleOnly);

PowerPoint.TextRange textRange = objSlide.Shapes[1].TextFrame.TextRange;
textRange.Text = "My Chart";
textRange.Font.Name = "Comic Sans MS";  // Oh yeah I did
textRange.Font.Size = 24;
Graph.Chart objChart = (Graph.Chart)objSlide.Shapes.AddOLEObject(150, 150, 480, 320,
    "MSGraph.Chart.8", "", Core.MsoTriState.msoFalse, "", 0, "", 
    Core.MsoTriState.msoFalse).OLEFormat.Object;

objChart.ChartType = Graph.XlChartType.xl3DPie;
objChart.Legend.Position = Graph.XlLegendPosition.xlLegendPositionBottom;
objChart.HasTitle = true;
objChart.ChartTitle.Text = "Sales for Black Programming & Assoc.";  // I'm a regular comedian.

Должен работать как чемпион. Надеюсь, это поможет.

Ответ 2

Вы также можете использовать

PowerPoint.Chart

Он доступен, если вы работаете с Office 10 или выше.

Вот код

using PowerPoint = Microsoft.Office.Interop.PowerPoint;
using Excel = Microsoft.Office.Interop.Excel;
using Office = Microsoft.Office.Core;

затем объявите этот объект вне вашей функции

PowerPoint.Slide pSlide = null;
PowerPoint.Shape pShape = null;
PowerPoint.Chart pChart = null;

В определении функции

pSlide = this.Application.ActivePresentation.Slides[1];
pShape = slide.Shapes.AddChart(Office.XlChartType.xlColumnStacked, 200, 200, 300, 300);//These values tell where the chart will be positioned
pChart = pShape.Chart;

Теперь, чтобы получить доступ к данным диаграммы, вам нужно создать книгу Excel и рабочий лист.

PowerPoint.ChartData pChartData = pChart.ChartData;
Excel.Workbook eWorkbook = (Excel.Workbook)pChartData.Workbook;
Excel.Worksheet eWorksheet = (Excel.Worksheet)eWorkbook.Worksheets[1];

Теперь вы можете получить доступ к данным диаграммы с помощью

(Excel.Range)eWorksheet.Cells.get_Range("A1", missing).get_Value();

Ответ 3

Пробовал ли вы использовать OpenXML SDK, я использовал его для создания сложных листов Excel и документов Word, я считаю, что он поддерживает Powerpoint. См. http://www.microsoft.com/en-us/download/details.aspx?id=5124.