Автообновление графиков в презентации

Автор MG, 20 сентября 2021, 13:31

0 Пользователи и 1 гость просматривают эту тему.

MG

Привет! Есть шаблон презентации с большим кол-вом графиков. Данные от презентации к презентации меняются. Есть ли способ автоматически обновлять графики на основе таблиц, т.е. не руками?

economist

Способ 1.
В шаблоне Impress - Таблица данных - меняем циферки, видим новые графики

Способ 2.
В Calc рисуем диаграммы по таблицам, экспортируем их в JPG/PNG макросом/расширением
В Impress вставлены связи с этими файлами, при открытии все обновляется само


PS Почему-то DDE тут не работает, а OLE будет  громоздко.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

kompilainenn

Цитата: economist от 20 сентября 2021, 15:59Почему-то DDE тут не работает
Сломано с 7.0

Цитата: economist от 20 сентября 2021, 15:59OLE будет  громоздко.
Возможно человеку вообще нужно что-то странное
Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут

economist

#3
По шагам (Способ 2 из #1):

1) Рисуем в книге Calc графики по табличкам, разбросанным на разных листах с говорящими именами. В идеале один лист - один график, но можно и несколько, они будут экспортированы с номерами, как ИмяЛиста_1.png итд.

Calc силен тем, что данные он может брать откуда угодно - из web, txt-файлов, excel-файлов, любых баз данных по Ctrl+Shift+F4 итд. И он эти данные при открытии обновляет, а при закрытии - сохраняет макросом в png-графику, огромным плюсом которой является прозрачный фон (альфа-канал). То есть такие графики могут вылетать анимацией из кромешной тьмы аки титры в звездных войнах.

2) В Calc жмем Alt+F11 - Создать (модуль) и вставляем в свободное место такой макрос (скорее всего чей-то, не помню чей и откуда, слегка дописал):

Sub ExportGraphs
   oDoc = ThisComponent
   Dim oSheet As Object
   Dim eSheets As Object
   Dim args(1) as new com.sun.star.beans.PropertyValue
   gef = CreateUnoService("com.sun.star.drawing.GraphicExportFilter")
   eSheets = oDoc.getSheets.createEnumeration()
   While eSheets.hasMoreElements
       oSheet = eSheets.nextElement()
       oDrawPage = oSheet.getDrawPage()
       iLimit = oDrawPage.getCount() -1
       For index = 0 to iLimit
           oDraw = oDrawPage.getByIndex(index)
           args(0).Name = "URL"
           args(0).Value = "file:///D:/ГрафикиПрезентаций/" & oSheet.getName & "_" & index+1 & ".png"
           args(1).Name = "MediaType"
           args(1).Value = "image/png"
           gef.setSourceDocument(oDraw)
           gef.filter(args)
       Next
   Wend
msgbox("Все " & index & " рисунка из книги Calc экспортированы" & chr(10) & "в папку D:/ГрафикиПрезентаций", 36)
End Sub


3) Закроем окно Basic

4) в Calc назначим автосрабатывание этого макроса на событие закрытия книги, чтобы не забывать сделать экспорт:  

Сервис - Настройка - События - Документ будет закрыт - Макрос - выбрать слева данную книгу, раскрыть Модуль, выбрать макрос ExportGraphs

5) Всё, можно пользоваться. При закрытии Calc выскочит окошко об экспорте. Графики будут в папке D:/ГрафикиПрезентаций/ - она создается сама, но можно указать в тексте макроса (в 2-х местах) любое другое место, в т.ч. облачную папку Я.Диска итп. Тогда презентация обновится у любого, кто имеет доступ к диску (удобно при работе в команде).

6) В презентации (при верстке) действуете как обычно: Вставка - Изображение - Связь - Открыть. Преза при открытии обновляется сама. То есть даже ваши клиенты будут всегда видеть "свежую" презентацию, если вы им дали доступ по ссылке (но тогда и вы при верстке должны вставлять картинки по ссылке, а не с D:/ГрафикиПрезентаций/).

Если что непонятно - см. вложенный примерчик. Макросы нужно разрешить, чтобы они выполнялись (полоска вверху, но её может и не быть, если макросы разрешены навечно).
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

eeigor

#4
@economist, классный пример. Делал что-то подобное в Excel для школы, где после экспорта диаграмм презентация создавалась автоматически (без связей) – для администрации, а сами квартильные диаграммы – с успеваемостью каждого ученика на фоне класса – рассылались автоматически через MS Outlook всем родителям. Работает уже много лет. Вот теперь вижу, что и здесь такое возможно.
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community