Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.11.2010, 08:40   #1
evdss
Пользователь
 
Регистрация: 12.10.2010
Сообщений: 66
Вопрос импорт из txt файлов и их обработка

Здравствуйте. Подскажите пожалуйста как решить данную задачку.
как несколько файлов Txt (данные разделены разделителем #), нах-ся в одной папке открыть на разных листах excel с помощью макроса, а наименования листов совпадали с наименованиями файлов.
evdss вне форума Ответить с цитированием
Старый 26.11.2010, 09:12   #2
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

Один из вариантов Сбор данных из множества текстовых файлов с разделителями
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499
VictorM вне форума Ответить с цитированием
Старый 26.11.2010, 09:29   #3
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Другой вариант - выполнить макрос:
Код:
Sub Main()
    Dim ws As Worksheet, myPath As String, myName As String, s As String, a, fso, ts
    Application.ScreenUpdating = False: Set fso = CreateObject("Scripting.FileSystemObject")
    With Application.FileDialog(msoFileDialogFolderPicker)
        .Title = "Укажите папку c txt-файлами": .Show
        If .SelectedItems.Count = 0 Then Exit Sub
        myPath = .SelectedItems(1) & "\"
    End With
    myName = Dir(myPath & "*.txt"): Set ws = ActiveSheet
    Do While myName <> ""
        Set ts = fso.OpenTextFile(myName, 1)
        a = Split(Application.Clean(ts.ReadAll), "#")
        Sheets.Add.Name = fso.GetBaseName(myName)
        Range([A1], Cells(UBound(a) + 1, 1)).Value = Application.Transpose(a)
        ts.Close: myName = Dir
    Loop: ws.Activate
End Sub
Пример использования во вложении. Будут обработаны все txt-файлы в указанной папке.
Вложения
Тип файла: rar Книга1.rar (7.7 Кб, 50 просмотров)
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 26.11.2010, 10:29   #4
evdss
Пользователь
 
Регистрация: 12.10.2010
Сообщений: 66
По умолчанию

Спасибо большое. Только выводиться все в один столбец, а надо текст чтобы распределился по столбцам.
evdss вне форума Ответить с цитированием
Старый 26.11.2010, 10:52   #5
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
...выводиться все в один столбец, а надо текст чтобы распределился по столбцам
Т.е. это я сам должен был угадать?
Выводится все в 1 столбец. Строки разделены символом "#".
Будет пример txt-файла и листа Excel с тем, что должно быть в результате - тогда (и только тогда) будет точный ответ.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 26.11.2010, 10:55   #6
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от evdss Посмотреть сообщение
Спасибо большое. Только выводиться все в один столбец, а надо текст чтобы распределился по столбцам.
Я бы воспользовался для этих целей комбинацией из функций word, words, Replace.
Например: строка "111 111#222 222#333 333"
Тогда при выполнении кода:
Код:
Sub eee()
Dim a As String
a = "111 111#222 222#333 333"
s = Replace(word(Replace(Replace(a, " ", "`"), "#", " "), 2), "`", " ")
End Sub
Получаем в перемененную s="222 222". Все это можно свернуть в функцию.

Ну а дальше все зависит от фантазии.

Код:
'' *** Words ***
'Определяет количество слов в строковой перемнной.
'Аналог команды Rexx.

'На входе:
'str           - Строковая перменная.

'На выходе:
'words         - Количество слов в переменной.

Function words(str) As Long
    
    words = UBound(Split(Application.Trim(Replace(str, vbTab, " ")), " ")) + 1
End Function

'' *** Word ***
'Функция возвращает n-ное слово в указаной строке.
'Аналог команды Rexx.

'На входе:
'str           - Строковая перменная.
'Number        - Номер слова.

'На выходе:
'word          - n-ное слово или пустую строку если слова с таким номером нет.

Function word(str, Number) As String
    On Error Resume Next
    word = Split(Application.Trim(Replace(str, vbTab, " ")), " ")(Number - 1)
End Function
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 26.11.2010, 11:30   #7
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Если предположить (это я опять гадаю), что есть txt-файл в несколько строк, где в каждой строке есть какие-то данные, разделенные символом "#", и требуется получить листы с именами, совпадающими с именами txt-файлов, в которых данные разделены по строкам также, как и в текстовом файле, а каждая строка этого файла разделена по столбцам, с разделителем "#", то макрос будет таким:
Код:
Sub Main()
    Dim i As Long, ws As Worksheet, myPath As String, myName As String, s As String, a, b, fso, ts
    Application.ScreenUpdating = False: Set fso = CreateObject("Scripting.FileSystemObject")
    With Application.FileDialog(msoFileDialogFolderPicker)
        .Title = "Укажите папку c txt-файлами": .Show
        If .SelectedItems.Count = 0 Then Exit Sub
        myPath = .SelectedItems(1) & "\"
    End With
    myName = Dir(myPath & "*.txt"): Set ws = ActiveSheet
    Do While myName <> ""
        Set ts = fso.OpenTextFile(myName, 1)
        Sheets.Add.Name = fso.GetBaseName(myName)
        b = Split(ts.ReadAll, Chr(10))
        For i = LBound(b) To UBound(b)
            a = Split(Application.Clean(b(i)), "#")
            If UBound(a) >= 0 Then Range(Cells(i + 1, 1), Cells(i + 1, UBound(a) + 1)).Value = a
        Next: ts.Close: myName = Dir
    Loop: ws.Activate
End Sub
Пример во вложении.
Вложения
Тип файла: rar Книга1.rar (11.0 Кб, 68 просмотров)
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 29.11.2010, 04:43   #8
evdss
Пользователь
 
Регистрация: 12.10.2010
Сообщений: 66
Радость

извините за некорректную формулировку, но это именно то, что мне нужно было. спасибо!!!
evdss вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Импорт TXT файлов в Excel Per4eLO Microsoft Office Excel 7 08.02.2017 19:33
импорт данных из excel в txt и из txt в excel ESV Microsoft Office Excel 3 19.11.2010 10:29
автоматический импорт txt файлов в exel andreton Microsoft Office Excel 5 01.06.2010 01:29
импорт из txt, работа с массивом данных, экспорт в txt Danara Microsoft Office Excel 4 31.03.2010 00:26
Импорт из txt в MS SQL masterdela БД в Delphi 6 27.03.2010 22:06