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

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

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

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

Сообщений: 23


« Стартовое сообщение: 25 Ноябрь 2018, 20:31 »

Здравствуйте.

Как посчитать количество ячеек, зависящих от определенной ячейки ? Количество зависимых ячеек нужно сохранить в другой ячейке.

Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Online Online

Пол: Мужской
Расположение: Киев
Сообщений: 2 636


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #1: 25 Ноябрь 2018, 20:37 »

Непосредственно зависящих или рекурсивно перебрать все цепочки зависимостей уходящие вдаль?
В первом случае -  oCell.queryDependents(False), во втором - то же самое, но True
Из результата получаешь ячейки с помощью .getCells()
Для них создаеть .createEnumeration() и обнуляешь счётчик.
Потом пока .hasMoreElements() получаешь .nextElement() и увеличиваешь счетчик на единичку.
Нужно только иметь в виду, что "саму себя" тоже посчитает - то есть если зависиміх нет, то результат все равно как минимум 1. (это желательно перепроверить - возможно, ошибаюсь)
« Последнее редактирование: 25 Ноябрь 2018, 20:54 от JohnSUN » Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
rami
Гуру
*******
Offline Offline

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


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #2: 25 Ноябрь 2018, 21:58 »

Нужно только иметь в виду, что "саму себя" тоже посчитает - то есть если зависиміх нет, то результат все равно как минимум 1. (это желательно перепроверить - возможно, ошибаюсь)
Если исходная ячейка пустая, то её не считает, а если не пустая, то посчитает.
Записан

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

Сообщений: 23


« Ответ #3: 26 Ноябрь 2018, 10:58 »

Я надеялся, что мне предложат какой-нибудь популярный макрос ...

А мне предложили самому его написать Улыбка Ладно, придется изучать это дело.

P.S. Зато понял смысл подписи economist.
Записан
rami
Гуру
*******
Offline Offline

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


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #4: 26 Ноябрь 2018, 14:12 »

P.S. Зато понял смысл подписи economist.
Водка и коньяк — это для опытных программистов, для начинающих — жидкость для протирания очков или мониторов Смеющийся

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

Вот, совершенно не популярный макрос:
Код:
Sub DependentsCells
Dim oSheet, oCell, oDep, oEnum, i%, e
oSheet = ThisComponent.Sheets(0)         'первый лист
oCell = oSheet.getCellRangeByName("A1")  'для ячейки A1
oDep = oCell.queryDependents(True)       'False — для непосредственно зависимых, True — для всех зависимых от данной ячейки
oEnum = oDep.Cells.createEnumeration()
While oEnum.hasMoreElements()
If oEnum.nextElement().AbsoluteName<>oCell.AbsoluteName Then i=i+1
Wend
Print i     'показывает число зависимых ячеек
End Sub

P.S. подшлифовал немного макрос.
« Последнее редактирование: 26 Ноябрь 2018, 16:03 от rami » Записан

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

Сообщений: 23


« Ответ #5: 2 Декабрь 2018, 23:21 »

Спасибо за макрос !

Шутку понял. Смешно  Смеющийся

Я составляю в Calc базу данных для актов скрытых работ. Для каждого акта указываются применяемые материалы при помощи ссылок на значения из перечня (иногда с применением функции CONCATENATE). Перечень материалов собирается на другом листе.

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

Просьба к rami. Может быть, превратите макрос в функцию ? Чтобы можно было в качестве аргумента указать ячейку и получить результат.

Или бежать за жидкостью ? Смеющийся
Записан
OOKapitan
Форумчанин
***
Offline Offline

Сообщений: 401


« Ответ #6: 3 Декабрь 2018, 11:55 »

Для это необходимо посчитать, сколько экземпляров каждого сертификата требуется.
А как макрос/функция от Rami определит, сколько экземпляров сертификатов нужно распечатать? Не понятен критерий расчёта необходимого количества экземпляров.
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Online Online

Пол: Мужской
Расположение: Киев
Сообщений: 2 636


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #7: 3 Декабрь 2018, 12:09 »

Ну, скорее всего, потребуется подсчитать количество уникальных ссылок, игнорировать повторы. Тогда число покажет именно количество сертификатов, которые нужно к акту приложить.
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
rami
Гуру
*******
Offline Offline

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


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #8: 3 Декабрь 2018, 14:23 »

Может быть, превратите макрос в функцию ? Чтобы можно было в качестве аргумента указать ячейку и получить результат.
Наверно, как-то так:
Код:
Function DEP(adr,e)                      'В ячейке пишется формула: =DEP(("A1");INT(RAND()))  <— вместо A1 любой адрес (в кавычках)
Dim oSheet, oCell, oDep, oEnum, i%, e
oSheet = ThisComponent.Sheets(0)         'первый лист
oCell = oSheet.getCellRangeByName(adr)   'ячейка
oDep = oCell.queryDependents(True)       'False — для непосредственно зависимых, True — для всех зависимых от данной ячейки
oEnum = oDep.Cells.createEnumeration()
While oEnum.hasMoreElements()
If oEnum.nextElement().AbsoluteName<>oCell.AbsoluteName Then i=i+1
Wend
dep=i     'показывает число зависимых ячеек
End Function
Записан

OOKapitan
Форумчанин
***
Offline Offline

Сообщений: 401


« Ответ #9: 3 Декабрь 2018, 16:30 »

Тогда число покажет именно количество сертификатов, которые нужно к акту приложить.
Это-то да. Но автор пишет, что
Для это необходимо посчитать, сколько экземпляров каждого сертификата требуется.
А вот как, используя указанный код/функцию, это посчитать?
Записан
meat_12237
Участник
**
Offline Offline

Сообщений: 23


« Ответ #10: 6 Декабрь 2018, 23:04 »

Спасибо за модернизацию до функции !

Для удобства я использую этот макрос и следующую формулу:

=DEP(CELL("ADDRESS";A1);INT(RAND()))-1

* генератор случайных чисел для того, чтобы функция DEP всегда пересчитывала
* минус 1 для того, чтобы учесть то, что функция CELL тоже зависит от A1

По поводу использования:

В строку для каждого акта я ввожу ссылки на материалы.

Акт 1 - материал 1,3,8
Акт 2 - материал 1,2
Акт 3 - материал 8

На другом листе приведен перечень материалов.

1 - арматура
2 - утеплитель
3 - бетон
8 - кирпич

Приведенный макрос дает следующее:

1 - арматура - 2 экз.
2 - утеплитель - 1 экз.
3 - бетон - 1 экз.
8 - кирпич - 2 экз.
Записан
OOKapitan
Форумчанин
***
Offline Offline

Сообщений: 401


« Ответ #11: 7 Декабрь 2018, 11:13 »

Что по моему вопросу?

Для удобства я использую этот макрос и следующую формулу:

=DEP(CELL("ADDRESS";A1);INT(RAND()))-1

Приложите файл, пожалуйста, а то без него как-то не очень понятно.
Записан
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

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