Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

23 Июль 2018, 04:36 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Часто задаваемые вопросы по LibreOffice и Apache OpenOffice.org
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Макрос перезагрузки файла  (Прочитано 788 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Aspid
Новичок
*
Offline Offline

Сообщений: 39


« Стартовое сообщение: 1 Ноябрь 2017, 08:28 »

В основной файл подтягиваются данные с других файлов, подскажите код макроса для перезагрузки файла,чтобы сделать отдельную кнопку и не заходить в меню.
Вроде простенький код, но совсем не секу в языке программирования.
Спасибо.
Записан
economist
Ветеран
*****
Offline Offline

Сообщений: 901


« Ответ #1: 1 Ноябрь 2017, 09:01 »

1) часть данных можно обновить без переоткрытия
2) переоткрытие невозможно в некоторых файлах в некоторых режимах без "сильного" мелькания окон.

Формат файла?

Навскидку:
Код:
Sub refreshAllSheetLinks()
' для Calc ??? в Impress не работает!
oEnum = thisComponent.ExternalDocLinks.createEnumeration
while oEnum.hasMoreElements
oLink = oEnum.NextElement
oLink.refresh
wend
End Sub


Sub RealoadFileForUpdateRefreshLinkedImages
' Сохраняет и перезагружает Writer/Calc/Impress/Draw для
' обновления внешних ссылок на изображения
dim document   as object
dim dispatcher as object
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:Save", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:Reload", "", 0, Array())
End sub

Макрос можно назначить на таймер, на внутренне событие, на внешнее - например на появление файл в папке итп.
« Последнее редактирование: 1 Ноябрь 2017, 09:05 от economist » Записан

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

Сообщений: 39


« Ответ #2: 2 Ноябрь 2017, 10:22 »

1) часть данных можно обновить без переоткрытия
2) переоткрытие невозможно в некоторых файлах в некоторых режимах без "сильного" мелькания окон.

Формат файла?

Макрос можно назначить на таймер, на внутренне событие, на внешнее - например на появление файл в папке итп.

К сожалению не работает так.
Данные подтягиваются из файла Анализ продаж. Это для примера.

* 11.ods (27.41 Кб - загружено 5 раз.)
* Анализ продаж.xls (7 Кб - загружено 5 раз.)
« Последнее редактирование: 2 Ноябрь 2017, 10:24 от Aspid » Записан
economist
Ветеран
*****
Offline Offline

Сообщений: 901


« Ответ #3: 21 Ноябрь 2017, 09:49 »

1) файл Calc при открытии сам спросит обновлять ли ссылки/связи на внешние файлы, коими могут быть ODS/XLS/XLSM/TXT/CSV/TSV. Или автоообновляет, или только по требованию (Сервис-Параметры-Calc-Общие-Обновление...) И это пожалуй единственное предсказуемое поведение со ссылками на внешние данные. То есть переоткрывать.

2) мой макрос нужен для самых тяжелых случаев, когда обновление не работает по другому.

3) казалось бы вот оно - универсальный макрос, который должен обновлять всё (все три "простых", без СУБД, вида ссылок), но нет. К сожалению, OpenOffice|LibreOffice Calc, в отличие от MS Excel, в этом плане крайне крив. То что должно работать по документации или в чужих примерах - работает не всегда. Также помните про OpenOffice и LibreOffice - это разные планеты. Но однозначно любая проблема - решаема.

Код:
Sub refreshAllSheetLinks()
oEnum = thisComponent.AreaLinks.createEnumeration
while oEnum.hasMoreElements
   oLink = oEnum.NextElement
   oLink.refresh ' with/without () - poh
wend
oEnum = thisComponent.SheetLinks.createEnumeration
while oEnum.hasMoreElements
   oLink = oEnum.NextElement
   oLink.refresh
wend
oEnum = thisComponent.DDELinks.createEnumeration
while oEnum.hasMoreElements
   oLink = oEnum.NextElement
   oLink.refresh
wend
End Sub

Вот 5 "сравнительно честных способов" обновления ссылок, весьма познавательно:
https://forum.openoffice.org/en/forum/viewtopic.php?f=75&t=3294
Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!