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

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

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

Войти
Новости: Вы можете задать вопрос по LibreOffice или Apache OpenOffice  без регистрации, используя форму
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1 2 3 4 »   Вниз
  Печать  
Автор Тема: Объединение текста в одну строку по условию.  (Прочитано 7953 раз)
0 Пользователей и 1 Гость смотрят эту тему.
ArtemkoKip
Участник
**
Offline Offline

Сообщений: 6


« Стартовое сообщение: 19 Апрель 2016, 16:10 »

Доброго дня. Помогите в составлении макроса для объединения теста в одну строку из одного столбца, значение другого столбца которого соответствует заданному условию. Пока нашел только макрос для excel:

Function MergeIf(TextRange As Range, SearchRange As Range, Condition As String)
    Dim Delimeter As String, i As Long
    Delimeter = ", " 'символы-разделители (можно заменить на пробел или ; и т.д.)
     
    'если диапазоны проверки и склеивания не равны друг другу - выходим с ошибкой
    If SearchRange.Count <> TextRange.Count Then
        MergeIf = CVErr(xlErrRef)
        Exit Function
    End If
     
    'проходим по все ячейкам, проверяем условие и собираем текст в переменную OutText
    For i = 1 To SearchRange.Cells.Count
        If SearchRange.Cells(i) Like Condition Then OutText = OutText & TextRange.Cells(i) & Delimeter
    Next i
     
    'выводим результаты без последнего разделителя
    MergeIf = Left(OutText, Len(OutText) - Len(Delimeter))
End Function


Переработать его в макрос Openoffice знаний не хватает.
Помогите!!
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

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


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


WWW
« Ответ #1: 19 Апрель 2016, 19:54 »

Посмотри здесь
Записан

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

Сообщений: 6


« Ответ #2: 20 Апрель 2016, 01:06 »

Посмотри здесь

Хоба! то что надо! Спасибо!
А есть ли у кого понимание как его подправить, что бы он склеивал текст не "А1, А2, А3, А6, А9, А10, А11, А12, А20...", а "А1-А3, А6, А9-А12, А20...".
Или проще копать в редактировании с помощью промежуточной формулы готового результата?
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

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


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


WWW
« Ответ #3: 20 Апрель 2016, 07:32 »

Ты о номерах бланков, что ли? Или что ты диапазонами считать собрался?
Записан

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

Сообщений: 6


« Ответ #4: 20 Апрель 2016, 08:21 »

Ты о номерах бланков, что ли? Или что ты диапазонами считать собрался?

Ну если в кратце о предметной области, то в левом столбце есть список автоматических выключателей (QF1, QF2, QF3,...). В правом столбце описана их фазность и номинал (1/6, 1/20, 3/10...). Есть необходимость сформировать что то типа перечня элементов, в котором в левом столбце будут перечисляться все автоматы каждого номинала, а в правом просто указана модель.
Пример в файле.

* Однолинейная схема ЩР типовая.ods (114.92 Кб - загружено 10 раз.)
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

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


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


WWW
« Ответ #5: 20 Апрель 2016, 11:01 »

Угу... То есть проблема в том, что в AS3, AS19 и в AS23 все наименования просто не влазят в выделенное поле?
Ну, тут возможны как минимум четыре решения:
1. Уменьшать размер шрифта для этих ячеек, пока всё не поместится
2. Увеличивать очередную строку спецификации пока вся запись со шрифтом 10 туда не влезет без искажений
3. (как ты и предложил) Использовать сокращенную запись, где пачка последовательных обозначений будет записана через тире (а как на такую запись смотрит нормоконтроль?)
4. Забить.
Записан

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

Сообщений: 6


« Ответ #6: 20 Апрель 2016, 14:45 »

Угу... То есть проблема в том, что в AS3, AS19 и в AS23 все наименования просто не влазят в выделенное поле?
Ну, тут возможны как минимум четыре решения:
1. Уменьшать размер шрифта для этих ячеек, пока всё не поместится
2. Увеличивать очередную строку спецификации пока вся запись со шрифтом 10 туда не влезет без искажений
3. (как ты и предложил) Использовать сокращенную запись, где пачка последовательных обозначений будет записана через тире (а как на такую запись смотрит нормоконтроль?)
4. Забить.



Забить! Тогда придется ручками все делать) А что тогда будет двигать прогресс если не лень)
Дело даже не в том что элементов много и красиво в строчку не влазят. Скорее как раз таки по нормам положено идущие друг за другом записывать через тире.
Думаю в макросе это реализовать было бы красивее. Но видимо буду делать через промежуточные формулы.
Спасибо за помощь! Очень помогли).
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

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


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


WWW
« Ответ #7: 20 Апрель 2016, 15:06 »

Да нет, под "забить" я имел в виду не "забить на задачу", а "перебить полученную формулой строку вручную"... Сорри, за не точную формулировку.

Задача-то, в принципе, решаемая... Не тривиальная, но решаемая. Более того, такой макрос был бы полезен не только в этой конкретной задаче.
Но повозиться с кодированием однозначно придётся. Допустим, что строку "QF24, QF28, QF36, QF37, QF38, QF40, QF41, QF43, QF45, QF46, QF50, QF51, QF53, QF54, QF58, QF59, QF64", можно бы сократить, например, до "QF24, QF28, QF36-QF38, QF40-QF41, QF43, QF45-QF46, QF50-QF51, QF53-QF54, QF58-QF59, QF64" (на одних пробелах сколько экономии!). Но как правильно записать пару соседних значений? "QF50-QF51" или все-таки "QF50, QF51"?
Или, например, где гарантия, что они в исходном виде расположены в отсортированном порядке?
И "префиксы" перед числовыми значениями представляют собой проблему - написанные в разном регистре считать одинаковыми или разными? Формировать итоговую строку по алфавитному порядку префиксов или тупо во возрастанию числовой части? Ну, и так далее... Одно только описание задачи займёт кучу времени.
Записан

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

Сообщений: 6


« Ответ #8: 20 Апрель 2016, 16:08 »

Да нет, под "забить" я имел в виду не "забить на задачу", а "перебить полученную формулой строку вручную"... Сорри, за не точную формулировку.

Задача-то, в принципе, решаемая... Не тривиальная, но решаемая. Более того, такой макрос был бы полезен не только в этой конкретной задаче.
Но повозиться с кодированием однозначно придётся. Допустим, что строку "QF24, QF28, QF36, QF37, QF38, QF40, QF41, QF43, QF45, QF46, QF50, QF51, QF53, QF54, QF58, QF59, QF64", можно бы сократить, например, до "QF24, QF28, QF36-QF38, QF40-QF41, QF43, QF45-QF46, QF50-QF51, QF53-QF54, QF58-QF59, QF64" (на одних пробелах сколько экономии!). Но как правильно записать пару соседних значений? "QF50-QF51" или все-таки "QF50, QF51"?
Или, например, где гарантия, что они в исходном виде расположены в отсортированном порядке?
И "префиксы" перед числовыми значениями представляют собой проблему - написанные в разном регистре считать одинаковыми или разными? Формировать итоговую строку по алфавитному порядку префиксов или тупо во возрастанию числовой части? Ну, и так далее... Одно только описание задачи займёт кучу времени.


Пока что пытаюсь решить "узко поставленную" задачу. Поэтому:
 - "QF50, QF51"
 - В исходном виде расположены ТОЛЬКО в отсортированном порядке и повторы исключены
 - Префиксы, написанные в разном регистре считать одинаковыми.
 - Формировать итоговую строку по алфавитному порядку префиксов или по возрастанию числовой части, так как префиксы все равны)

Как бы не пришлось Макросы изучать)
Записан
kompilainenn
Мастер
*****
Offline Offline

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



« Ответ #9: 20 Апрель 2016, 17:00 »

Как бы не пришлось Макросы изучать)
вы УЖЕ влипли=)
Записан

Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

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


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


WWW
« Ответ #10: 20 Апрель 2016, 17:13 »

Как бы не пришлось Макросы изучать)
вы УЖЕ влипли=)
Спешишь с диагнозом - он пока в процессе...
Пока что пытаюсь решить "узко поставленную" задачу.
Хорошо. Как насчет "довеска" к уже имеющемуся макросу? В смысле, не переписывать concRng, а подсунуть полученную от него строку в другую функцию, которая развалит строку обратно на отдельные составляющие, выбросит всё, что не является цифрами, пробежится по полученному списку отбирая начало и конец "последовательностей больше двух", слепит всё это обратно, пробрасывая (подменяя на тире) внутренние значения и возвращая на место префиксы... Такое, пожалуй, проще сделать, чем парсить всю исходную последовательность ячеек, сортировать, проверять на допустимость и всё такое прочее

И еще раз к фразе, которая взволновала форумчан:
Как бы не пришлось Макросы изучать)
А что, слабо? Здесь, на форуме, даже девушки с этим справляются...
Записан

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

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


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


WWW
« Ответ #11: 21 Апрель 2016, 12:05 »

Наверное, как-то так... Не сказал бы, что хоть чем-то помогло перечням в AS19 и в AS23. Но AS3 действительно так выглядит лучше

Записан

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

Сообщений: 6


« Ответ #12: 22 Апрель 2016, 09:29 »

Наверное, как-то так... Не сказал бы, что хоть чем-то помогло перечням в AS19 и в AS23. Но AS3 действительно так выглядит лучше

Афигеть! Я в восторге и благодарность моя безгранична! Все как надо! Даже удобно, что это отдельный макрос. Можно использовать, а можно нет. Или можно гдето еще отдельно применять. Спасибо огромное. Сейчас зашиваюсь на работе по основным направлениям, а вы сэкономили мне кучу времени. Примного благодарен.
Записан
kompilainenn
Мастер
*****
Offline Offline

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



« Ответ #13: 22 Апрель 2016, 09:33 »

>благодарность моя безгранична

точно?! почитайте подпись под сообщением Джона
Записан

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

Сообщений: 25



« Ответ #14: 20 Март 2019, 08:36 »

Наверное, как-то так...
Добрый день.
Можете помочь в добавлении условия распознавания  двух периодов и соединения их в один по двум крайним одинаковых значениям, например: "QF1, QF2, QF3, QF5-QF12, QF13-QF19, QF21" → QF1-QF3, QF5-QF19, QF21" ?
Буду признателен за помощь.
« Последнее редактирование: 22 Март 2019, 16:45 от kl33 » Записан
Страниц: 1 2 3 4 »   Вверх
  Печать  
 
Перейти в:  

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