Страница 1 из 2

Экспорт данных из excell в power point

Добавлено: 18 янв 2005, 16:09
Дмитрий Д
Добрый день! Подскажите, пожалуйста, как автоматизировать экспорт данных из эксель в графики power point. презентация здоровая куча слайдов с кучей графиков. вручную вводить долго
Заранее спасибо

Добавлено: 19 янв 2005, 05:54
Naeel Maqsudov
Можно макрос написать.
Вообще все офисные приложения (и не только) абсолютно интегрированы средствами VBA!
презентация здоровая куча слайдов с кучей графиков. вручную вводить долго
Зачем же руками? А копировать?
Я правильно понимаю, что графики и диаграммы надо все пробежать, и закинуть их в новую презентацию по одной на каждый слайд?

PS
А вообще прикольно открывается XLS в PowerPoint-е! :) :)
Каждая непустая ячейка на отдельный слайд, а графические объекты нафиг.
Обалденная конвертация!

Я имею ввиду именно автоматизацию

Добавлено: 19 янв 2005, 11:02
Дмитрий Д
Подробнее опишу проблему: существует power point презентация на 300 страниц. На каждой не менее 1 графика сделанные в power point.
Новые данные в графики вставляются каждые 3 месяца. Данные я вставляю через копи пасте. Можно еще вставлять через Правка/импорт. Но это опять же необходимо делать каждый раз заново для каждого графика.
Вот именно это я и хочу автоматизировать, чтобы макрос сам импортировал указанные ранее таблички excell в графики power point.

P.S. Возможности делать графики в excell, а затем их импортировать в power point - нет. По ряду причин, в том числе и потому, что они несколько отличаются от графиков сделанных в power point

Добавлено: 19 янв 2005, 23:56
Naeel Maqsudov
Теоретически так:
Пожключить к проекту библиотеки MS Power Point и MS Graph (Меню Tools/References в VBA).

Затем создать объект PP типа PowerPoint.Application. (свойство Visible лучше после отладки держать в False)
Вызвать метод PP.Open и открыть файл с диаграммами.

Теперь обратиться к нужному слайду можно как PP.ActivePresentation.Slide(i) , а к нужному объекту PP.ActivePresentation.Slide(i).Shapes(j). Если на каждом слайде много объектов, то прийдется либо сначала написать макрос, находящий все графики и присваивающий из уникальные имена, для обращения ...Shapes("имя"); либо каждый раз производить поиск шейпа на слайде. Самый простой случай, если все слайды гарантировано имеют одинаковую разметку, тогда, например, второй шейп всегда будет на слайде диаграммой.

Найдя диаграмму надо воспольщзоваться интерфейсом класса Graph.Chart

Dim G as Graph.Chart
...

Set G = ......Sape(i)

G - это некая диаграмма. У нее есть свойства и методы, которые позволяют и точками управлять. В Справке классы библиотеки Graph все описамны!

Добавлено: 20 янв 2005, 10:36
Дмитрий Д
Честно говоря я не совсем понял, что надо сделать. А. еще точнее, совсем не понял. Если Вам не трудно, не могли бы Вы чуть подробнее написать, что необходимо сделать. К сожалению, я довольно слабо разбираюсь в VBA.
Насколько я понял для каждой диаграммы в PP необходимо написать макрос который бы переносил данные из определенной области экселевского файла в PP. А, затем общий макрос, который запускал бы все эти макросы. Если у Вас есть возможность показать пример макроса, который открывает график и вставляет в него данные из экселя, я был бы очень благодарен.

C уважением, Дмитрий

Добавлено: 21 янв 2005, 02:52
Naeel Maqsudov
Упс... Альтернативное решение:
Самое лучшее решение - это все 300 диаграмм построить в Excel.
Ну а в РР копировать уже готовые графические объекты.
Обновили данные в таблицах -> обновились диаграммы -> запускаем макрос, который создает презентацию на основе шаблона и заполняет ее диаграмммами (по одной на кадр).

Годится?
Если Вам не трудно, не могли бы Вы чуть подробнее написать
Макрос будет в книге Excel. Чтобы из Excel управлять PP-ом надо:

Dim PPApp PoverPoint.Application
Set PPApp = New PoverPoint.Application


(При этом запуститься РР, который будет не видно на экране, по этому ОБЯЗАТЕЛЬНО надо делать в конце (а также и в обработчике ошибок) PPApp = Nothig)

Далее управляем этим PP

PPApp.Visible = true ' если надо сделать его видимым

Dim Pr As PowerPoint.Presentation
Set Pr=PPApp.Presentations.Add(true)
' так добавляется новая презентация

Pr.Slides.Add(Pr.Slides.Count+1,ppLayoutChart) ' так добавляется слайд с типом разметки "Диаграмма" (Заголовок и место для диаграмммы)

Это все в макросе в книге Excel.

В справке все есть.
Можно было бы и пример набросать.... но сейчас времени нет, к сожалению.

Пробуйте. Если не получится - пишите.

Добавлено: 27 янв 2005, 09:39
Дмитрий Д
К сожалению, создавать графики в экселе, а затем их перекидывать в PP не подойдет. Дело в том, что экселевские и PP графики отличаются (с PP графиками намного удобнее работать, а также они лучше поддаются форматированию), а во вторых если экселевский график перенести в PP то при открытие графика будет открываться и эксель.
В общем такой путь не подойдет ни под каким соусом.
Я себе так представляю эту картину: есть файл эксель, в котором в каждом листе будут данные для одного графика.
Соответственно, макрос должен копировать данные на листе 1 и вставлять их в диаграмму PP, затем переходить на лист 2 экселя, копировать там данные и вставлять их в следующую диаграмму в PP и т.д. (при этом на одном листе PP может быть более одной диаграммы
Заранее спасибо.

Добавлено: 21 фев 2005, 02:48
Naeel Maqsudov
Вопрос еще актуален?

Добавлено: 22 фев 2005, 16:22
Дмитрий Д
Да!!!!!

Добавлено: 28 фев 2005, 00:33
Naeel Maqsudov
Дело в том, что экселевские и PP графики отличаются
Ясное дело. В экселе родные, а в PP обычно (если использовать стандартную разметку слайда) вставляются MS Graph. (Хотя на самом деле они суть одно и то же. :) Отличаются они только способом хранения данных.)

В экселе диаграмма ссылается на данные самого экселя, а вот в MSGraph доступиться к данным можно по ДИАГРАММА.Application.DataSheet

Код: Выделить всё

Sub qwe()
Dim Gr As Graph.Chart
  Set Gr = Application.ActivePresentation.Slides(2)._
     Shapes(2).OLEFormat.Object
  Gr.ChartTitle.Text = "Новый заголовок диаграммы"
  
  MsgBox Gr.Application.DataSheet.Range("a1").Value
  
  Set Gr = Nothing
End Sub
Этот пример выводит числовое значение соответствующее первому столбцу (первой точке) в первой серии данных.

Соответственно

Gr.Application.DataSheet.Range("a1").Value=X

Изменит высоту столбца диаграммы... или чего там нарисовано...

В хелпе все есть. Да еще и с примерами!

PS

Не забывайте в VBA делать Tools/References и добавлять в список используемых библиотек библиотеку MSGraph нужной версии, иначе Graph.Chart будет считаться неизвестным типом.