Форум программистов, компьютерный форум, киберфорум
Microsoft Office
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 28.04.2021
Сообщений: 27
1

Импорт данных из txt в excel vba?

09.05.2021, 08:03. Показов 884. Ответов 30
Метки нет (Все метки)

Добрый день. Нужно загрузить данные из отчета ( txt файл) в excel для дальнейшей работы с ним ( в таблице excel хранятся данные за все время работы, которые пополняются каждый день). В идеале, чтобы данные из тхт сохранялись сразу в умную таблицу .. далее чз впр я свяжу данные между собой чз другой макрос. Заранее благодарю !
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.05.2021, 08:03
Ответы с готовыми решениями:

Импорт данных из dbf в excel через VBA (Provider=vfpoledb)
Добрый день. Помогите корректно импортировать данные из вложенного dbf-файла в excel, используя...

Импорт txt в Excel
Здравствуйте! Имеется txt документ. Нужен макрос, которы будет конвертировать информацию из него в...

Импорт txt в excel
Добрый день! Есть макрос, который импортирует txt файл в excel, подскажите, пожалуйста, как...

Импорт txt в excel
Добрый день! Если кто-нибудь знает, подскажите, пожалуйста, как решить данную задачу: у меня есть...

30
1681 / 838 / 168
Регистрация: 13.12.2016
Сообщений: 2,854
Записей в блоге: 3
11.05.2021, 19:44 2
ответ предполагается такой же абстрактный как и вопрос?
примеров гора по каждой из непонятных вам позиций. А уж если и связать дальше сможете, то зачем тему делать?
Заранее пожалуйста.
(моя подпись в подспорье)
0
1 / 1 / 0
Регистрация: 28.04.2021
Сообщений: 27
11.05.2021, 20:19  [ТС] 3
Примеров гора? Буду рад хотя бы одному удачному примеру
0
506 / 171 / 84
Регистрация: 30.01.2020
Сообщений: 451
11.05.2021, 21:00 4
Цитата Сообщение от Valeriy2c Посмотреть сообщение
Буду рад хотя бы одному удачному примеру
Как загрузить кучу CSV в книгу Excel?
Перенос данных из текстовых файлов в excel
0
1681 / 838 / 168
Регистрация: 13.12.2016
Сообщений: 2,854
Записей в блоге: 3
11.05.2021, 21:57 5
Цитата Сообщение от Valeriy2c Посмотреть сообщение
Буду рад хотя бы одному удачному примеру
вот свежий мой. Писал для себя давеча (список файлов в листбокс)
Visual Basic
1
2
3
4
5
6
7
8
9
Private Sub Form_Load()
s = Dir("\\192.168.88.2\Data\IT\Soft\-s\*.cvs")
'On Error Resume Next
Do While Len(s) > 0
   
    listbox1.AddItem Item:=s  
    s = Dir
Loop
End Sub
Добавлено через 14 минут
второй пример менее понятен возможно. Он читает выделенный файл переменную и свободное поле из выбранного листбокса

Visual Basic
1
2
3
Dim objFileSys As Object, sS As String
    Set objFileSys = CreateObject("Scripting.FileSystemObject")
list2 = objFileSys.OpenTextFile("\\192.168.88.2\Data\IT\Soft\-s\" & listbox1.Value, Format:=0).ReadAll
0
1 / 1 / 0
Регистрация: 28.04.2021
Сообщений: 27
12.05.2021, 09:17  [ТС] 6
Не работает(
Может тут тип файла Cvs, а мне нужен тхт?
0
1681 / 838 / 168
Регистрация: 13.12.2016
Сообщений: 2,854
Записей в блоге: 3
12.05.2021, 09:34 7
Цитата Сообщение от Valeriy2c Посмотреть сообщение
Не работает(
А у меня работает! Что тут скажеш...
Может покажите свои неработающие потуги?
0
506 / 171 / 84
Регистрация: 30.01.2020
Сообщений: 451
12.05.2021, 09:55 8
Цитата Сообщение от Valeriy2c Посмотреть сообщение
Может тут тип файла Cvs, а мне нужен тхт?
csv, xml, json - это тоже txt. Просто для всех из них имеются правила структурирования информации. Определитесь со структурой своего txt, и разбирайте его, слегка переделав под вашу логику любой из вышеприведённых примеров. Что сложного? Вроде всё элементарно, каждая строчка снабжена подробными комментариями. Достаточно лишь захотеть разобраться, определить какой логике соответствует структура информации в вашем txt и начать читать, пробовать и задавать вопросы уже по конкретным затыкам вашего конкретного кода по обработке вашего конкретного txt.
0
1 / 1 / 0
Регистрация: 28.04.2021
Сообщений: 27
12.05.2021, 10:49  [ТС] 9
Что сложного слить работающий макрос?
0
506 / 171 / 84
Регистрация: 30.01.2020
Сообщений: 451
12.05.2021, 10:59 10
Цитата Сообщение от Valeriy2c Посмотреть сообщение
Что сложного слить работающий макрос?
Вот сверху лежат работающие. По моим ссылкам работающие. Что сложного - разобраться, и подправить любой из этих работающих под ваш секретный txt?
0
1 / 1 / 0
Регистрация: 28.04.2021
Сообщений: 27
12.05.2021, 11:05  [ТС] 11
Не хочет
0
Миниатюры
Импорт данных из txt в excel vba?   Импорт данных из txt в excel vba?  
506 / 171 / 84
Регистрация: 30.01.2020
Сообщений: 451
12.05.2021, 11:16 12
Цитата Сообщение от Valeriy2c Посмотреть сообщение
Не хочет
Ну. Вы хотя бы прочли, и попытались понять то, о чём вам сообщает отладчик?
В первом случае макрос добавляет строки, считанные из текстового файла в листбокс. Вам нужно именно в листбокс писать ваши данные? Тогда его нужно предварительно создать. Если нужно писать в ячейки - замените листбокс на обращение к ячейке, в которую будете писать.
Во втором случае у вас просто синтаксическая ошибка, о чем вам и сообщает отладчик. Перечитать строку и поправить - на мой взгляд первое, что должно произойти.
И это всё, что вы попробовали из богатого предложенного выбора, даже не пытаясь прочитать информацию, которую любезно сообщает отладчик? Странно.
0
733 / 435 / 148
Регистрация: 22.12.2015
Сообщений: 1,309
12.05.2021, 11:18 13
Valeriy2c, в конструкции CreateObject упустили букву e.
0
1 / 1 / 0
Регистрация: 28.04.2021
Сообщений: 27
12.05.2021, 11:43  [ТС] 14
Слушай умник я не шарю в макросах, а если и буду когда-нибудь в них разбираться и ко мне обратятся за советом, я обязательно дам простой, развёрнутый ответ на который не будет возникать ещё много вопросов.
В отличае от основной работы я занимаюсь этой таблицей которая нафиг мне не упала и там где у меня что-то не получается я прежде чем обратиться сам пытаюсь дойти до решения проблемы . Тут уже шестая тема мною созданная и ни разу мне никто не помог с решением проблемы . Первое время я разбирался в том что мне скидывают , а потом понял что проще с нуля разобраться чем разбирать все что такие умники вроде тебя намудрили.
Мне нужен простой макрос в котором не надо разбираться - написал и забыл в чем проблема умник?
0
506 / 171 / 84
Регистрация: 30.01.2020
Сообщений: 451
12.05.2021, 11:44 15
Valeriy2c, Вот ещё работающий вариант на VBS (не VBA), который позволяет быстро преобразовывать txt файлы в xlsx.
Для работы надо:
1 Код сохранить в текстовый файл с расширением .vbs в кодировке win-1251
2 Поменять адрес папки, в которой лежат txt-файлы. (переменная txtDir)
3 Добавить свои разделители полей в текстовом файле в переменную MayBeRazdelitel
4 Поменять имя создаваемого xlsx файла на нужное в переменной xlFNam
5. Проверить, что .txt файлы лежат в заданной папке
6. Ткнуть на файл с расширением .vbs
7. Искать xlsx-файл с заданным именем в той же папке, где лежат txt-файлы.
8. Радоваться.

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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
dim xls, wb, iSheet, FSO, oDIR, TXtDir, oFiles, fLog, xlFnam
txtDir = "D:\Ваша папка\Где лежат\файлы txt" 'заменить на папку в которой лежат файлы *.txt
Set FSO = CreateObject("Scripting.FileSystemObject")
xlFNam = FSO.Buildpath(TxtDir, "work_" & cstr(Year(date)) & "_"& Right("0"&Cstr(Month(date)),2) & "_"& Right("0"&Cstr(Day(date)),2))
if FSO.FileExists(xlFnam & ".xlsx") Then
  wscript.echo xlFnam & vbCRLF & "Уже есть!" & vbCRLF & "Тут кто-то был до меня? Признавайся!" & vbCRLF & "Я отказываюсь работать! бебебе!"
  Wscript.quit
end if
 
Set oDIR = CreateObject("Shell.Application").NameSpace(txtDir) 'наша папка
Set oFiles = oDir.Items() 'всё, что в папке
oFiles.Filter 64, "*.txt" 'смотрим только на файлы с такой маской
if oFiles.Count > 0 Then ' если есть
  Set Xls = CreateObject("Excel.Application") 'создадим объект excel
  Set fLog = FSO.CreatetextFile(xlfnam&".log")
  xls.Application.ScreenUpdating = False
  xls.Application.Visible = True ' сделаем видимым процесс. После окончания отладки лучше поставить в False
  flog.WriteLine  Cstr(Time()) & " - Start"
  Set wb = xls.Workbooks.Add ' создадим новый файл
  if wb.sheets.count < oFiles.Count+1 then ' Если надо добавить листов - добавим сколько надо
    wb.Sheets.Add null,null,oFiles.Count- wb.sheets.count+1
  end if
  wb.Sheets(1).Name = "Список"
  for iSheet = 0 to oFiles.Count-1 Step 1 ' перебираем файлы
    CopyFileToSheet oFiles.Item(iSheet).Path, wb.Sheets(iSheet+2) ' и вызываем подпрограмму копирования файла в лист
    flog.WriteLine  Cstr(Time()) & "  " & FSO.GetbaseName(oFiles.Item(iSheet).Path) 
    wb.Sheets(1).Cells(iSheet+1,1).Value = FSO.GetbaseName(oFiles.Item(iSheet).Path)
    wb.Sheets(1).Hyperlinks.Add wb.Sheets(1).Cells(iSheet+1,1), "#'" & FSO.GetbaseName(oFiles.Item(iSheet).Path) &"'!A1"
    wb.Sheets(iSheet+2).Hyperlinks.Add wb.Sheets(iSheet+2).Cells(1,1), "#'Список'!A" & Cstr(iSheet+1)
  Next
  xls.Application.ScreenUpdating = True
  wb.saveAs xlfnam, 51
  xls.quit ' закроем Excel после сохранения файла
  xls = null 
  wscript.echo "Я кончила! А ты?"
end if
WScript.Quit ' выйдем из скрипта
 
' определение формата ячейки в зависимости от значения
Function FindRazdelitel(xStr)
  dim ii, cc, MayBeRazdelitel
  MayBeRazdelitel=";"& vbTab
  FindRazdelitel = ""
  for ii = 1 to Len(MayBeRazdelitel) step 1
    cc = Mid(MayBeRazdelitel,ii,1)
    if InStr(xStr,cc) > 0 Then
      FindRazdelitel = cc
      exit for
    end if
  next
end Function
' Подпрограмма копирования одного файла на лист
Sub CopyFileToSheet(fnam, sh) 'передаваемые параметры: полное имя файла с путём и объект листа Excel
  dim ff, iRow, MaxCol, xStr, Arr1(100,10),Arr2, ii, jj, razdelitel 'определяем переменные
  sh.name = FSO.GetBasename(fNam) ' пишем имя файла без расширения в имя листа
  Set ff = FSO.OpenTextFile(fNam,1)' откроем файл в кодировке 1251
  sh.Columns(1).NumberFormat = "#,##0" ' зададим формат ВСЕХ колонок
  sh.Columns(2).NumberFormat = "@"
  sh.Columns(3).NumberFormat = "#,##0"
  sh.Columns(4).NumberFormat = "@"
  sh.Columns(5).NumberFormat = "Short Date"
  sh.Columns(6).NumberFormat = "#,##0"
 
  iRow = 1
  MaxCol = 1
  razdelitel = ""
  ii = 0
  jj = 0
  while not ff.AtEndOfStream ' цикл пока не дойдем до конца файла
    xStr = ff.readline 'читаем очередную строку
    if razdelitel = "" Then 'если разделитель ещё не назначен
      razdelitel = FindRazdelitel(xStr)
    end if
    if razdelitel <> "" Then ' если определён разделитель
      Arr2 = Split(xStr,Razdelitel) 'разбиваем строку на массив строк
      if maxCol <= uBound(Arr2) Then ' если текущий счётчик числа колонок меньше числа элементов полученого массива
        MaxCol = uBound(Arr2) +1 'будет новый счётчик числа колонок
      end if
      for ii = 0 to UBound(Arr2) step 1
        Arr1(jj,ii) = Arr2(ii) 'переносим строку в массив на 100 строк
      next
    end if
    jj = jj + 1
    if jj = 100 then ' если это уже сотая строка 
      sh.Range("A"&Cstr(iRow)).Resize(100,MaxCol).Value = Arr1 'записываем массив оптом в xlsx
      iRow = iRow + 100 ' увеличиваем на 100 счётчик строк
      jj = 0 
      MaxCol = 1
    end if
  wend ' конец цикла чтения строк файла
  if jj > 0 then 'если остался частично заполненный массив
    sh.Range("A"&Cstr(iRow)).Resize(jj,MaxCol).Value = Arr1 ' перепишем и его.
  end if
  ff = null 'освободим текстовый файл
End Sub
0
1 / 1 / 0
Регистрация: 28.04.2021
Сообщений: 27
12.05.2021, 11:53  [ТС] 16
Это слишком сложно. Нужно, чтобы специалист женского пола открыл отчет.xls ткнул на кнопочку к которой привязан макрос и все данные из текстового файла (отчёт за предыдущий день ) подтянулись в эту таблицу в excel , все ! не нужно городить там и менять что-то
0
506 / 171 / 84
Регистрация: 30.01.2020
Сообщений: 451
12.05.2021, 12:09 17
Цитата Сообщение от Valeriy2c Посмотреть сообщение
Мне нужен простой макрос в котором не надо разбираться - написал и забыл в чем проблема умник?
Так вас уже который ваш тред просят прочесть правила заведения тем и не единожды на простых примерах пытались объяснить, что вы делаете не так. Поскольку информации для последующего решения в ваших стартовых топиках ровно НОЛЬ. ОК, предположим невозможно выкладывать исходные файлы, а создать аналогичный с совершенно левой информацией ручками, и теми же ручками набить то, что хотелось бы из этого получить - лень/нету времени, поскольку вы сами можете доработать более-менее работающие варианты. Тогда вам дают похожие работающие решения, из которых любой желающий легко может сделать решение, заточенное под его задачу. Вам и это не катит - вы ругаетесь, что вам подсовывают не то - оно без изменений не работает в вашем конкретном случае, более конкретную информацию о котором вы предоставить не хотите.
Я не буду опять приводить аллегорий. В прежних ваших темах их достаточно уже.

Добавлено через 9 минут
Цитата Сообщение от Valeriy2c Посмотреть сообщение
Это слишком сложно. Нужно, чтобы специалист женского пола открыл отчет.xls ткнул на кнопочку к которой привязан макрос и все данные из текстового файла (отчёт за предыдущий день ) подтянулись в эту таблицу в excel
Что сложно? Девочка кладёт файл в нужную папку и нажимает иконку на рабочем столе. Получает готовый новый excel файл в той же папке.
Если нужно добавлять к какому-то файлу, а не создавать новый - достаточно поменять одну строку 19, открывая существующий файл, вместо создания.
Это готовый работающий код, созданный именно для элементарных действий сотрудниками женского пола. Преобразует txt, заранее известной структуры, каждый в свой отдельный лист в xlsx в соответствии с заранее определённой логикой.
0
1 / 1 / 0
Регистрация: 28.04.2021
Сообщений: 27
12.05.2021, 12:10  [ТС] 18
Sub txt()
Dim a, i&, tmp
a = Split(CreateObject(“Scripting.FilesystemObject”).Getfile(“C: бла бла бла.txt”).OpenasTextStream(1).readall, vbNewLine)
For i = 0 To UBound(a)
a(i) = Replace(a(i), “”””, “”)
tmp = Split(a(i), vbTab)
Cells(i + 1, 1).Resize(1, UBound(tmp)) = tmp
Next
End Sub


Вот простой макрос единственный минус он загружает не все информацию .. наименование он не подгружает в excel.. может его допилить?!
0
506 / 171 / 84
Регистрация: 30.01.2020
Сообщений: 451
12.05.2021, 12:13 19
Цитата Сообщение от Valeriy2c Посмотреть сообщение
наименование он не подгружает в excel.. может его допилить?!
Это было нужно? А сразу спросить это в ТС - не судьба была?
Visual Basic
1
ActiveSheet.Name = “C: бла бла бла.txt”
Единственное, на имена листов есть определённые ограничения - не более 31 символа, и не все спецсимволы можно использовать
0
1 / 1 / 0
Регистрация: 28.04.2021
Сообщений: 27
12.05.2021, 12:19  [ТС] 20
Ещё есть варианты ?
0
Миниатюры
Импорт данных из txt в excel vba?  
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.05.2021, 12:19

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Импорт текста из txt в excel
Здравствуйте, Есть файл txt_01.txt, из него необходимо скопировать содержимое Содержимое...

Импорт из Excel или Txt в БД Лотус
Вроде тема поднимлась так или иначе, но то что нужно не нашла. Пожалуйста, поделитесь скриптом,...

VBA парсинг и импорт в столбец excel
Всем привет. Решил сделать парсинг сайта: https://2gis.ru/ekaterinburg/rubrics На данный момент...

Импорт текста в Excel средствами VBA
Здравствуйте! Нужно импортировать в Excel текстовые файлы с разделителями (например логи Squid)...

Импорт значений из pdf в Excel VBA
Здравствуйте ! А не смогли бы вы подсказать где найти информацию по копированию значений из...

ADP VBA импорт из Excel - ошибка сортировки
Всем привет! Есть вот такой код (нашел на просторах сети, адаптировал под свои данные): Private...


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

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

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