Здравствуйте!
Я полный новичек в написании макросов. Пожалуйста, помогите в написании макроса.
Нужна автоматизация следующих действий в Calc - есть одна большая электронная таблица - главный отчет (ГО). Есть несколько оперативных отчетов (ОО1, ОО2 и т.д.). Данные из оперативных отчетов заносятся в главный отчет. Т.к. главный отчет разросся до нескольких сотен строк, стало трудоемко вручную искать и проставлять значения из оперативных отчетов.
Что нужно конкретно:
1. взять значение ячейки столбца "номер" из ОО1/ОО2/ОО3 и т.д., найти это значение в ГО.
2. в строке ГО, где найдено значение, заполнить ячейку столбца "название" значением ОО1/ОО2 и т.д.
Как видется мне этот алгоритм:
Все файлы лежат в одной папке ГО и ОО1/ОО2 и т.д.
1. Открываем ГО, запускаем макрос.
2. Макрос обращается за значениями ячейки столбца А ("номер") к файлу ОО1
3. Ищет это значение в столбце А ("номер") файла ГО.
4. В ячейку столбца В ("название") файла ГО записывает имя, которое берет из А1 ячейки файла ОО1.
5. Повторяет эту последовательность для каждого файла ОО1/ОО2/ОО3 и т.д.
Суть действия понимаю, только не знаю синтаксиса. Пожалуйста помогите разобраться, хотя бы назовите имена функций/процедур Basic, которые помогут это реализовать. А также где почитать описания к этим командам. Если накидаете черновик скрипта буду очень благодарен.
Во вложении шаблоны, того что нужно обработать.
Всего Вам наилучшего и спасибо за ответы!
Посмотрите для начала эту тему:
http://forumooo.ru/index.php/topic,2436.0.html
Что предполагается сделать, если, например, значение 333 встретится и в ОО1, и в ОО2? Оставить первый встреченный? Затереть последним? Дописать в следующую колонку? Вывести сообщение?
Как поступать с номерами, которые встречаются в каком-нибудь оперативном отчете, но пока что отсутствуют в ГО и, значит, не будут найдены?
В образцах данными заполнены только первые листы. Так будет всегда или нужно будет проводить поиск по всем листам всех книг?
Цитата: 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В образцах данными заполнены только первые листы. Так будет всегда или нужно будет проводить поиск по всем листам всех книг?
Так будет всегда. Поиск только в первом листе книги оперативного учета.
В итоге, задача сводится к следующему: найти уникальные значения из книги оперативного отчета в книге ГО, проставить номер оперативного отчета в строке с найденным номером в ГО. Дополнительно (но не обязательно), учесть исключение не найденных значений из оперативного отчета.
Большое всем спасибо за помощь!
Цитата: 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 (https://wiki.openoffice.org/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:_%D0%A7%D0%B0%D1%81%D1%82%D0%BE_%D0%B7%D0%B0%D0%B4%D0%B0%D0%B2%D0%B0%D0%B5%D0%BC%D1%8B%D0%B5_%D0%B2%D0%BE%D0%BF%D1%80%D0%BE%D1%81%D1%8B)
В общем, получилось что-то такое... Старался писать побольше комментариев, чтобы код макроса тоже можно было использовать " для быстрого входа в Basic".
Цитата: JohnSUN от 18 июня 2014, 11:57В общем, получилось что-то такое... Старался писать побольше комментариев, чтобы код макроса тоже можно было использовать " для быстрого входа в Basic".
Спасибо за старания, сам бы я такой макрос не осилил, громадина. Макрос пригодится для "разбора полётов".
JohnSUN, я не совсем понимаю результаты на листе "Примечания", мне кажется, что иногда они "не того". Но пусть автор вопроса оценит.
Цитата: rami от 18 июня 2014, 16:37
Спасибо за старания, сам бы я такой макрос не осилил, громадина.
В том-то и беда... Намеренно в этот раз не стал дробить код на отдельные подпрограммы, обычно так не пишу.
Цитата: rami от 18 июня 2014, 16:37
я не совсем понимаю результаты на листе "Примечания", мне кажется, что иногда они "не того".
Мне тоже так кажется ;D Скорее всего, где-то опечатка или ошибка в логике - в такой громадине запутаться очень легко. По идее в этот лист должны были бы попадать только дублирующиеся значения.
Практически мне нечего предложить, но я всегда исхожу из убеждения, что чем "более огромный" макрос, тем больше надо вырубать из него лишнее.
Если этих оперативных отчётов не слишком много, то проще всего обойтись формулами без всяких макросов. При желании всегда можно перекопировать данные из формул. Пример приложен.
Цитата: celler от 18 июня 2014, 21:16Если этих оперативных отчётов не слишком много, то проще всего обойтись формулами без всяких макросов.
Не получится, потому, что:
Цитата: Amurax Hackshaper от 16 июня 2014, 00:36есть одна большая электронная таблица - главный отчет (ГО). Есть несколько оперативных отчетов (ОО1, ОО2 и т.д.). Данные из оперативных отчетов заносятся в главный отчет. Т.к. главный отчет разросся до нескольких сотен строк, стало трудоемко вручную искать и проставлять значения из оперативных отчетов.
Макрос написаный JohnSUN наверно тоже не подходит, если больше двух отчётов.
Интересно, почему никто кроме меня не загрузил пример который написал JohnSUN
Цитата: JohnSUN от 18 июня 2014, 11:57ГО.ods (15.06 Кб - загружено 1 раз.)
Если автор вопроса не уточнит детали, то вряд ли что то получится.
Всем привет!
И большое спасибо за помощь. К сожалению, не было возможности проверить скрипт. Планирую завтра заняться и по результатам отпишусь.
Похоже, в тему (http://bash.im/quote/428757) ;D