Доступ к диаграмме 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.
Ответ 4
Просто чтобы рассмотреть... прежде чем ссылаться на свойство WorkBook существующего графика, вызовите метод ChartData.Activate
https://msdn.microsoft.com/en-us/library/microsoft.office.interop.powerpoint.chartdata.activate%28v=office.14%29.aspx