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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.02.2015, 15:02   #1
Yuri Toropchin
Новичок
Джуниор
 
Регистрация: 10.02.2015
Сообщений: 3
По умолчанию Преобразование выгрузки в CSV

Есть текстовый файл выгрузки вида:

CFullName: тексттексттексттекст
CShortName:тексттексттексттекст
CPhone:тексттексттексттекст
CFax:тексттексттексттекст
CZip:тексттексттексттекст
CEmail:тексттексттексттекст
CTelex:тексттексттексттекст
CAddress:тексттексттексттекст
CTopic:тексттексттексттекст
CFCDate:тексттексттексттекст
CFCPlace:тексттексттексттекст
CAccManager:тексттексттексттекст
CSize:тексттексттексттекст
CMainPur:тексттексттексттекст
Author:тексттексттексттекст
CCountry:тексттексттексттекст
CRegion:тексттексттексттекст
CCity:тексттексттексттекст
CCategory:тексттексттексттекст
CRelType:тексттексттексттекст
CRelState:тексттексттексттекст
CImp:тексттексттексттекст
cfn:тексттексттексттекст
csn:тексттексттексттекст
$UpdatedBy:тексттексттексттекст

После этого пять пустых строк и опять перечисление этих полей (иногда полей больше) с их значениями. И так далее. Всего где то 45 тысяч строк.

Необходимо преобразовать в CSV файл, с возможностью выбора столбцов (ненужные не запоминать).
Yuri Toropchin вне форума Ответить с цитированием
Старый 10.02.2015, 15:44   #2
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Открыть в Экселе, разбить по столбцам по двоеточию, сохранить в формате csv.
Если нужно что-то другое - с Вас два файла - что есть и как надо.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 10.02.2015, 15:58   #3
Yuri Toropchin
Новичок
Джуниор
 
Регистрация: 10.02.2015
Сообщений: 3
По умолчанию

Цитата:
Открыть в Экселе, разбить по столбцам по двоеточию, сохранить в формате csv.
Если нужно что-то другое - с Вас два файла - что есть и как надо.

Нужен такой вид такой вид:

Первая строка - CFullName,CshortName,CPhone,CFax,CZ ip,CEmail,CTelex,CAdress,CTopic,CAc cManager,CCountry,CRegion,CCity,CCa tegory,CRelType,CRelState

Последующие строки содержать перечисление значений соответственно первой строке -
текст1,текст2,текст3,текст4,текст5 и т.д.


Я написал такой макрос, но он берет только одну ячейку:

Sub тест()

Sheets("current").Activate
x = InputBox("введите искомое значение")
c = Cells.Find(What:=x).Column
r = Cells.Find(What:=x).Row
f = Cells(r, c + 1).Value
y = 1
Sheets("new").Activate
Cells(2, y).Value = f
y = y + 1

End Sub
Вложения
Тип файла: zip Книга7.zip (9.8 Кб, 12 просмотров)

Последний раз редактировалось Yuri Toropchin; 10.02.2015 в 16:09. Причина: Прикрепил примерные модели.
Yuri Toropchin вне форума Ответить с цитированием
Старый 10.02.2015, 16:11   #4
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Ну в общем так я и преполагал... Но вдруг не так нужно
Сделать можно, нужны массивы-словари-коллекции, и можно сделать без Экселя (скриптом wsh/vbs).
Но работы минимум на час, на работе столько свободного времени нет. Сверхурочно вечером в выходной работать неохота...
Да и примеры файлов обязательны. Правда с 100% предоплатой могу сделать на своих, но без гарантии на Ваших
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 10.02.2015, 16:16   #5
Yuri Toropchin
Новичок
Джуниор
 
Регистрация: 10.02.2015
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Ну в общем так я и преполагал... Но вдруг не так нужно
Сделать можно, нужны массивы-словари-коллекции, и можно сделать без Экселя (скриптом wsh/vbs).
Но работы минимум на час, на работе столько свободного времени нет. Сверхурочно вечером в выходной работать неохота...
Да и примеры файлов обязательны. Правда с 100% предоплатой могу сделать на своих, но без гарантии на Ваших
Я не размещал тему в разделе фриланс Не могли бы вы дать совет как мне изменить мой макрос, чтобы он сохранял все найденные ячейки в массив для начала.
Yuri Toropchin вне форума Ответить с цитированием
Старый 10.02.2015, 16:27   #6
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Не, Ваш макрос не знаю как изменить, я алгоритм вижу совершенно другим - разбить текст в массив (ну или можно его читать построчно), перебрать построчно собирая коллекцию названий столбцов и словарь группа/название+значение.
Затем цикл в цикле по коллекции, из словаря берём значение и пишем в строку в файл. Всё в общем. Час на реализацию.
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 10.02.2015 в 21:58. Причина: очепятка...
Hugo121 вне форума Ответить с цитированием
Старый 10.02.2015, 23:25   #7
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Заготовка:
Код:
Sub tt()
    Dim a, arr, cnt&, i&, ii&, col As New Collection, out, s$, t$
    a = Split(CreateObject("Scripting.FileSystemObject").Getfile("e:\Tmp\test.txt").OpenasTextStream(1).ReadAll, vbNewLine)

    On Error Resume Next
    With CreateObject("scripting.dictionary"): .comparemode = 1
        For i = 0 To UBound(a)

            If Len(a(i)) > 0 Then
                If Len(a(i - 1)) = 0 Then cnt = cnt + 1
            End If

            If InStr(a(i), ":") Then
                arr = Split(a(i), ":", 2): col.Add arr(0), arr(0)
                .Item(cnt & "|" & arr(0)) = arr(1)
            End If
        Next

        Set out = CreateObject("Scripting.FileSystemObject").CreateTextFile("e:\Tmp\test.csv", 2, True)

        For i = 1 To col.Count
            s = s & ";" & col(i)
        Next
        out.WriteLine Mid(s, 2)

        For ii = 1 To cnt
            s = ""
            For i = 1 To col.Count
                t = ii & "|" & col(i)
                If .exists(t) Then s = s & ";" & .Item(t) Else s = s & ";"
            Next
            out.WriteLine Mid(s, 2)
        Next
        out.Close
    End With
End Sub
Точно час нужен чтоб шлифануть на файлах, а если ещё выбор столбцов добавлять - то полтора.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 11.02.2015, 00:59   #8
alex77755
Форумчанин
 
Аватар для alex77755
 
Регистрация: 14.02.2009
Сообщений: 753
По умолчанию

Цитата:
Если нужно что-то другое - с Вас два файла - что есть и как надо.
Образца файла нет
Слепил из "того, что было"(во вложении)
Запустить, выбрать что надо, нажать "Сделать".
Рядом будет csv
Вложения
Тип файла: rar 1.rar (384.1 Кб, 7 просмотров)
помогу решить контрольные VB6, VBA (недорого)
Alex77755@mail.ru

Последний раз редактировалось alex77755; 11.02.2015 в 02:26.
alex77755 вне форума Ответить с цитированием
Старый 11.02.2015, 01:15   #9
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Alex, не работает
Т.е. конечно работает, но на таких данных не понять, что именно оно туда лепит...
Анализ показал что всюду лепит первую группу.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 11.02.2015, 01:22   #10
alex77755
Форумчанин
 
Аватар для alex77755
 
Регистрация: 14.02.2009
Сообщений: 753
По умолчанию

Не могу согласиться. Вроде выбранные выдаёт
Изображения
Тип файла: jpg 27.jpg (72.9 Кб, 85 просмотров)
помогу решить контрольные VB6, VBA (недорого)
Alex77755@mail.ru
alex77755 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Открытие выгрузки из SAP 27102014 Microsoft Office Excel 3 18.12.2014 15:53
Ускорить процесс выгрузки из БД Jl6owa БД в Delphi 8 29.03.2012 02:13
Преобразование 30 таблиц в CSV файлы. kola672 Софт 1 28.09.2010 14:49
Экспорт в csv и импорт из csv cent Microsoft Office Excel 12 28.12.2008 19:50