Пожалуйста, помогите с написанием макроса

Автор Amurax Hackshaper, 16 июня 2014, 01:36

0 Пользователи и 1 гость просматривают эту тему.

Amurax Hackshaper

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

Я полный новичек в написании макросов. Пожалуйста, помогите в написании макроса.

Нужна автоматизация следующих действий в Calc - есть одна большая электронная таблица - главный отчет (ГО). Есть несколько оперативных отчетов (ОО1, ОО2 и т.д.). Данные из оперативных отчетов заносятся в главный отчет. Т.к. главный отчет разросся до нескольких сотен строк, стало трудоемко вручную искать и проставлять значения из оперативных отчетов.

Что нужно конкретно:
1. взять значение ячейки столбца "номер" из ОО1/ОО2/ОО3 и т.д., найти это значение в ГО.
2. в строке ГО, где найдено значение, заполнить ячейку столбца "название" значением ОО1/ОО2 и т.д.

Как видется мне этот алгоритм:
Все файлы лежат в одной папке ГО и ОО1/ОО2 и т.д.
1. Открываем ГО, запускаем макрос.
2. Макрос обращается за значениями ячейки столбца А ("номер") к файлу ОО1
3. Ищет это значение в столбце А ("номер") файла ГО.
4. В ячейку столбца В ("название") файла ГО записывает имя, которое берет из А1 ячейки файла ОО1.
5. Повторяет эту последовательность для каждого файла ОО1/ОО2/ОО3 и т.д.

Суть действия понимаю, только не знаю синтаксиса. Пожалуйста помогите разобраться, хотя бы назовите имена функций/процедур Basic, которые помогут это реализовать. А также где почитать описания к этим командам. Если накидаете черновик скрипта буду очень благодарен.

Во вложении шаблоны, того что нужно обработать.

Всего Вам наилучшего и спасибо за ответы!

Yakov


JohnSUN

Что предполагается сделать, если, например, значение 333 встретится и в ОО1, и в ОО2? Оставить первый встреченный? Затереть последним? Дописать в следующую колонку? Вывести сообщение?
Как поступать с номерами, которые встречаются в каком-нибудь оперативном отчете, но пока что отсутствуют в ГО и, значит, не будут найдены?
В образцах данными заполнены только первые листы. Так будет всегда или нужно будет проводить поиск по всем листам всех книг?
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

Amurax Hackshaper

Цитата: Yakov от 16 июня 2014, 09:10
Посмотрите для начала эту тему:
http://forumooo.ru/index.php/topic,2436.0.html
Спасибо за информацию. Но если Вам не сложно, подскажите руководства для быстрого "входа" в Basic. И еще документацию по командам Basic. Заранее благодарен!

Цитата: JohnSUN от 16 июня 2014, 12:05Что предполагается сделать, если, например, значение 333 встретится и в ОО1, и в ОО2? Оставить первый встреченный? Затереть последним? Дописать в следующую колонку? Вывести сообщение?
Одинаковых значений не должно быть, они уникальны. Сейчас этого не требуется. Спасибо за такое проявленное внимание и участие в решение задачи.

Цитата: JohnSUN от 16 июня 2014, 12:05Как поступать с номерами, которые встречаются в каком-нибудь оперативном отчете, но пока что отсутствуют в ГО и, значит, не будут найдены?
Предполагается, что все данные из оперативного отчета уже содержатся в ГО. Но будет отлично, если обработать это исключение. Например на отдельном листе в книге ГО в формате: столбец А - уникальный номер, который не найден; столбец B - идентификатор документа из ячейки А1; столбец C - дата и время.

Цитата: JohnSUN от 16 июня 2014, 12:05В образцах данными заполнены только первые листы. Так будет всегда или нужно будет проводить поиск по всем листам всех книг?
Так будет всегда. Поиск только в первом листе книги оперативного учета.

В итоге, задача сводится к следующему: найти уникальные значения из книги оперативного отчета в книге ГО, проставить номер оперативного отчета в строке с найденным номером в ГО. Дополнительно (но не обязательно), учесть исключение не найденных значений из оперативного отчета.

Большое всем спасибо за помощь!

Yakov

Цитата: Amurax Hackshaper от 16 июня 2014, 18:34Спасибо за информацию. Но если Вам не сложно, подскажите руководства для быстрого "входа" в Basic. И еще документацию по командам Basic. Заранее благодарен!
* http://wiki.forumooo.ru/wiki/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5
* https://wiki.openoffice.org/wiki/Documentation/BASIC_Guide  

* http://www.pitonyak.org/oo.php макросы Питоняка, там есть и перевод на русский язык

+ Справка LO/OOo

+ FAQ OOo

JohnSUN

В общем, получилось что-то такое... Старался писать побольше комментариев, чтобы код макроса тоже можно было использовать " для быстрого входа в Basic".
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

rami

Цитата: JohnSUN от 18 июня 2014, 11:57В общем, получилось что-то такое... Старался писать побольше комментариев, чтобы код макроса тоже можно было использовать " для быстрого входа в Basic".
Спасибо за старания, сам бы я такой макрос не осилил, громадина. Макрос пригодится для "разбора полётов".
JohnSUN, я не совсем понимаю результаты на листе "Примечания", мне кажется, что иногда они "не того". Но пусть автор вопроса оценит.

JohnSUN

Цитата: rami от 18 июня 2014, 16:37
Спасибо за старания, сам бы я такой макрос не осилил, громадина.
В том-то и беда... Намеренно в этот раз не стал дробить код на отдельные подпрограммы, обычно так не пишу.
Цитата: rami от 18 июня 2014, 16:37
я не совсем понимаю результаты на листе "Примечания", мне кажется, что иногда они "не того".
Мне тоже так кажется  ;D Скорее всего, где-то опечатка или ошибка в логике - в такой громадине запутаться очень легко. По идее в этот лист должны были бы попадать только дублирующиеся значения.
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

rami

Практически мне нечего предложить, но я всегда исхожу из убеждения, что чем "более огромный" макрос, тем больше надо вырубать из него лишнее.

celler

#9
Если этих оперативных отчётов не слишком много, то проще всего обойтись формулами без всяких макросов. При желании всегда можно перекопировать данные из формул. Пример приложен.

rami

Цитата: celler от 18 июня 2014, 21:16Если этих оперативных отчётов не слишком много, то проще всего обойтись формулами без всяких макросов.
Не получится, потому, что:
Цитата: Amurax Hackshaper от 16 июня 2014, 00:36есть одна большая электронная таблица - главный отчет (ГО). Есть несколько оперативных отчетов (ОО1, ОО2 и т.д.). Данные из оперативных отчетов заносятся в главный отчет. Т.к. главный отчет разросся до нескольких сотен строк, стало трудоемко вручную искать и проставлять значения из оперативных отчетов.
Макрос написаный JohnSUN наверно тоже не подходит, если больше двух отчётов.
Интересно, почему никто кроме меня не загрузил пример который написал JohnSUN
Цитата: JohnSUN от 18 июня 2014, 11:57ГО.ods (15.06 Кб - загружено 1 раз.)
Если автор вопроса не уточнит детали, то вряд ли что то получится.

Amurax Hackshaper

Всем привет!

И большое спасибо за помощь. К сожалению, не было возможности проверить скрипт. Планирую завтра заняться и по результатам отпишусь.

JohnSUN

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