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

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

12 Ноябрь 2019, 14:51 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Часто задаваемые вопросы по LibreOffice и Apache OpenOffice.org
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1 2 »   Вниз
  Печать  
Автор Тема: И снова обновление внешних связей макросом  (Прочитано 716 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Konstanta
Участник
**
Offline Offline

Сообщений: 40


« Стартовое сообщение: 22 Октябрь 2019, 11:36 »

Приветствую всех!
Да, уже не раз поднималась тема обновления внешних связей, но судя по постам в последний раз в 16 году.
Вдруг, что изменилось?

В "великом и ужасном" Excell  при наличии нескольких связей достаточно обновить всё.
Однако в LO столкнулся с проблемой:
Обновление всех связей происходит только при открытии файла.
Потом можно обновить только через "Правка=>Связи=>Выбрать в окне конкретную связь, обновить.

Исходная обстановка следующая:
1. Есть файл, в котором на нескольких листах прописаны связи к внешним файлам.
2. Внешние файлы периодически обновляются (заменяются новыми, которые выгружены из программы в формате xls) и в них конечно не прописаны именованные диапазоны.
При этом с ручным обновлением всё работает нормально.
3. Периодически возникает необходимость находясь в открытом файле обновить все данные (поскольку могли измениться исходные).
Вопрос знатокам: как эту процедуру повесить на один макрос, чтобы он обновил в открытом итоговом файле все связи?
Файл приложить не могу. Пути очень специфические (работаем в локальной сети).
Записан
mikekaganski
Мастер
*****
Offline Offline

Пол: Мужской
Расположение: Хабаровск -> Москва
Сообщений: 1 542


« Ответ #1: 22 Октябрь 2019, 11:44 »

Потом можно обновить только через "Правка=>Связи=>Выбрать в окне конкретную связь, обновить.
В этом окне можно выделить несколько связей (Shift/Ctrl) или все (Ctrl+A).
Записан

С уважением,
Михаил Каганский
economist
Форумчанин
***
Offline Offline

Сообщений: 1 029


« Ответ #2: 22 Октябрь 2019, 11:57 »

Справедливости ради скажу что в "великом и ужасном" Excel 2007, 2010, 2013 - формулы вида СУММПРОИЗВ, СУММЕСЛИМН, ДВССЫЛ, ссылающиеся на другие XLSX-файлы  - так же требуют их открытия для обновления связей. Без него они показывают #ЗНАЧ (т.е. даже не предвычисленные значения).
Записан

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

Сообщений: 40


« Ответ #3: 22 Октябрь 2019, 14:30 »

ч
Очень странно!
У меня всё стабильно обновляет в закрытых файлах.
Даже более того: специально в нужную папку создаю новые файлы с новыми данными и всё работает
Записан
economist
Форумчанин
***
Offline Offline

Сообщений: 1 029


« Ответ #4: 22 Октябрь 2019, 15:08 »

Прямые (простые) ссылки - да, Excel обновляет. С вышеназванными формулами - нет.
Я очень активно использую ссылки. У меня из некоторых XLS есть связи-ссылки на 40+ других книг, очень утомляет все их открывать. Кроме как автоматизировать макросом - ничего лучше не придумал. Каскадное обновление ссылок в книгах - это сложная программистская задача, и понять их, программистов из MSO и LO - тоже можно.
Записан

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

Сообщений: 40


« Ответ #5: 22 Октябрь 2019, 15:41 »

Да, Вы правы.
Тем более что я уже после публикации своего ответа понял что Вы писали не о Либре офисе а об Excel ...
В LO связи с закрытыми файлами нормально работает у меня.
Не припомню, чтобы я подобные вещи в Excel делал.
Но данная тема пока ещё актуальна.
Выбирать в окне несколько ссылок для обновления конечно можно и при отсутствии возможности макроса придётся так и делать.
Записан
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 2 816


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #6: 22 Октябрь 2019, 16:37 »

Макрос для обновления всех ссылок на внешние данные:
Код:
Sub Main Dim link
For Each link In ThisComponent.AreaLinks
link.refresh()
Next
End Sub
Записан

Konstanta
Участник
**
Offline Offline

Сообщений: 40


« Ответ #7: 22 Октябрь 2019, 17:53 »

Спасибо!
Попробую!
Записан
Konstanta
Участник
**
Offline Offline

Сообщений: 40


« Ответ #8: 24 Октябрь 2019, 08:20 »

Код не работает.
То есть не происходит вообще ничего
Записан
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 2 816


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #9: 24 Октябрь 2019, 08:26 »

Выложите здесь документ со связями, данные можете удалить.
Записан

Konstanta
Участник
**
Offline Offline

Сообщений: 40


« Ответ #10: 24 Октябрь 2019, 08:41 »

Связи уходят по пути на сетевой диск и там лежит 6 файлов.
как с этим быть?
Записан
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 2 816


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #11: 24 Октябрь 2019, 08:53 »

Где лежат файлы не имеет значения, если всё правильно, связи должны обновиться (если нет изменений в источнике, будет казаться, что "ничего не происходит"), если что-то неправильно, должно ругаться.
Записан

Konstanta
Участник
**
Offline Offline

Сообщений: 40


« Ответ #12: 24 Октябрь 2019, 09:02 »

Файл выложил
Я изменял содержимое исходных файлов
После выполнения макроса данные в общем файле не поменялись
При этом вручную они обновились, значит сама связь работает.
Возможно я криво вставил код?

И ещё (извиняюсь не по теме вопрос, но если будете файл открывать то это важно)
я заметил странность:
до недавнего времени файл открывался довольно быстро. При этом связи все были подключены.
И вдруг файл стал очень долго открываться, временами даже подвешивает комп.

* Форма связи.ods (1261.01 Кб - загружено 4 раз.)
« Последнее редактирование: 24 Октябрь 2019, 09:37 от Konstanta » Записан
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 2 816


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #13: 24 Октябрь 2019, 10:23 »

У вас много формульных ссылок на внешние файлы, к тому же вставленных формулой массива на большой диапазон, будет тормозить при достаточно большом объёме данных.


Можно обновить эти ссылки через диспетчер:
Код:
Sub main
Dim doc, disp
doc = ThisComponent.CurrentController.Frame
disp = createUnoService("com.sun.star.frame.DispatchHelper")
disp.executeDispatch(doc, ".uno:UpdateTableLinks", "", 0, Array())
End Sub
Записан

Konstanta
Участник
**
Offline Offline

Сообщений: 40


« Ответ #14: 24 Октябрь 2019, 11:14 »

ок попробую
Спасибо!
а формулы в готовом файле я оторву от ссылок и в значения превращу.
возможно побыстрее будет
Записан
Страниц: 1 2 »   Вверх
  Печать  
 
Перейти в:  

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