Форум программистов, компьютерный форум, киберфорум
Наши страницы
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
Ride20
1 / 1 / 0
Регистрация: 26.12.2010
Сообщений: 41
1

Выгрузка данных из txt файла и формирование таблиц в Excel

29.07.2015, 12:26. Просмотров 2025. Ответов 15
Метки нет (Все метки)

Здравствуйте, Форумчане! Вопрос состоит вот в чём, у меня имеются данные в формате txt файла, необходимо с помощью макроса выгружать данные из этого файла и формировать таблицы с ними. Выбор файла должен быть свободным и на усмотрение пользователя, а книга Excel при открытии автоматически запускала макрос и предлагала нажать на необходимые для операции кнопки (Выбор файла; Выгрузить данные; Выход). Я сделал макрос для выгрузки данных из txt файла, так же сделал кнопку позволяющую выбирать txt файлы пользователем в любой папке на его усмотрение, но не смог привязать её к кнопке "Выгрузить данные", так же проблема в том, что в создающейся таблице имеются пустые ключевые строки "Табельный номер" и эти строки необходимо полностью автоматически удалять и поднимать нижнюю строку на место пустой, чтобы не создать разрывы. Подскажите как лучше всего это сделать, пожалуйста. Файл txt прилагаю и сам файл с недоработанным макросом.

База данных.TXT

Для выгрузки(Экспериментальная версия).rar
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.07.2015, 12:26
Ответы с готовыми решениями:

Чтение данных из txt файла и запись их в Excel
помогите пожалста. Такая вот проблемка. Есть файл (*.txt) в нём такой вот текст примерно:...

Сформировать макрос по выгрузке данных из файла excel в файл txt
Здравствуйте!!!Срочно!!! Помогите пожалуйста сформировать макрос по выгрузке данных из файла excel...

Перенос данных из файла .txt в таблицу Excel
Ребята, нужна помощь. Надо выгрузить часть данных (номер карты, сумму, ФИО)из txt файла в...

Delphi и Excel. Генерация номеров и выгрузка в txt
Добрый. Имею таблицу excel, которая содержит диапазон значений вида 000001-001000, следом...

Выгрузка данных из таблиц
В informix есть возможность выгружать данные из таблиц в текстовый файл с разделителями следующим...

15
Alex77755
10941 / 3431 / 590
Регистрация: 13.02.2009
Сообщений: 10,182
29.07.2015, 23:02 2
Я бы отказался полностью от функций екселя открытия текстового файла, а открыл древним способом
Например с разбивкой в массив по стокам
Visual Basic
1
a=Split(CreateObject("Scripting.FileSystemObject").Getfile(Name).OpenasTextStream(1).ReadAll, vbNewLine)
А потом обработать массив строк

Добавлено через 10 минут
И потом: Что толку, что файл выбран?
Ведь путь нигде не сохранён!
На строку
Visual Basic
1
 With ActiveSheet.QueryTables.Add("CommandButton3_Click")
вообще ругается!

Добавлено через 8 минут
И потом не понятно что принимать к обработке?
Какие строки?
Только те где есть таб.№?
0
Hugo121
6401 / 2467 / 441
Регистрация: 19.10.2012
Сообщений: 7,340
30.07.2015, 00:11 3
Вообще непонятно зачем это всё и в каком виде в итоге нужен результат работы.
0
Ride20
1 / 1 / 0
Регистрация: 26.12.2010
Сообщений: 41
31.07.2015, 05:47  [ТС] 4
К обработке надо принимать всю информацию находящуюся в txt файле, но при выгрузке этой информации в Excel он должен автоматически разбивать эти массивы строк на столбцы и по возможности учитывать длину слов в столбцах, чтобы не получалось так, что одно ФИО очень длинное и часть его переходит в столбик с табельным. Присутствуют строки, где отсутствует табельный номер у людей, не понимаю как сделать так, чтобы эти люди вместе со всеми по ним данными автоматически удалялись и остались лишь те, у кого есть табельный номер. При этом количество людей в списке постоянно разное и надо привязаться именно к тому факту, что удаляться люди с пустыми табельными будут до самого конца списка, а не как я предполагал сделать - привязкой к интервалу ячеек Excel. Выбор файла я сделал более-менее, но никак не могу привязать эту кнопку к кнопке Выгрузка данных, попробую еще поискать про это информацию, может получится всё-таки.
0
31.07.2015, 05:47
Alex77755
10941 / 3431 / 590
Регистрация: 13.02.2009
Сообщений: 10,182
31.07.2015, 07:16 5
Как вариант
0
Вложения
Тип файла: rar Для выгруз.rar (60.1 Кб, 18 просмотров)
Ride20
1 / 1 / 0
Регистрация: 26.12.2010
Сообщений: 41
31.07.2015, 11:17  [ТС] 6
Вариант хороший, но если уже конкретно, то смысл таков, я теперь не беру табельные номера и вместо них использую подразделения, от автозапуска формы VB я тоже отказался и сделал всё в одной кнопке, но проблемы те же с формированием таблицы. Я скинул вариант как всё должно выглядеть внешне и файл мой, который пока так не может сделать всё. Таблица может быть из 9000 строк и необходимо, чтобы существующие столбцы после разделения и формирования еще и выделялись границами, а время пребывания на объекте выглядело как в эталонном варианте внешнего вида "Для выгрузки(Прототип)(v.2.0)(Как должно быть)". Теперь сотрудники должны удаляются все, кроме тех, у кого в подразделении присутствует слово "Цех ...". Еще границы таблицы надо как-то привязать к словам, чтобы в независимо от размера текста они охватывали всю таблицу от начала до конца.

Разработка.rar
0
Ride20
1 / 1 / 0
Регистрация: 26.12.2010
Сообщений: 41
01.08.2015, 14:45  [ТС] 7
Ваш код хорош, но без комментариев мне в нём тяжело разобраться) Как осуществляется в нем проверка на наличие текста в каждой ячейке? Я заметил, что если список продолжить, то дальше он не учитывается в обработке, возможно ли осуществить выгрузку данных и очистку от ненужного до самого конца текста в файле независимо от размера информации в нем?
0
Alex77755
10941 / 3431 / 590
Регистрация: 13.02.2009
Сообщений: 10,182
01.08.2015, 16:57 8
Вся проблема в формате файла
Я сделал код именно для требований указанных в вопросе
Если что не понятно смотри Краткие описания основных функций и команд VB
Или задавыай конкретнее вопрос
0
Ride20
1 / 1 / 0
Регистрация: 26.12.2010
Сообщений: 41
01.08.2015, 18:03  [ТС] 9
Если конкретно, то возможно ли создать процедуру, которая будет вытаскивать всю информацию из txt файла но начиная со слова Сотрудник и заканчивать на последнем времени пребывания, а то при выгрузке информации попадается еще лишняя информация сверху таблицы с данными и после неё?
0
Alex77755
10941 / 3431 / 590
Регистрация: 13.02.2009
Сообщений: 10,182
02.08.2015, 04:07 10
Если конкретно, то возможно
0
Alex77755
10941 / 3431 / 590
Регистрация: 13.02.2009
Сообщений: 10,182
02.08.2015, 04:23 11
И какая инфа лишняя?
0
Миниатюры
Выгрузка данных из txt файла и формирование таблиц в Excel  
Ride20
1 / 1 / 0
Регистрация: 26.12.2010
Сообщений: 41
02.08.2015, 06:51  [ТС] 12
Именно тут нету ничего лишнего, но сейчас я отказался от Табельного номера и вместо него сделал Подразделения, так же добавил строку Время пребывания на объекте после каждой фамилии. Когда я включаю макрос, то выгружается не вся информация. Вот этот файл попробуй выгрузить, в нём это заметно.
Кликните здесь для просмотра всего текста
0
Alex77755
10941 / 3431 / 590
Регистрация: 13.02.2009
Сообщений: 10,182
02.08.2015, 07:39 13
Завтра будет файл другой структуры?

Добавлено через 8 минут
ВЕСЕЛКОВ МИХАИЛ АРКАДЬЕВИЧ родился на производстве?
Есть только уход!

Добавлено через 3 минуты
но сейчас я отказался от Табельного номера
Если так легко переделать структуру файла txt, то уж сделай её более обрабатываемой

Добавлено через 22 минуты
Хотя бы ФИО пиши в одной строке, а не в 2

КОНДРАТЬЕВ ВЛАДИМИР Цех 35 Приход 06:58:38 27/07/15
АЛЕКСАНДРОВИЧ
КОНДРАТЬЕВ ВЛАДИМИР АЛЕКСАНДРОВИЧ Цех 35 Приход 06:58:38 27/07/15

Добавлено через 3 минуты
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
Sub Выгрузка()
Dim A, S, i, T, RZ(), j, k, L, EST As Boolean
S = CreateObject("Scripting.FileSystemObject").Getfile(FIL).OpenasTextStream(1).ReadAll
Do While InStr(1, S, "  ") > 0: S = Replace(S, "  ", " "): Loop
A = Split(S, vbNewLine): j = 0: ReDim RZ(UBound(A), 9)
RZ(0, 0) = "Фамилия": RZ(0, 1) = "Имя": RZ(0, 2) = "Отчество": RZ(0, 5) = "Действие": RZ(0, 6) = "время": RZ(0, 7) = "Дата"
For i = 0 To UBound(A)
    If Len(A(i)) > 0 Then
      T = Split(Trim(A(i)), " ")
      If EST Then
        If UBound(T) = 2 Then
          j = j + 1
              For k = 0 To 2
                  RZ(j, k + 5) = T(k)
              Next k
          GoTo 1
        Else
            EST = False
        End If
    End If
      
      If UBound(T) > 2 Then
'        If IsNumeric(T(3)) Then
        If InStr(1, T(3), "цех", vbTextCompare) > 0 Then
        EST = True
          j = j + 1
              For k = 0 To 2
                  RZ(j, k) = T(k)
              Next k
              For k = 4 To UBound(T)
                  If InStr(1, T(k), "Приход", vbTextCompare) > 0 Or InStr(1, T(k), "Приход", vbTextCompare) > 0 Then
                    RZ(j, 5) = T(k): RZ(j, 6) = T(k + 1): RZ(j, 7) = T(k + 2)
                    Exit For
                  End If
              Next k
        End If
      End If
    End If
1 Next i
Cells.ClearContents
Cells.Borders.LineStyle = 0
Range("A1").Resize(j + 1, 8) = RZ
Range("A1").Resize(j + 1, 8).Borders.LineStyle = 1
Cells.Columns.AutoFit
End Sub
1
Ride20
1 / 1 / 0
Регистрация: 26.12.2010
Сообщений: 41
02.08.2015, 07:48  [ТС] 14
Нет, у него в подразделении стоит 02, это какой-то отдел, но интересуют только люди у которых присутствует слово Цех в подразделении. Структура изменилась по определенным условиям. Сам файл выгружается из программы в формате txt и сколько я не бился головой об стену, она только в таком виде и выгружается. Там нету даты рождения, а есть столбцы:
1. Сотрудник;
2. Подразделение;
3. Должность (пустой столбик пока, в будущем туда будут записываться номера отделов из одного цеха);
4. Пустой столбик, который можно назвать - Действие (это приход и уход);
5. Время
6. Дата
Уход как и приход может быть у сотрудника один или же повторяться по 4-10 раз, в зависимости от того, сколько раз он входил и выходил за территорию за 1 день, бывает такое, а вот наличие лишь одного Ухода или прихода у человека указывает на сбой в системе, это не страшно, главное показать эту информацию.
Я пытался сделать структуру более обрабатываемой, применяя в самой программе фильтры, но она упрямо написана и на неё они не действуют. Попробуй моей программой открыть этот файл (12(разработка)), на кнопку Подразделения нажми только.

Кликните здесь для просмотра всего текста
0
Alex77755
10941 / 3431 / 590
Регистрация: 13.02.2009
Сообщений: 10,182
02.08.2015, 08:05 15
Если отчество в одной строке с именем и фамилией, то ысё правильно.
А так можешь доделать что бы брало со следующей строки отчество
0
Миниатюры
Выгрузка данных из txt файла и формирование таблиц в Excel  
Ride20
1 / 1 / 0
Регистрация: 26.12.2010
Сообщений: 41
02.08.2015, 08:07  [ТС] 16
Ну вообще да. Спасибо за помощь, дальше уже доделаю сам)
0
02.08.2015, 08:07
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.08.2015, 08:07

Выгрузка данных из базы в txt формате
Доброго времени. Помогите сделать выгрузку данных из базы в txt, сколько не искал, нашёл только...

Формирование TXT файла
есть код который формирует txt файл с данными, по нажатии пользователем кнопки этот файл...

Формирование txt файла
День добрый! Помогите разобраться с задачей: имеется, скажем, пять папок, в каждой из которых есть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru