Доступ к диаграмме PowerPoint в C # - PullRequest
10 голосов
/ 09 июня 2010

У меня проблема в проекте C #. Фактически я создал надстройку 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 test = objChart.Application.DataSheet;
//test.Cells.Clear()

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

Ответы [ 4 ]

2 голосов
/ 20 июля 2012

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

  • Из библиотеки .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's 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 голосов
/ 16 апреля 2014

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

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();
0 голосов
/ 21 февраля 2016

Просто чтобы рассмотреть ... прежде чем ссылаться на свойство WorkBook существующей диаграммы, вызовите метод ChartData.Activate

https://msdn.microsoft.com/en-us/library/microsoft.office.interop.powerpoint.chartdata.activate%28v=office.14%29.aspx

0 голосов
/ 14 июня 2012

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

...