Консолидация данных
Впервые с этим понятием я столкнулся ещё в первых версиях Excel, который по времени приблизительно совпал с появлением графической оболочки ОС – будущей Windows. Это было приложение Excel 4. Затем появился Excel 5, и процесс появления новых версий ОС и Офисов начал набирать обороты.
Макросы впервые появились в Lotus – 123, но это скорее были не программные коды, а макрокоманды, затем встречавшиеся аналогично и в, например, известном текстовом редакторе того периода Лексикон. Затем фирма Microsoft перехватила инициативу и начала выпускать более удобные для использования макросы уже в встраиваемые в программы. Именно в Excel первых версий появилась консолидация листов, обычно применяемая для получения данных квартального или годового отчетов в бухучёте.
Я не являюсь программистом на языке Питон. Каждый раз, когда мне надо что-то написать, мне приходится лезть в Интернет или смотреть аналогичные примеры, вспоминать материал.
Мне нравится VBA, написание макросов прежде всего в Excel. Стандартные операции в нём я часто уже делаю автоматически или использую какие-то заготовки, но и в VBA я не люблю выкрутасы, а стараюсь писать попроще понятней для себя или других. Это прелюдия.
Теперь о сути задачи. Есть много однотипных файлов Excel в какой-то папке. Мне нужно выбрать эти файлы поочерёдно и произвести консолидацию определённого диапазона ячеек.
В Excel для этого я использую файл Шаблон, написанный несколько лет назад по – необходимости, т.к. такую однотипную работу по сбору данных из множества файлов мне приходится делать часто.
В Шаблоне в форме есть 3 текстовых окна, содержащих путь к папке, имя первого считанного файла и диапазона ячеек на конкретном листе для обработки. Всё работает в режиме диалога и настройки. Чекбоксы позволяют дополнительно настроить нахождение шапки и тип обработки: произвести консолидацию, собрать справа, собрать вниз заданное число строк, собрать непустые строки вниз, собрать строки до конца файла, обработать диапазон. Настройки можно всегда добавить. Идея такой программы, но более совершенной есть в Интернет Сама программа же платная.
Я решил в Питоне сделать лишь простейшую консолидацию. Для обработки входных файлов я использую XLRD, а выходного – XLWT. Возникли, как всегда, определённые проблемы.
1) Как получить список файлов для обработки? Помог Интернет
2) Постоянно при записи в выходной файл подсчитанных значений в результате консолидации возникала непонятная ошибка. Из-за этого приходилось всё время переделывать код, типы, значения. А ларчик просто открывался.
3) Если в выходной файл я записал какое-то значение, например суммы из 1-го считанного файла, то на это место я не могу уже записать суммы по консолидации. Я вывожу оператором print подсчитанные значения. Всё верно. А запись в файл не идёт. Выдаётся ошибка, непонятно почему, опять исправляется код, тип данных, и опять всё бесполезно.
Это было обойдено последовательным выводом в файл сначала части текстовой информации, а потом уже и числовой после консолидации, но сначала надо было понять это. Операторы PRINT помогают при отладке как и MSGBOX в Excel.
4) Есть способ обойти данную ошибку. Создавать копию листа в памяти программы, там всё править, а потом только записывать выходной файл.
Я предлагаю всю папку с собранными мной материалами по Питон при написании программы и папку с исходными файлами Excel при отладке. Там же содержится и файл Консолидация_Шаблон, содержащий значения с целью проверки работы консолидации в Питоне. Данные совпали, что естественно.
Предыдущий материал по работе с Excel в Питоне