0 / 0 / 0
Регистрация: 29.01.2018
Сообщений: 8
|
|
1 | |
Собрать из большой кучи файлов разной структуры некоторые данные в один - VBA29.01.2018, 22:36. Показов 2299. Ответов 18
Метки нет (Все метки)
Добрый день,
с VBA не знакома, прошу подсказать - по форуму поиском смотрю - есть темы - Собрать кучу файлов (xls)в один - VBA , исходные файлы жесткой, одинаковой структуры. получатель - жесткой структуры, таблица, столбцы которой надо заполнить поиском из исходных файлов . А можно ли из очень большого кол-ва файлов ( более 100, а может и к 200) , которые могут иметь разные структуры, в разных ячейках, но столбцы имеют одинаковые заголовки... из каждого файла поиском по названию столбца находим содержимое, и помещаем в файл-сводку, который имеет жесткую структуру. То есть можно ли силами вба - открыть один раз файл, поиском найти содержимое определенных ячеек, записать в файл получатель(вот он жесткой структуры), закрыть этот файл.... и открыть следующий. так как файлов много, наверное файл, в котором идут поиски данных, лучше один раз открыть - для ускорения процесса?
0
|
29.01.2018, 22:36 | |
Ответы с готовыми решениями:
18
VBA EXCEL: Собрать кучу файлов в один Собрать данные из нескольких файлов в один Как собрать данные из нескольких файлов в один Как собрать 100 одинаковых файлов с одной и той же таблицей в один файл с одной большой таблицей? |
Модератор
|
|
29.01.2018, 22:50 | 2 |
выложите пример, показывающий разность структур
одинаков ли номер строки с шапкой
0
|
4064 / 1445 / 399
Регистрация: 07.08.2013
Сообщений: 3,617
|
|
29.01.2018, 22:51 | 3 |
лучше это делать из под файла получателя
или вообще левого файла (обзовем его оболочкой) перед перебором файлов копии запихнуть в папку перебрать копии удалить макрос будет большой и работать будет явно не миллисекунды а минуты а может и десятки минут
0
|
0 / 0 / 0
Регистрация: 29.01.2018
Сообщений: 8
|
|
29.01.2018, 23:13 [ТС] | 4 |
Исходные файлы изначально были жесткой структуры (определенная шапка и строки-столбцы определены),
но пролистав файлы, увидела, что пользователи могут добавлять комментарии и тп - добавляя что строки, что столбцы.... поэтому номера строк и столбцов могут уплыть. а вот заголовки - не меняют, то есть на них поиском можно опираться. не все данные нужны в итоговую т-цу, только несколько столбцов , но с разных файлов, разных листов. понимаю, что он будет долго работать, хоть часы, до хоть весь рабочий день) просто как человек незнакомый с вба - не знаю - от чего начать плясать - чтобы исходный файл не открывать каждый раз на поиск каждой позиции, а открыть , пробежать поиском по всем столбцам получателя... заполнить т-цу файла-получателя.. и закрыть исходный файл. и перейти к след. исходному файлу. есть ли у вба механизм, чтобы несколько поисков в исходном файле записать в т-цу файла получателя, при этом не октрывая много раз исходный файл?
0
|
4064 / 1445 / 399
Регистрация: 07.08.2013
Сообщений: 3,617
|
|
29.01.2018, 23:27 | 5 |
да механизмы - то есть
если в таблице известны названия столбцов но не известен порядок следования этих столбцов то всегда можно эту таблицу считать с определенным следованием столбцов при помощи ADODB рекордсета (т.е. если в исходной табле имена столбцов идут f1 f7 f3 f2 а нужно f1 f2 f3 то рекордсет так их и вытащит f1 f2 f3) но это частности но тут возникает много если названия столбцов должны быть одинаковыми во всех файлах ибо лишний пробел и информацию подхватить не получится названия столбцов желательно должны быть в первой строке листа ни каких объединения ячеек в названиях столбцов для перебора файлов в папке удобно воспользоваться FSO а еще лучше выложить хотя бы два файла источника и файл приемник (соответственно с левыми данными)
0
|
0 / 0 / 0
Регистрация: 29.01.2018
Сообщений: 8
|
|
29.01.2018, 23:43 [ТС] | 6 |
порядок столбцов сохранен, между столбцами могут быть пользователями добавлены ещё столбцы.... ну, или даже какие-то столбцы могут быть удалены.
названия столбцов одинаковы, а вот названия столцбов могут быть в любой строке, так как строки могут быть добавлены( файлы источники и получатели создам и выложу, сейчас под рукой их нет, почитаю пока про рекордсеты и fso) спасибо за помощь и идеи)
0
|
4064 / 1445 / 399
Регистрация: 07.08.2013
Сообщений: 3,617
|
|
29.01.2018, 23:48 | 7 |
про fso тут
http://www.script-coding.com/W... bject.html про adodb (есть еще dao) - ссылку дать не могу т.к. не знаю а вообще это очень большие библиотеки и изучать их придется не один день
0
|
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
|
|
30.01.2018, 00:19 | 8 |
Можно вообще открыть последовательно в цикле все источники, считать из них всю инфу в некий промежуточный объект, в конце из этого объекта всё собранное перегрузить в сводный файл.
Или сперва запомнить куда что в сводный нужно класть, затем открываем в цикле источники и данные кладём куда запомнили, без лишнего поиска. Но без конкретной задачи и файлов - это всё теория...
0
|
15146 / 6419 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
|
|
30.01.2018, 00:21 | 9 |
Не пугай человека!
Можно все встроенными средствами Excel+VBA сделать. Если структура данных не очень корявая, данные листа переносятся ОДНИМ действием - Расширенным фильтром. Он столбцы переставит в заданном порядке. Посмотрите Похожие темы внизу страницы. Приложите файлы-примеры и что должно получиться.
0
|
0 / 0 / 0
Регистрация: 29.01.2018
Сообщений: 8
|
|
30.01.2018, 11:08 [ТС] | 10 |
Спасибо за помошь, вставляю файлы, объекты могут быть на разных листах, на трех, со всех листов объекты вставляем в одну т-цу получатель, объекты разные везде.
0
|
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
|
|
30.01.2018, 11:33 | 11 |
Накидали бы туда что тянуть - ибо сейчас тянуть по факту нечего.
Список объектов есть? Или тянуть все что есть в заголовках, и то что туда вставили 'красным' тоже?
0
|
0 / 0 / 0
Регистрация: 29.01.2018
Сообщений: 8
|
|
30.01.2018, 13:19 [ТС] | 12 |
Накидала придуманных данных, вкладываю.
0
|
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
|
|
30.01.2018, 14:44 | 13 |
А какого вида должен быть результат?
Вот смотрите - есть данные первый файл - первая группа - объект 1 - параметр 1 - Лодка другой файл - первая группа - объект 1 - параметр 1 - ну пускай автомобиль... куда их запихнуть в получатель? Там не предусмотрены файлы и группы, есть только какие-то непонятные номера... Если исходить из того что есть - при переборе файлов-источников собираем словарь ключей файл/лист/объект/параметр с значениями соотв. ячейки, в финале просто выгружаем столбиком №__объект___параметр 1 1|объект 1|Лодка 2|объект 1|автомобиль Сделать реально. Таблицы можно выискивать по позиции ячейки "Характеристики (элементы сравнения)"
0
|
0 / 0 / 0
Регистрация: 29.01.2018
Сообщений: 8
|
|
30.01.2018, 16:47 [ТС] | 14 |
Заполнила получатель по первому исходнику, в идеале должно быть так. второй, в приницпе с таким же содержимым, названия столбцов везде сохраняется, а вот их положение может плавать.
столбец объект будет заполнятся не из файлов-получателей. ему значения будут присвоены потом. остальные столбцы и ячейки - где есть инфа, то есть. непонятные номера в ячейках - это характеристики объектов. в это примере всё равно такие - хоть масса, высота, ширина, цена... и тп. всё равно. просто они или есть или нет. смысл - есть некие данные, заполненные разными людьми, собираются эти файлы, сливаются в одну т-цу.. а потом фильтрами анализируется инфа вот как раз по определенным параметрам. но это уже ср-вами эксель, формулами.
0
|
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
|
|
30.01.2018, 18:04 | 15 |
Т.е. сами объекты вообще не интересны? А как же тогда понимать что нужно тянуть, а что юзер просто так от нечего делать воткнул? Ориентироваться только на то, что шапка заполнена/пустая?
Вообще конечно так даже проще, тут даже словари не нужны. Хотя один привлечь для упрощения работы с заголовками можно. Или коллекцию.
0
|
0 / 0 / 0
Регистрация: 29.01.2018
Сообщений: 8
|
|
30.01.2018, 22:56 [ТС] | 16 |
Тянем из столбца строку. В исходном файле они - по столбцам, а итоговую структуру - нарисовали - по строкам. Объект интересен своими параметрами. ID объекта будет присвоено потом, но по-большому счету сейчас оно не нужно - ну вот по выборке данных которую я сама тут нарисовала-придумала, смысл в том - что подтянуть ВСЕ строки из всех листов всех файлов, а потом их фильтровать.
ну, к примеру, если это этим выдуманным данным - выбрать все синие самолеты и узнать их максимальный вес(размер или другой там любой параметр - цифровой). мне нужно свести все данные , а потом разные статистики по ним собрать. у меня другие данные, но смысл такой. Какая масса у всех самолетов такого интервала цены? какой спрос на велосипеды такой-то ценовой категории? вобщем, какой там средний, максимальный, минимальный параметр по какому-то фильтру (разным фильтрам) какого-то объекта. конечно, для отчета эти данные надо сохранить в этом общем , ОДНОМ ,файле , а идентификатор каждой строке будет присвоен. путанно объясняю, прошу прощения. Добавлено через 2 часа 2 минуты Ориентир - только названия столбцов. они не меняются, содержимое - столбец - под названием столбца (под шапкой), количество столбцов может быть разным. и как во вложенных примерах - могут сдвигаться и вниз , и вверх... и все столбцы и строки... и некоторые столбцы и строки.
0
|
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
|
||||||
31.01.2018, 11:32 | 17 | |||||
Код должен работать из любой книги-инструмента (надстройки или персональной книги), будет копировать на изначально активный лист.
Берёт все xlsx из каталога активного файла. Предварительным списком заголовков столбцов будут те, что есть в наличии в первой строке активного листа. Без предварительной очистки шаблона!
P.S. Проверил работу из другого файла на активном - есть косяк, работает если у самого шаблона другое расширение, например xlsb. Ибо сбивает с толку файл ~$получатель-шаблон.xlsx Ну или нужно дорабатывать чуть код, что пока делать/постить некогда.
0
|
0 / 0 / 0
Регистрация: 29.01.2018
Сообщений: 8
|
|
31.01.2018, 12:34 [ТС] | 18 |
Спасибо огромное, ушла разбираться)
спасибо!
0
|
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
|
|
31.01.2018, 14:03 | 19 |
Как вариант исключения из списка "левых" файлов - сперва составить список всех нужных файлов (сразу исключить всякие "~$*", а их и не будет если файлы закрыты), затем их по этому списку открывать.
0
|
31.01.2018, 14:03 | |
31.01.2018, 14:03 | |
Помогаю со студенческими работами здесь
19
Как собрать 32 разбитых архива Winrar, по 200мб каждый в один большой архив 6 Гб Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |