Новости:

Новая редакция правил форума: 2.4. Если вопрос или ответ содержится во вложенном файле, все-равно кратко описывайте в сообщении вопрос или суть решения. Это необходимо, чтобы тему можно было найти через поиск.

Главное меню

Импорт данных из текстового файла

Автор badhabit, 28.03.2014, 10:22

« назад - далее »

badhabit

День добрый. Подскажите можно ли импортировать данные из текстового файла следующего вида:

ЗАО "РусXXXXXXXXXXXXX" |526221XXXX|52620XXXX|Гашение кредита овердрафта по    |
                       |          |         |кредитному договору №            |
                       |          |         |XXXXXXXXXXXXXXXX от 21.12.2012г. |
                       |          |         |от 21/12/12                      |
Филиал ООО "XXX        |771711XXXX|52620XXXX|Оплата по счету                  |
XXXXXXXXXXX" в г.Нижнем|          |         |50703010009134900XXX о 13.02.12  |
Новгороде              |          |         |за страховую премию по Договору  |
                       |          |         |5070301000913490XXXX. НДС не     |
                       |          |         |облагается.                      |
Закрытое акционерное   |526221XXXX|52620XXXX|Перевод собственных средств для  |
общество               |          |         |пополнения счета, НДС не         |
РусXXXXXXXXXXXXX"      |          |         |облагается.                      |
ФИЛИАЛ ОАО XXXXXXX В   |773102XXXX|52604XXXX|Взимание комиссии за             |
НИЖНЕМ НОВГОРОДЕ       |          |         |предоставление кредита по        |
                       |          |         |договору No  XXXXXXXXXXXXXXXX от |
                       |          |         |13.02.2013г. Распоряжение от     |
                       |          |         |14.02.2013г. Без НДС.            |


так чтобы ёксель "вставлял" многострочные данные из первой и последней колонок в одну ячейку,  а не в несколько... Т.е. чтобы из представленного куска текстового файла получилось только 4 строки в итоговом файле ёкселя...

Adam

Каждая строчка в текстовом файле заканчивается сиволом конца строки, что служи ёкселю сигналом для перехода на новую строчку. Так что вариант - все должно располагаться в одной текстовой строке, типа так:
Филиал ООО "XXX XXXXXXXXXXX" в г.Нижнем Новгороде |771711XXXX|52620XXXX|Оплата по счету 50703010009134900XXX о 13.02.12 за страховую премию по Договору 5070301000913490XXXX. НДС не облагается.  |

kuklp

badhabit, читайте Правила и выкладывайте пример. Иначе закрою тему.
Я, как всегда, чертовски адекватен... Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771

badhabit

Цитата: KuklP от 29.03.2014, 17:11
badhabit, читайте Правила и выкладывайте пример. Иначе закрою тему.
Извините, не понял, пример чего я должен выложить?...

Как понимаю, моя задача заключается в корректном преобразовании моего текстового файла из "многострочного" в "однострочный"... Может кто подскажет как это можно сделать?...

kuklp

Так и выложите пример текстового файла. Хотя могу сказать сразу - хлопотно будет в таком виде преобразовывать. Но возможно в принципе.
Я, как всегда, чертовски адекватен... Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771

badhabit

Ясн, просто к сообщению нельзя прикреплять .txt-файлы вот я его в сообщение и написал. Приложил, только расширение .bas сделал...

RAN

Делим по переводу строки, определяем границы блока, внутри блока делим строки по разделителя "|", собираем новую строку, пишем в новый текст. И так до конца файла. В результате получаем txt нужного вида.

kuklp

Андрюш, я так понял, результат надо в xls. Поэтому ничего не делим, импортируем в эксель по вертикальному табулятору(|), а там уже макросом обрабатываем, ориентируясь на 2-столбец. Т. е. по нему определяем блоки первого и 4-го столбца, к-рые надо слить. Или тоже делаем в массиве. Но писать пока нет времени, так что если у тебя есть желание... :)
Я, как всегда, чертовски адекватен... Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771

RAN

Токмо еще кодировку сменить.  :D

kuklp

Не привередничай, это макрорекордером можно:
Sub Макрос2()
    Workbooks.OpenText Filename:="H:\ex.txt", Origin:=866, StartRow:=1, _
        DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter _
        :=False, Tab:=True, Semicolon:=False, Comma:=False, Space:=False, _
        Other:=True, OtherChar:="|", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array _
        (3, 1), Array(4, 1), Array(5, 1)), TrailingMinusNumbers:=True
End Sub

:)
Я, как всегда, чертовски адекватен... Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771

kuklp

Андрей желанием не воспылал, придется мне. :) Появилось немного времени.
Оба файла д.б в одной папке. Файл называется ex.txt.
Public Sub www()
    Dim a, i&, n&, j&
    Workbooks.OpenText Filename:=ThisWorkbook.Path & "\ex.txt", Origin:=866, StartRow:=1, _
        DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter _
        :=False, Tab:=True, Semicolon:=False, Comma:=False, Space:=False, _
        Other:=True, OtherChar:="|", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array _
        (3, 1), Array(4, 1), Array(5, 1))
    a = ActiveSheet.[a1].CurrentRegion.Value
    ActiveWorkbook.Close 0
    ReDim b(1 To 4)
      For i = 1 To UBound(a)
        If Len(Trim(a(i, 2))) Then
            If n Then
                For j = 1 To 4
                    a(n, j) = Application.Trim(b(j))
                Next
            End If
            n = n + 1
            For j = 1 To 4: b(j) = a(i, j): Next
        Else
            b(1) = b(1) & " " & a(i, 1): b(4) = b(4) & " " & a(i, 4)
        End If
    Next
    For j = 1 To 4
        a(n, j) = Application.Trim(b(j))
    Next
    [a4].Resize(n, 4) = a
End Sub

Я, как всегда, чертовски адекватен... Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771

badhabit

Спасибо большое, завтра попробую. Напишу по результатам...

badhabit

все понятно и работает! Спасибо!