Показать полную графическую версию : Распарсить XLS и получить интересующие данные во внешний файл
bagfinder
28-01-2014, 14:05
Есть таблица xls с 5000+ строк следующего вида:
http://habrastorage.org/storage3/92d/d97/b51/92dd97b513d5ad38b1deb20417263498.png
Необходимо сделать интерфейс, чтобы пользователь мог ввести в поле интересующую его фамилию, нажать кнопку и получить файл (txt или же новый xls) с информацией об этом субъекте. Например, пользователь ввел "Герасимова" и получил на выходе файл с содержимым:
http://habrastorage.org/storage3/f2c/9fe/881/f2c9fe881d10cd2c7abc5f991e7e4275.png
Это можно реализовать на VBA, например? Каким образом?
Упакуйте Ваш файл в архив. Прикрепите архив к сообщению.
bagfinder
28-01-2014, 14:38
Сделал
bagfinder
28-01-2014, 17:46
Набросал форму, некоторые тезисы по поводу функционала:
1. Пользователь вводит фамилию в текстовое поле
2. Нажимает кнопку Поиск записей
3. В текстбокс падают строки, где присутствует введенная фамилия
4. При желании, пользователь нажимает на кнопку Запись в файл, происходит экспорт
Примерно так: 109628.
Диапазон преобразован в список. Добавлена форма для фильтрации по выбранной/введённой фамилии, для экспорта отфильтрованного списка в новую рабочую книгу (её сохранение делать не стал).
bagfinder
29-01-2014, 09:28
Диапазон преобразован в список.
Нужно универсальное средство, которое бы подошло для множества документов такого типа.
Макрос можно быстро запустить для другого подобного файла.
bagfinder, а почему Ваши пользователи не используют списки?
Расскажите, как Вы предлагаете определять потребный диапазон? У нас есть ровно четыре варианта — «ручками» и «Selection» + «.UsedRange»/«.CurrentRegion».
bagfinder
29-01-2014, 10:45
а почему Ваши пользователи не используют списки?Эти таблицы присылают уже в готовом виде, так что пользователь просто анализирует полученное.
Ну и уровень владения excel у пользователя нулевой, так что, чем проще и очевиднее интерфейс, тем лучше.
У нас есть ровно четыре варианта — «ручками» и «Selection» + «.UsedRange»/«.CurrentRegion».А нельзя просто сравнить UserForm1.SurnameTextbox.Value с B2-B... и вывести строки со вхождением?
С VBA я не знаком, не знаю, что лучше.
Эти таблицы присылают уже в готовом виде, так что пользователь просто анализирует полученное. »
Есть прямой смысл научить их пользоваться списками.
Ну и уровень владения excel у пользователя нулевой, так что, чем проще и очевиднее интерфейс, тем лучше. »
Горячую клавишу нажать смогут? Или как предполагается вызывать форму на исполнение?
А нельзя просто сравнить UserForm1.SurnameTextbox.Value с B2-B... и вывести строки со вхождением? »
Так проблема в том-то и состоит, чтобы определить:
«B» ли это (а не «C», «D» или «AH»);
с «2» ли это (а не с «3», «4» или «1»);
и главное — а докуда это самое «…»?
Ещё остаются вопросы с выбором конкретного рабочего листа, если их несколько.
С VBA я не знаком, не знаю, что лучше. »
Давайте я опишу, а Вы выберете.
«ручками» — предлагается указать адрес диапазона, с которым будем работать.
«Selection» — существующее выделение. Для простоты будем предполагать простое прямоугольное выделение на одном листе.
«.UsedRange» — использованный диапазон на рабочем листе. От крайней левой верхней использованной ячейки до крайней правой нижней использованной ячейки.
«.CurrentRegion» — заполненный диапазон, считающийся от текущего выделения. Проще всего его представить как прямоугольную область, ограниченную пустыми строками и столбцами по краям.
Типичным является использование следующего сценария — выделить любую ячейку внутри диапазона и вызвать форму. Та начинает работать, например, с Selection.CurrentRegion.
bagfinder
29-01-2014, 11:40
«.UsedRange» — использованный диапазон на рабочем листе. От крайней левой верхней использованной ячейки до крайней правой нижней использованной ячейки.
Как мне видится, это подходящий вариант.
P.S. Рабочий лист один
P.P.S. Первая строка - заголовки (Дата/Время, Фамилия и т.п.), остальное - данные.
P.S. Рабочий лист один »
В предложенном примере — три рабочих листа.
Ответьте на этот вопрос:
Горячую клавишу нажать смогут? Или как предполагается вызывать форму на исполнение? »
bagfinder
29-01-2014, 11:58
В предложенном примере — три рабочих листа.
Насколько я понимаю, данные только на одном.
Горячую клавишу нажать смогут? Или как предполагается вызывать форму на исполнение?
Да, смогут.
Насколько я понимаю, данные только на одном. »
Как его определить среди прочих?
bagfinder
29-01-2014, 12:02
Как его определить среди прочих?Возможно, по имени листа. Лист с данными во всех файлах имеет одинаковое имя.
Возможно, по имени листа. Лист с данными во всех файлах имеет одинаковое имя. »
Лады.
Ну, вот как-то так: 109638. Положите файл «Filter And Export.xls» в папку автозагрузки Excel (для Excel 2003 под Windows XP это будет по умолчанию папка «%UserProfile%\Application Data\Microsoft\Excel\XLSTART»). Горячая клавиша для вызова — «Ctrl-l» (раз у Вас всё равно списками не пользуются).
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC