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

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

8 Март 2021, 08:52 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Здесь можно поблагодарить участников форума Улыбка
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Формирование массива с одного листа и вывод на другой  (Прочитано 1900 раз)
0 Пользователей и 1 Гость смотрят эту тему.
ali_vlad
Форумчанин
***
Offline Offline

Сообщений: 61


« Стартовое сообщение: 12 Ноябрь 2019, 22:13 »

Есть некий длинный список из трех столбцов на одном листе (ФИО, должность, признак). Из него надо сформировать несколько массивов (что то типа выборки) по определенному условию и поместить их на другой лист в несколько столбцов (ФИО, должность). Сгруппировать по общему признаку.
Переношу на другой лист через много For - Next по одному признаку. Получается много заходов, это долго и не правильно.
1. Подскажите примером, как правильно наполнить массив (ФИО, должность) по признаку (If <Условие1> Then <Добавить в Массив1: Строка1, Столбец1, Строка1, Столбец2>).
2. Как поместить Массив1 на другой лист в определенное место, начиная с .GetCellByPosition (X1,Y1) и до конца массива.
« Последнее редактирование: 12 Ноябрь 2019, 22:15 от ali_vlad » Записан
Yakov
Администратор
**
Offline Offline

Сообщений: 2 568


WWW
« Ответ #1: 13 Ноябрь 2019, 11:49 »

Расширенный фильтр из Calc подойдёт?
Он то же умеет помещать результат в заданную область.
Записан
ali_vlad
Форумчанин
***
Offline Offline

Сообщений: 61


« Ответ #2: 13 Ноябрь 2019, 11:52 »

Не, массивы динамические и идут один за другим через пустую строку. Соответственно положение следующего массива напрямую зависит от длины предыдущего.
Как наполнить динамический массив я уже понял, как его поместить в ячейки - пока не понял.
« Последнее редактирование: 13 Ноябрь 2019, 12:14 от ali_vlad » Записан
economist
Форумчанин
***
Offline Offline

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


« Ответ #3: 13 Ноябрь 2019, 12:46 »

Если нужно за один проход обработать несколько условий, то
If ... Then
ElseIf ... Then
End if

Также ветвление можно сделать на SELECT CASE - конструкции.

Впрочем, если эта задача регулярная, а исходные данные для условий меняются со временем (Типа был "Оператор АЗС", а стал "Оператор АЗС №2 Восход") - то правильнее назвать всю таблицу с ФИО - диапазоном, скажем, DATA, далее Фал-Создать БД - Соединиться - Эл. таблица - Выбрать ODS/XLS-файл - Готово, Далее Запросы - Создать в режиме SQL - написать select * from DATA where Должность="Оператор" и получить нужный список. Условия для запросов задаются в красивом SQL редакторе с подсветкой синтаксиса, нет никаких ограничений по объему данных, можно просто перетащить запрос во Writer/Calc и получить таблицу, а можно эту таблицу фильтровать интерактивно, передавая в запрос строки из различных "контролов" типа комбобокса.

Перетащенные в Calc SQL-запросы сами увеличивают число занимаемых ими строк, ничего "вычислять" не нужно. Набор "табличек" на листе так получить проще всего. И никаких макросов.  

UPD: чтобы макросу сообщить первую незанятую строку для вставки следующей "таблички" - можно просто написать формулу вида =СЧЁТА() и определять число занятых строк по её значению.


« Последнее редактирование: 13 Ноябрь 2019, 12:55 от economist » Записан

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

Сообщений: 61


« Ответ #4: 13 Ноябрь 2019, 14:42 »

Мне не надо через sql, мне надо через basic запрлнить диапазон ячеек массивом.
Размерность массива я получаю при завершении его наполнения.
« Последнее редактирование: 13 Ноябрь 2019, 14:44 от ali_vlad » Записан
Yakov
Администратор
**
Offline Offline

Сообщений: 2 568


WWW
« Ответ #5: 13 Ноябрь 2019, 15:55 »

Код:
dim Doc as object
Dim Sheet as object
Doc = ThisComponent
Sheet = Doc.getSheets.getByIndex(0)
Cell =  Sheet.getCellByPosition(X,Y)
Так?
Записан
ali_vlad
Форумчанин
***
Offline Offline

Сообщений: 61


« Ответ #6: 13 Ноябрь 2019, 16:56 »

Код:
dim Doc as object
Dim Sheet as object
Doc = ThisComponent
Sheet = Doc.getSheets.getByIndex(0)
Cell =  Sheet.getCellByPosition(X,Y)
Так?
Код:
dim Doc as object
Dim Sheet as object
Doc = ThisComponent
Sheet = Doc.getSheets.getByIndex(0)
Cell =  Sheet.getCellByPosition(X,Y)
Так?
Это одна ячейка. У меня есть двумерный массив string. Его надо поместить в диапазон ячеек, начиная с X,Y. Я его записываю в ячейки через for ... ubond.
Есть ли другой способ поместить массив в ячейки сразу, не по одной через for.
Типа диапазону ячеек (X1,Y1,X2,Y2) присвоить значения массива А(Z,2) одним действием?
Записан
Bigor
Мастер
*****
Offline Offline

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


« Ответ #7: 13 Ноябрь 2019, 17:00 »

setDataArray()/getDataArray()
Записан

Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут
ali_vlad
Форумчанин
***
Offline Offline

Сообщений: 61


« Ответ #8: 13 Ноябрь 2019, 17:01 »

setDataArray()/getDataArray()
А можно пример?
Записан
Bigor
Мастер
*****
Offline Offline

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


« Ответ #9: 13 Ноябрь 2019, 17:03 »

в строке поиска форума набираешь, и выбираешь любой понравившийся пример
Записан

Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут
ali_vlad
Форумчанин
***
Offline Offline

Сообщений: 61


« Ответ #10: 13 Ноябрь 2019, 17:05 »

в строке поиска форума набираешь, и выбираешь любой понравившийся пример
С телефона тяжко это делать
Записан
Bigor
Мастер
*****
Offline Offline

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


« Ответ #11: 13 Ноябрь 2019, 17:10 »

Вот из твоей предыдущей темы

Код:
oASheet=oAdoc.sheets(0)'Tabelle 2
oArange=oASheet.getCellRangeByName("A1:B1")'source
oAarray=oArange.getDataArray()
oCrange=oCSheet.getCellRangeByName("A1:b1")'target
oCrange.setDataArray(oAarray)
Записан

Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

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