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

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

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

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

Сообщений: 17


« Стартовое сообщение: 24 Февраль 2019, 23:29 »

Добрый вечер, Уважаемые знатоки.
Есть довольно крупная проблема.
Есть таблица с примерно 2000 строк, в два столбца то есть 3500-4000 ячеек и её нужно обработать.
Иного способа как написать макрос я не вижу и для меня это не подъёмная задача в плане изучения языка.
Прошу помочь в написании макроса.

Ёмко о ТЗ.
Макрос должен обрабатывать текущую выделенную ячейку парсить её и вставлять значения в другие ячейки.
Формат данных в ячейке:
Данные разделены на блоки, большими буквами, в начале каждого блока.
Всё пишется русским алфавитом;
аа,а; бб,б; хх,х; уу,у -- это числа;
текст1 -- обязателен, текст2-4 -- опционально;
Всегда закрывающая "точка с запятой";

Пример заполненной ячейки:
Код:
Абв
аа,а-текст1\текст2\(текст3)(текст4);
бб,б-текст1\текст2\(текст3)(текст4);
....
Эюя
хх,х-текст1\текст2\(текст3)(текст4);
уу,у-текст1\текст2\(текст3)(текст4);
....
Пример обработки:
Исходные данные в ячейке C1, выбираем ячейку, запускаем макрос,
в ячейку A1 вставляются значения из блока Абв, так что значения аа,а; бб,б; .... суммируются
в ячейку B1 вставляются значения из блока Эюя, так что значения хх,х; уу,у; .... суммируются

Соответственно если это ячейка С2, то данные вставляются B2 и А2.
Но было бы хорошо, если макрос сам определял ячейку и вставлял значения со смещением влево на одну и две ячейки, соответственно.

Пишу на форуме впервые, как благодарить не знаю.
« Последнее редактирование: 25 Февраль 2019, 03:46 от fujica » Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

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


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


WWW
« Ответ #1: 25 Февраль 2019, 08:41 »

Доброе утро! И добро пожаловать на форум!
Должен огорчить, ёмкости ТЗ немного не хватило - нужно ещё немного "ширше и глубжее"  Смеющийся

Абв и Эюя (и все, кто между ними) - в одной ячейке? Как их туда занесло? В смысле - откуда данные в таком виде попали в таблицу? Calc программа умная, должен был нарезать всё это на отдельные строки, если ему явно это не запретить...
Тексты вообще игнорируются, да? Просто подсчитать сумму каждого из блоков данных?
О количестве блоков. Всегда только два? Или может быть один? И что тогда писать в B2? Ноль? Или "Нет данных"?

В общем, ответ такой "Макрос написать не очень сложно - сложно понять задачу без образца данных"
Записан

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

Сообщений: 17


« Ответ #2: 25 Февраль 2019, 19:04 »

ДА, это всё в одной ячейке.
В общем вы всё правильно поняли. Если нет блока, то писать ноль, текст игнорировать.
Желательно вставлять в ячейку обработаны данные, как текст. чтобы не сломать таблицу
если из неё удалить макрос или скопировать из неё данные.
если есть только один блок то поместить данные только в ту ячейку к которому она относится,
если есть блок с другим названием, то его не трогать.

Если желаете узнать, что это за таблица такая могу поделится, это не секрет.  Всё хорошо
Записан
Bigor
Опытный пользователь
***
Offline Offline

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


« Ответ #3: 25 Февраль 2019, 19:10 »

Если желаете узнать, что это за таблица такая могу поделится, это не секрет.
я думаю, что приложенная таблица сбережет немного времени и ускорит процесс написания макроса
Записан
fujica
Участник
**
Offline Offline

Сообщений: 17


« Ответ #4: 25 Февраль 2019, 19:17 »

Если честно мне стыдно такое выкладывать.  Да уж...
Сейчас подчищу уродство и выложу образец.
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

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


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


WWW
« Ответ #5: 25 Февраль 2019, 19:19 »

Если желаете узнать, что это за таблица такая могу поделится
Желаю, о том и писал. Потому что с описанием получилось как в той байке:
- Необходимо изготовить отверстие 150 мм...
- Ага, значит, сделать дырку где-то с ладонь величиной...
аа,а и бб,б при всём желании просуммировать не могу - что там за числа будут могу только догадываться. Поэтому и просил хоть небольшой образец, чтобы было на чем отладку проводить... Ну, раз не дал, значит не дал.

В приложенном файле два варианта формул.
В A2 и B2 - =SUM_OF_BLOCK(<текст>;<номер блока>)
В G2:J2 - формула массива {=GETSUMS(<текст>)}

* Parse Sums.ods (13.64 Кб - загружено 3 раз.)
Записан

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

Сообщений: 17


« Ответ #6: 25 Февраль 2019, 19:22 »

Срез за одну неделю постарался найти где есть все ситуации.
Сильно не ругайте, да есть специальные базы данных и все такое, но как показала практика, таблицы выживают лучше.
Да и делал я это личного удовольствия без особых знаний, поэтому так много версий.
Последние 7 месяцев я был без компьютера поэтому сейчас нужно занести очень много чеков и я хочу сверстать всё в одну таблицу т,к. сейчас их порядка 10 и разного формата...

Пароль, мой ник.

* кошелёк.ods (31.91 Кб - загружено 6 раз.)
« Последнее редактирование: 25 Февраль 2019, 20:05 от fujica » Записан
fujica
Участник
**
Offline Offline

Сообщений: 17


« Ответ #7: 25 Февраль 2019, 20:19 »

JohnSUN
Спасибо.
Я могу вас попросить доработать?
Макрос ломается когда в ячейке только один блок Грустный
И как применять макрос на другие ячейки?
Записан
Bigor
Опытный пользователь
***
Offline Offline

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


« Ответ #8: 25 Февраль 2019, 20:30 »

Макрос ломается когда в ячейке только один блок Грустный
С одним блоком проблем не вижу. В вашей табличке все отработало красиво, кроме 10 строки, но там вы сами виноваты, не соответсвует формату.
Цитата:
И как применять макрос на другие ячейки?
в вашей табллиице сделал так. В e5 вставил формулу
Код:
=SUM_OF_BLOCK(G5;2)
, в d5
Код:
=SUM_OF_BLOCK(G5;1)
"протянул" до конца таблицы. Все
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

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


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


WWW
« Ответ #9: 25 Февраль 2019, 20:33 »

Всё верно: хорошие данные - хороший результат
Только я не "протянул", а скопировал и вставил через Ctrl+Shift+V "только формулы", чтобы раскраску не поломать

* кошелёк.ods (36.53 Кб - загружено 4 раз.)
Записан

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

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


« Ответ #10: 25 Февраль 2019, 20:39 »

у него раскраска через УФ, можно тянуть Улыбка
Записан
fujica
Участник
**
Offline Offline

Сообщений: 17


« Ответ #11: 25 Февраль 2019, 21:18 »

Работает!
Как использовать макрос разобрался.
Всё оказалось просто. Вот за это спасибо.
За неправильный формат простите.  Шокирован Человеческий фактор, так сказать.

Посмотрел листинг макроса, на мой взгляд, чёрт ногу сломит.
И не мудрено из знаний только 120 академических часов Питона..

Благодарю.  Смеющийся

« Последнее редактирование: 25 Февраль 2019, 22:57 от fujica » Записан
fujica
Участник
**
Offline Offline

Сообщений: 17


« Ответ #12: 26 Февраль 2019, 19:10 »

Вчера за вечер занёс 150 чеков и ни разу не притронулся к калькулятору. Смеющийся
Если не посчитаете за наглость можно попросить написать ещё один макрос?
Примерно такого же характера..

Ячейка всё та же. Хотелось бы добавить туда ещё "группу".
Всё тот же пример, только А и Б это группы выраженные числом,
Код:
Абв
аа,а№А-текст1\текст2\(текст3)(текст4);
бб,б№Б-текст1\текст2\(текст3)(текст4);
....
Эюя
хх,х№А-текст1\текст2\(текст3)(текст4);
уу,у№Б-текст1\текст2\(текст3)(текст4);
....
Группа идет после  символа № и заканчивается тире.
Формула должна суммировать всё принадлежащей одной группе.
API: SUM_OF_GROUP(<текст>;<номер_группы>)

И если есть возможность, сделать так чтобы можно было давать одному наименованию несколько групп примерно так:
Код:
Абв
аа,а№А№Б-текст1\текст2\(текст3)(текст4);
бб,б№Б-текст1\текст2\(текст3)(текст4);

Пример:
12,53№1-яблоки;
36.2№2-ручки;
45,6№3-проезд;
100№1№3-ресторан;

SUM_OF_GROUP(А1;1)=112,53
SUM_OF_GROUP(А1;2)=36.2
SUM_OF_GROUP(А1;3)=145,6

И можно вынести разделитель № в отдельную константу, чтобы если что можно было её поменять?..
« Последнее редактирование: 26 Февраль 2019, 19:16 от fujica » Записан
Bigor
Опытный пользователь
***
Offline Offline

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


« Ответ #13: 26 Февраль 2019, 19:34 »

Позанудствую:
Формула должна суммировать всё принадлежащей одной группе.
API: SUM_OF_GROUP(<текст>;<номер_группы>)
все внутри ячейки? Или все,  что относится к Абв, и отдельно для Эюя ?
Записан
fujica
Участник
**
Offline Offline

Сообщений: 17


« Ответ #14: 26 Февраль 2019, 19:43 »

Всё внутри ячейки.
Записан
Страниц: 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!