Макрос перезагрузки файла

Автор Aspid, 1 ноября 2017, 08:28

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

Aspid

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

economist

#1
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


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

Aspid

#2
Цитата: economist от  1 ноября 2017, 09:01
1) часть данных можно обновить без переоткрытия
2) переоткрытие невозможно в некоторых файлах в некоторых режимах без "сильного" мелькания окон.

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

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

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

economist

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
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...